From 0140b4ded1a093142a1b07fc687c49cbac9020fd Mon Sep 17 00:00:00 2001 From: Dion Moult Date: Thu, 14 Sep 2023 22:50:57 +1000 Subject: [PATCH] IfcDiff can now visualise across linked IFCs --- .../blenderbim/bim/module/clash/operator.py | 11 +++++++-- .../blenderbim/bim/module/diff/operator.py | 24 +++++++++++++++++-- 2 files changed, 31 insertions(+), 4 deletions(-) diff --git a/src/blenderbim/blenderbim/bim/module/clash/operator.py b/src/blenderbim/blenderbim/bim/module/clash/operator.py index 933cc06b48..6013caf2b4 100644 --- a/src/blenderbim/blenderbim/bim/module/clash/operator.py +++ b/src/blenderbim/blenderbim/bim/module/clash/operator.py @@ -336,8 +336,15 @@ class SelectIfcClashResults(bpy.types.Operator): else: element_file = self.file - element = element_file.by_id(obj.BIMObjectProperties.ifc_definition_id) - if element.GlobalId in global_ids: + try: + element = element_file.by_id(obj.BIMObjectProperties.ifc_definition_id) + except: + continue + + global_id = getattr(element, "GlobalId", None) + if not global_id: + continue + if global_id in global_ids: obj.select_set(True) return {"FINISHED"} diff --git a/src/blenderbim/blenderbim/bim/module/diff/operator.py b/src/blenderbim/blenderbim/bim/module/diff/operator.py index 350f28867f..b11aa9c288 100644 --- a/src/blenderbim/blenderbim/bim/module/diff/operator.py +++ b/src/blenderbim/blenderbim/bim/module/diff/operator.py @@ -22,6 +22,7 @@ import ifccsv import ifcopenshell import blenderbim.bim.handler import blenderbim.tool as tool +from blenderbim.bim.ifc import IfcStore class SelectDiffJsonFile(bpy.types.Operator): @@ -51,8 +52,27 @@ class VisualiseDiff(bpy.types.Operator): diff = json.load(file) for obj in context.visible_objects: obj.color = (1.0, 1.0, 1.0, 1.0) - element = tool.Ifc.get_entity(obj) - if not element: + + if not obj.BIMObjectProperties.ifc_definition_id: + continue + + ifc_file = "" + for scene in obj.users_scene: + if scene.BIMProperties.ifc_file: + ifc_file = scene.BIMProperties.ifc_file + if scene.library: + break + + if ifc_file: + if ifc_file not in IfcStore.session_files: + IfcStore.session_files[ifc_file] = ifcopenshell.open(ifc_file) + element_file = IfcStore.session_files[ifc_file] + else: + element_file = ifc_file + + try: + element = element_file.by_id(obj.BIMObjectProperties.ifc_definition_id) + except: continue global_id = getattr(element, "GlobalId", None) if not global_id: