diff --git a/src/blenderbim/blenderbim/bim/handler.py b/src/blenderbim/blenderbim/bim/handler.py index 0fda547dc4..a97c7d6c02 100644 --- a/src/blenderbim/blenderbim/bim/handler.py +++ b/src/blenderbim/blenderbim/bim/handler.py @@ -202,6 +202,7 @@ def ensureIfcExported(scene): def get_application(ifc): + # TODO: cache this for even faster application retrieval. It honestly makes a difference on long scripts. version = get_application_version() for element in ifc.by_type("IfcApplication"): if element.ApplicationIdentifier == "BlenderBIM" and element.Version == version: @@ -209,7 +210,7 @@ def get_application(ifc): return ifcopenshell.api.run( "owner.add_application", ifc, - version=get_application_version(), + version=version, application_full_name="BlenderBIM Add-on", application_identifier="BlenderBIM", ) diff --git a/src/blenderbim/blenderbim/bim/import_ifc.py b/src/blenderbim/blenderbim/bim/import_ifc.py index a6f2ed1068..8df3053d74 100644 --- a/src/blenderbim/blenderbim/bim/import_ifc.py +++ b/src/blenderbim/blenderbim/bim/import_ifc.py @@ -1211,12 +1211,12 @@ class IfcImporter: elif element.is_a("IfcGridAxis"): return elif element.GlobalId in self.collections: - return self.collections[element.GlobalId].objects.link(obj) - elif getattr(element, "Decomposes", None): - aggregate = ifcopenshell.util.element.get_aggregate(element) - collection = self.collections[aggregate.GlobalId] + collection = self.collections[element.GlobalId] collection.name = obj.name return collection.objects.link(obj) + elif getattr(element, "Decomposes", None): + aggregate = ifcopenshell.util.element.get_aggregate(element) + return self.collections[aggregate.GlobalId].objects.link(obj) else: return self.place_object_in_spatial_decomposition_collection(element, obj) diff --git a/src/blenderbim/blenderbim/bim/module/project/operator.py b/src/blenderbim/blenderbim/bim/module/project/operator.py index 67072ba6ac..b6d66ab36e 100644 --- a/src/blenderbim/blenderbim/bim/module/project/operator.py +++ b/src/blenderbim/blenderbim/bim/module/project/operator.py @@ -61,10 +61,11 @@ class CreateProject(bpy.types.Operator): ) self.file = IfcStore.get_file() - person = blenderbim.core.owner.add_person(tool.Ifc) - organisation = blenderbim.core.owner.add_organisation(tool.Ifc) - user = blenderbim.core.owner.add_person_and_organisation(tool.Ifc, person=person, organisation=organisation) - blenderbim.core.owner.set_user(tool.Owner, user=user) + if self.file.schema == "IFC2X3": + person = blenderbim.core.owner.add_person(tool.Ifc) + organisation = blenderbim.core.owner.add_organisation(tool.Ifc) + user = blenderbim.core.owner.add_person_and_organisation(tool.Ifc, person=person, organisation=organisation) + blenderbim.core.owner.set_user(tool.Owner, user=user) project = bpy.data.objects.new(self.get_name("IfcProject", "My Project"), None) site = bpy.data.objects.new(self.get_name("IfcSite", "My Site"), None) diff --git a/src/ifcopenshell-python/ifcopenshell/api/owner/create_owner_history.py b/src/ifcopenshell-python/ifcopenshell/api/owner/create_owner_history.py index 6f0eb1cd89..48563bd5b7 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/owner/create_owner_history.py +++ b/src/ifcopenshell-python/ifcopenshell/api/owner/create_owner_history.py @@ -12,10 +12,11 @@ class Usecase: def execute(self): user = ifcopenshell.api.owner.settings.get_user(self.file) + if self.file.schema != "IFC2X3" and not user: + return application = ifcopenshell.api.owner.settings.get_application(self.file) - if self.file.schema != "IFC2X3": - if not user or not application: - return + if self.file.schema != "IFC2X3" and not application: + return return self.file.create_entity( "IfcOwnerHistory", **{ diff --git a/src/ifcopenshell-python/ifcopenshell/api/owner/update_owner_history.py b/src/ifcopenshell-python/ifcopenshell/api/owner/update_owner_history.py index e3e469f169..8f827e728a 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/owner/update_owner_history.py +++ b/src/ifcopenshell-python/ifcopenshell/api/owner/update_owner_history.py @@ -15,8 +15,10 @@ class Usecase: if not hasattr(self.settings["element"], "OwnerHistory"): return user = ifcopenshell.api.owner.settings.get_user(self.file) + if not user: + return application = ifcopenshell.api.owner.settings.get_application(self.file) - if not user or not application: + if not application: return if not self.settings["element"].OwnerHistory: self.settings["element"].OwnerHistory = ifcopenshell.api.run(