From 6a7cf6843ab6ef18aa636e8cec43b8b498bb24bd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bruno=20Perdig=C3=A3o?= Date: Thu, 6 Jul 2023 15:10:53 -0300 Subject: [PATCH 1/3] implements #3268 --- .../blenderbim/bim/module/pset/__init__.py | 1 + .../blenderbim/bim/module/pset/operator.py | 35 +++++++++++++++++++ .../blenderbim/bim/module/pset/ui.py | 4 +++ 3 files changed, 40 insertions(+) diff --git a/src/blenderbim/blenderbim/bim/module/pset/__init__.py b/src/blenderbim/blenderbim/bim/module/pset/__init__.py index ce6343975f..648507b07a 100644 --- a/src/blenderbim/blenderbim/bim/module/pset/__init__.py +++ b/src/blenderbim/blenderbim/bim/module/pset/__init__.py @@ -30,6 +30,7 @@ classes = ( operator.CalculateQuantity, operator.RemovePset, operator.TogglePsetExpansion, + operator.SelectSimilarPsetValue, operator.BIM_OT_add_property_to_edit, operator.BIM_OT_remove_property_to_edit, operator.BIM_OT_clear_list, diff --git a/src/blenderbim/blenderbim/bim/module/pset/operator.py b/src/blenderbim/blenderbim/bim/module/pset/operator.py index c796a39ecd..3a3a3ec629 100644 --- a/src/blenderbim/blenderbim/bim/module/pset/operator.py +++ b/src/blenderbim/blenderbim/bim/module/pset/operator.py @@ -320,6 +320,41 @@ class EditPset(bpy.types.Operator, Operator): tool.Blender.update_viewport() + +class SelectSimilarPsetValue(bpy.types.Operator): + bl_idname = "bim.select_similar_pset_value" + bl_label = "Select Similar Pset Value" + bl_options = {"REGISTER", "UNDO"} + pset_name: bpy.props.StringProperty() + prop_name: bpy.props.StringProperty() + value: bpy.props.StringProperty() + + def execute(self, context): + + for element in tool.Ifc.get().by_type("IfcElement"): + obj = tool.Ifc.get_object(element) + try: + psets = ifcopenshell.util.element.get_psets(element) + except: + continue + + if self.pset_name.endswith("Common"): + for key in psets.keys(): + if key.endswith("Common"): + pset = psets[key] + else: + pset = psets[self.pset_name] + + try: + pset[self.prop_name] + except: + continue + + if str(pset[self.prop_name]) == self.value: + obj.select_set(True) + + return {"FINISHED"} + class RemovePset(bpy.types.Operator, Operator): bl_idname = "bim.remove_pset" bl_label = "Remove Pset" diff --git a/src/blenderbim/blenderbim/bim/module/pset/ui.py b/src/blenderbim/blenderbim/bim/module/pset/ui.py index cd05f110c3..6eb1ab8419 100644 --- a/src/blenderbim/blenderbim/bim/module/pset/ui.py +++ b/src/blenderbim/blenderbim/bim/module/pset/ui.py @@ -135,6 +135,10 @@ def draw_psetqto_ui(context, pset_id, pset, props, layout, obj_type): row.scale_y = 0.8 row.label(text=prop["Name"]) row.label(text=str(prop["NominalValue"])) + op = row.operator("bim.select_similar_pset_value", text="", icon="RESTRICT_SELECT_OFF") + op.pset_name = pset["Name"] + op.prop_name = prop["Name"] + op.value = str(prop["NominalValue"]) if not has_props_displayed: row = box.row() row.scale_y = 0.8 From 2e423f26ff05c15d927012ed6f36c2885bdc1695 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bruno=20Perdig=C3=A3o?= Date: Fri, 7 Jul 2023 15:19:35 -0300 Subject: [PATCH 2/3] bugfix and alt+click functionality --- .../blenderbim/bim/module/pset/operator.py | 40 ++++++++++++------- 1 file changed, 26 insertions(+), 14 deletions(-) diff --git a/src/blenderbim/blenderbim/bim/module/pset/operator.py b/src/blenderbim/blenderbim/bim/module/pset/operator.py index 3a3a3ec629..e72b11c053 100644 --- a/src/blenderbim/blenderbim/bim/module/pset/operator.py +++ b/src/blenderbim/blenderbim/bim/module/pset/operator.py @@ -322,37 +322,49 @@ class EditPset(bpy.types.Operator, Operator): class SelectSimilarPsetValue(bpy.types.Operator): + """ + Selects objects with the same property value. + """ bl_idname = "bim.select_similar_pset_value" bl_label = "Select Similar Pset Value" bl_options = {"REGISTER", "UNDO"} + bl_description = "Selects objects with the same property value.\n\n" + "ALT+CLICK to select from all pset commons" pset_name: bpy.props.StringProperty() prop_name: bpy.props.StringProperty() value: bpy.props.StringProperty() + all_pset_common: bpy.props.BoolProperty(name = "All Classes", default=False, options={"SKIP_SAVE"}) + + def invoke(self, context, event): + # make sure to use SKIP_SAVE on property, otherwise it might get stuck + if event.type == "LEFTMOUSE" and event.alt: + self.all_pset_common = True + return self.execute(context) def execute(self, context): - for element in tool.Ifc.get().by_type("IfcElement"): - obj = tool.Ifc.get_object(element) try: + obj = tool.Ifc.get_object(element) psets = ifcopenshell.util.element.get_psets(element) except: continue - - if self.pset_name.endswith("Common"): + + if self.all_pset_common & self.pset_name.endswith("Common"): for key in psets.keys(): if key.endswith("Common"): - pset = psets[key] + try: + pset = psets[key] + if str(pset[self.prop_name]) == self.value: + obj.select_set(True) + except: + continue else: - pset = psets[self.pset_name] - - try: - pset[self.prop_name] - except: - continue + try: + pset = psets[self.pset_name] + if str(pset[self.prop_name]) == self.value: + obj.select_set(True) + except: + continue - if str(pset[self.prop_name]) == self.value: - obj.select_set(True) - return {"FINISHED"} class RemovePset(bpy.types.Operator, Operator): From 743339598eb2960a6f86fbfb7a84f389d12c1545 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bruno=20Perdig=C3=A3o?= Date: Fri, 7 Jul 2023 15:27:48 -0300 Subject: [PATCH 3/3] minor fix --- src/blenderbim/blenderbim/bim/module/pset/operator.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/blenderbim/blenderbim/bim/module/pset/operator.py b/src/blenderbim/blenderbim/bim/module/pset/operator.py index e72b11c053..909f7695a5 100644 --- a/src/blenderbim/blenderbim/bim/module/pset/operator.py +++ b/src/blenderbim/blenderbim/bim/module/pset/operator.py @@ -328,11 +328,11 @@ class SelectSimilarPsetValue(bpy.types.Operator): bl_idname = "bim.select_similar_pset_value" bl_label = "Select Similar Pset Value" bl_options = {"REGISTER", "UNDO"} - bl_description = "Selects objects with the same property value.\n\n" + "ALT+CLICK to select from all pset commons" + bl_description = "Selects objects with the same property value.\n\n" + "ALT+CLICK to select from all pset common" pset_name: bpy.props.StringProperty() prop_name: bpy.props.StringProperty() value: bpy.props.StringProperty() - all_pset_common: bpy.props.BoolProperty(name = "All Classes", default=False, options={"SKIP_SAVE"}) + all_pset_common: bpy.props.BoolProperty(name = "All Pset Common", default=False, options={"SKIP_SAVE"}) def invoke(self, context, event): # make sure to use SKIP_SAVE on property, otherwise it might get stuck