From 3ac69043d696e0e4480ec9bcfa8390892254e0c5 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Fri, 26 Apr 2024 17:50:28 +0500 Subject: [PATCH] bbim to provide default user and organisation in ifc2x3 #4574 previously every operation that would try to create owner history would fail with the error below if there wasn't IfcPersonAndOrganisation in the project. --- src/blenderbim/blenderbim/bim/handler.py | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/src/blenderbim/blenderbim/bim/handler.py b/src/blenderbim/blenderbim/bim/handler.py index 9ebe90c5e7..49cb42cf9b 100644 --- a/src/blenderbim/blenderbim/bim/handler.py +++ b/src/blenderbim/blenderbim/bim/handler.py @@ -238,6 +238,19 @@ def get_application(ifc: ifcopenshell.file) -> ifcopenshell.entity_instance: ) +def get_user(ifc: ifcopenshell.file) -> Union[ifcopenshell.entity_instance, None]: + # TODO: cache this for even faster application retrieval. It honestly makes a difference on long scripts. + if pao := next(iter(ifc.by_type("IfcPersonAndOrganization")), None): + return pao + elif ifc.schema == "IFC2X3": + if (person := next(iter(ifc.by_type("IfcPerson")), None)) is None: + person = tool.Ifc.run("owner.add_person") + if (organization := next(iter(ifc.by_type("IfcOrganization")), None)) is None: + organization = tool.Ifc.run("owner.add_organisation") + pao = tool.Ifc.run("owner.add_person_and_organisation", person=person, organisation=organization) + return pao + + def get_application_version() -> str: return ".".join( [ @@ -279,7 +292,7 @@ def load_post(scene): key=key, owner=global_subscription_owner, args=(area,), notify=viewport_shading_changed_callback ) - ifcopenshell.api.owner.settings.get_user = lambda ifc: core_owner.get_user(tool.Owner) + ifcopenshell.api.owner.settings.get_user = get_user ifcopenshell.api.owner.settings.get_application = get_application AuthoringData.type_thumbnails = {}