From f54a5cf6e03fd77311fae562833a4a0da9d38bf5 Mon Sep 17 00:00:00 2001 From: Dion Moult Date: Sun, 1 May 2022 09:41:03 +1000 Subject: [PATCH] Fix #2048. Fix bug where material and style IFC links were severed after reloading a saved Blender file --- src/blenderbim/blenderbim/bim/ifc.py | 25 +++++++++++++++++-------- 1 file changed, 17 insertions(+), 8 deletions(-) diff --git a/src/blenderbim/blenderbim/bim/ifc.py b/src/blenderbim/blenderbim/bim/ifc.py index e4b86ede7f..fad719ac59 100644 --- a/src/blenderbim/blenderbim/bim/ifc.py +++ b/src/blenderbim/blenderbim/bim/ifc.py @@ -232,20 +232,27 @@ class IfcStore: @staticmethod def relink_all_objects(): - file = IfcStore.get_file() - if not file: + if not IfcStore.get_file(): return for obj in bpy.data.objects: - if not obj: - continue - if not obj.BIMObjectProperties.ifc_definition_id: - continue - element = file.by_id(obj.BIMObjectProperties.ifc_definition_id) + IfcStore.relink_object(obj) + for obj in bpy.data.materials: + IfcStore.relink_object(obj) + + @staticmethod + def relink_object(obj): + if not obj: + return + if obj.BIMObjectProperties.ifc_definition_id: + element = IfcStore.get_file().by_id(obj.BIMObjectProperties.ifc_definition_id) data = {"id": element.id(), "obj": obj.name} if hasattr(element, "GlobalId"): data["guid"] = element.GlobalId IfcStore.commit_link_element(data) - + if hasattr(obj, "BIMMaterialProperties") and obj.BIMMaterialProperties.ifc_style_id: + element = IfcStore.get_file().by_id(obj.BIMMaterialProperties.ifc_style_id) + data = {"id": element.id(), "obj": obj.name} + IfcStore.commit_link_element(data) @staticmethod def delete_element(element): @@ -300,6 +307,8 @@ class IfcStore: @staticmethod def commit_link_element(data): obj = bpy.data.objects.get(data["obj"]) + if not obj: + obj = bpy.data.materials.get(data["obj"]) IfcStore.id_map[data["id"]] = obj if "guid" in data: IfcStore.guid_map[data["guid"]] = obj