diff --git a/src/ifcopenshell-python/ifcopenshell/__init__.py b/src/ifcopenshell-python/ifcopenshell/__init__.py index a16a20e100..6543a7e5d1 100644 --- a/src/ifcopenshell-python/ifcopenshell/__init__.py +++ b/src/ifcopenshell-python/ifcopenshell/__init__.py @@ -66,8 +66,4 @@ def create_entity(type,*args,**kwargs): for idx, arg in attrs: e[idx] = arg return e - -version = ifcopenshell_wrapper.version() -schema_identifier = ifcopenshell_wrapper.schema_identifier() -get_supertype = ifcopenshell_wrapper.get_supertype -get_log = ifcopenshell_wrapper.get_log +from .main import * diff --git a/src/ifcopenshell-python/ifcopenshell/main.py b/src/ifcopenshell-python/ifcopenshell/main.py new file mode 100644 index 0000000000..197c5bf95e --- /dev/null +++ b/src/ifcopenshell-python/ifcopenshell/main.py @@ -0,0 +1,25 @@ +############################################################################### +# # +# This file is part of IfcOpenShell. # +# # +# IfcOpenShell is free software: you can redistribute it and/or modify # +# it under the terms of the Lesser GNU General Public License as published by # +# the Free Software Foundation, either version 3.0 of the License, or # +# (at your option) any later version. # +# # +# IfcOpenShell is distributed in the hope that it will be useful, # +# but WITHOUT ANY WARRANTY; without even the implied warranty of # +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +# Lesser GNU General Public License for more details. # +# # +# You should have received a copy of the Lesser GNU General Public License # +# along with this program. If not, see . # +# # +############################################################################### + +from . import ifcopenshell_wrapper + +version = ifcopenshell_wrapper.version() +schema_identifier = ifcopenshell_wrapper.schema_identifier() +get_supertype = ifcopenshell_wrapper.get_supertype +get_log = ifcopenshell_wrapper.get_log diff --git a/src/ifcopenshell-python/ifcopenshell/template.py b/src/ifcopenshell-python/ifcopenshell/template.py new file mode 100644 index 0000000000..a4f08c9cdd --- /dev/null +++ b/src/ifcopenshell-python/ifcopenshell/template.py @@ -0,0 +1,80 @@ +############################################################################### +# # +# This file is part of IfcOpenShell. # +# # +# IfcOpenShell is free software: you can redistribute it and/or modify # +# it under the terms of the Lesser GNU General Public License as published by # +# the Free Software Foundation, either version 3.0 of the License, or # +# (at your option) any later version. # +# # +# IfcOpenShell is distributed in the hope that it will be useful, # +# but WITHOUT ANY WARRANTY; without even the implied warranty of # +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +# Lesser GNU General Public License for more details. # +# # +# You should have received a copy of the Lesser GNU General Public License # +# along with this program. If not, see . # +# # +############################################################################### + +import time +import uuid + +from .file import file +from .guid import compress +from . import main + +# A quick way to setup an 'empty' IFC file, taken from: +# http://academy.ifcopenshell.org/creating-a-simple-wall-with-property-set-and-quantity-information/ +TEMPLATE = """ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('%(filename)s','%(timestring)s',('%(creator)s'),('%(organization)s'),'%(application)s','%(application)s',''); +FILE_SCHEMA(('%(schema_identifier)s')); +ENDSEC; +DATA; +#1=IFCPERSON($,$,'%(creator)s',$,$,$,$,$); +#2=IFCORGANIZATION($,'%(organization)s',$,$,$); +#3=IFCPERSONANDORGANIZATION(#1,#2,$); +#4=IFCAPPLICATION(#2,'%(application_version)s','%(application)s',''); +#5=IFCOWNERHISTORY(#3,#4,$,.ADDED.,$,#3,#4,%(timestamp)s); +#6=IFCDIRECTION((1.,0.,0.)); +#7=IFCDIRECTION((0.,0.,1.)); +#8=IFCCARTESIANPOINT((0.,0.,0.)); +#9=IFCAXIS2PLACEMENT3D(#8,#7,#6); +#10=IFCDIRECTION((0.,1.,0.)); +#11=IFCGEOMETRICREPRESENTATIONCONTEXT($,'Model',3,1.E-05,#9,#10); +#12=IFCDIMENSIONALEXPONENTS(0,0,0,0,0,0,0); +#13=IFCSIUNIT(*,.LENGTHUNIT.,$,.METRE.); +#14=IFCSIUNIT(*,.AREAUNIT.,$,.SQUARE_METRE.); +#15=IFCSIUNIT(*,.VOLUMEUNIT.,$,.CUBIC_METRE.); +#16=IFCSIUNIT(*,.PLANEANGLEUNIT.,$,.RADIAN.); +#17=IFCMEASUREWITHUNIT(IFCPLANEANGLEMEASURE(0.017453292519943295),#16); +#18=IFCCONVERSIONBASEDUNIT(#12,.PLANEANGLEUNIT.,'DEGREE',#17); +#19=IFCUNITASSIGNMENT((#13,#14,#15,#18)); +#20=IFCPROJECT('%(project_globalid)s',#5,'%(project_name)s',$,$,$,$,(#11),#19); +ENDSEC; +END-ISO-10303-21; +""" + +DEFAULTS = { + "application": lambda d: 'IfcOpenShell-%s' % main.version, + "application_version": lambda d: main.version, + "project_globalid": lambda d: compress(uuid.uuid4().hex), + "schema_identifier": lambda d: main.schema_identifier, + "timestamp": lambda d: time.time(), + "timestring": lambda d: time.strftime("%Y-%m-%dT%H:%M:%S", time.gmtime(d.get('timestamp') or time.time())) +} + +def create(filename=None, timestring=None, organization=None, creator=None,\ + schema_identifier=None, application_version=None, timestamp=None,\ + application=None, project_globalid=None, project_name=None): + + d = dict(locals()) + def _(): + for var, value in d.items(): + if value is None: + yield var, DEFAULTS.get(var, lambda *args: '')(d) + d.update(dict(_())) + + return file.from_string(TEMPLATE % d)