From e75cc10988e928d978adc0493542a5e719e03005 Mon Sep 17 00:00:00 2001 From: Dion Moult Date: Mon, 25 May 2020 19:07:09 +1000 Subject: [PATCH] New feature to select IFC clash results --- .../blenderbim/bim/__init__.py | 1 + .../blenderbim/bim/operator.py | 31 +++++++++++++++++++ src/ifcblenderexport/blenderbim/bim/ui.py | 3 ++ 3 files changed, 35 insertions(+) diff --git a/src/ifcblenderexport/blenderbim/bim/__init__.py b/src/ifcblenderexport/blenderbim/bim/__init__.py index a1c92b3bb4..783d6db47b 100644 --- a/src/ifcblenderexport/blenderbim/bim/__init__.py +++ b/src/ifcblenderexport/blenderbim/bim/__init__.py @@ -108,6 +108,7 @@ if bpy is not None: operator.RemoveClashSource, operator.SelectClashSource, operator.ExecuteIfcClash, + operator.SelectIfcClashResults, operator.AssignContext, operator.SwitchContext, operator.SetViewPreset1, diff --git a/src/ifcblenderexport/blenderbim/bim/operator.py b/src/ifcblenderexport/blenderbim/bim/operator.py index 21df99bc0c..1fbee0de20 100644 --- a/src/ifcblenderexport/blenderbim/bim/operator.py +++ b/src/ifcblenderexport/blenderbim/bim/operator.py @@ -1330,6 +1330,37 @@ class ExecuteIfcClash(bpy.types.Operator): return {'FINISHED'} +class SelectIfcClashResults(bpy.types.Operator): + bl_idname = 'bim.select_ifc_clash_results' + bl_label = 'Select IFC Clash Results' + filename_ext = '.json' + filepath: bpy.props.StringProperty(subtype='FILE_PATH') + + def invoke(self, context, event): + self.filepath = bpy.path.ensure_ext(bpy.data.filepath, '.json') + WindowManager = context.window_manager + WindowManager.fileselect_add(self) + return {'RUNNING_MODAL'} + + def execute(self, context): + self.filepath = bpy.path.ensure_ext(self.filepath, '.json') + with open(self.filepath) as f: + clash_sets = json.load(f) + clash_set_name = bpy.context.scene.BIMProperties.clash_sets[ + bpy.context.scene.BIMProperties.active_clash_set_index].name + global_ids = [] + for clash_set in clash_sets: + if clash_set['name'] != clash_set_name: + continue + for clash in clash_set['clashes'].values(): + global_ids.extend([clash['a_global_id'], clash['b_global_id']]) + for obj in bpy.context.visible_objects: + global_id = obj.BIMObjectProperties.attributes.get('GlobalId') + if global_id and global_id.string_value in global_ids: + obj.select_set(True) + return {'FINISHED'} + + class SelectBcfFile(bpy.types.Operator): bl_idname = "bim.select_bcf_file" bl_label = "Select BCF File" diff --git a/src/ifcblenderexport/blenderbim/bim/ui.py b/src/ifcblenderexport/blenderbim/bim/ui.py index c1335a2274..9faf4b3c0c 100644 --- a/src/ifcblenderexport/blenderbim/bim/ui.py +++ b/src/ifcblenderexport/blenderbim/bim/ui.py @@ -1361,3 +1361,6 @@ class BIM_PT_ifcclash(Panel): row = layout.row() row.operator('bim.execute_ifc_clash') + + row = layout.row() + row.operator('bim.select_ifc_clash_results')