From 72b2cf626f21d0a32875d09b2c79e412bce9bba0 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] 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):