diff --git a/src/blenderbim/blenderbim/bim/module/pset/operator.py b/src/blenderbim/blenderbim/bim/module/pset/operator.py index 3a3a3ec629..48c4b43edb 100644 --- a/src/blenderbim/blenderbim/bim/module/pset/operator.py +++ b/src/blenderbim/blenderbim/bim/module/pset/operator.py @@ -320,41 +320,52 @@ class EditPset(bpy.types.Operator, Operator): tool.Blender.update_viewport() - 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 common" pset_name: bpy.props.StringProperty() prop_name: bpy.props.StringProperty() value: bpy.props.StringProperty() + 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 + 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 - - if str(pset[self.prop_name]) == self.value: - obj.select_set(True) - + try: + pset = psets[self.pset_name] + if str(pset[self.prop_name]) == self.value: + obj.select_set(True) + except: + continue return {"FINISHED"} + class RemovePset(bpy.types.Operator, Operator): bl_idname = "bim.remove_pset" bl_label = "Remove Pset"