From 6dfeadf1935c0afaa2cd8e7c78b18d38e5866e68 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Fri, 8 Dec 2023 18:38:09 +0500 Subject: [PATCH] Fixed issues with linked elements from linked blend files #4081 In #4081 reported the case when during redo (changing param in operator's popup) `Ifc.rebuild_element_maps` was relinking elements without discarding possible linked blender libraries. It end up accidentally linking some library's objects to the current Ifc file leading to errors. Also fixed possible similar issue in couple other places. --- src/blenderbim/blenderbim/bim/ifc.py | 4 ++++ src/blenderbim/blenderbim/bim/operator.py | 4 ++++ src/blenderbim/blenderbim/tool/ifc.py | 6 ++++++ 3 files changed, 14 insertions(+) diff --git a/src/blenderbim/blenderbim/bim/ifc.py b/src/blenderbim/blenderbim/bim/ifc.py index 312527beb4..8d31281804 100644 --- a/src/blenderbim/blenderbim/bim/ifc.py +++ b/src/blenderbim/blenderbim/bim/ifc.py @@ -163,8 +163,12 @@ class IfcStore: if not IfcStore.get_file(): return for obj in bpy.data.objects: + if obj.library: + continue IfcStore.relink_object(obj) for obj in bpy.data.materials: + if obj.library: + continue IfcStore.relink_object(obj) @staticmethod diff --git a/src/blenderbim/blenderbim/bim/operator.py b/src/blenderbim/blenderbim/bim/operator.py index 42739c680e..69f46e5f34 100644 --- a/src/blenderbim/blenderbim/bim/operator.py +++ b/src/blenderbim/blenderbim/bim/operator.py @@ -670,6 +670,8 @@ class ReloadIfcFile(bpy.types.Operator, tool.Ifc.Operator): # STEP IDs may change, but we assume the GlobalID to be constant obj_map = {} for obj in bpy.data.objects: + if obj.library: + continue element = tool.Ifc.get_entity(obj) if element and hasattr(element, "GlobalId"): obj_map[obj.name] = element.GlobalId @@ -678,6 +680,8 @@ class ReloadIfcFile(bpy.types.Operator, tool.Ifc.Operator): tool.Ifc.set(new) for obj in bpy.data.objects: + if obj.library: + continue global_id = obj_map.get(obj.name) if global_id: try: diff --git a/src/blenderbim/blenderbim/tool/ifc.py b/src/blenderbim/blenderbim/tool/ifc.py index a655b5ce1a..d17c819894 100644 --- a/src/blenderbim/blenderbim/tool/ifc.py +++ b/src/blenderbim/blenderbim/tool/ifc.py @@ -118,6 +118,9 @@ class Ifc(blenderbim.core.tool.Ifc): return for obj in bpy.data.objects: + if obj.library: + continue + bpy.msgbus.clear_by_owner(obj) element = cls.get_entity(obj) @@ -134,6 +137,9 @@ class Ifc(blenderbim.core.tool.Ifc): ) for obj in bpy.data.materials: + if obj.library: + continue + bpy.msgbus.clear_by_owner(obj) material = cls.get_entity(obj)