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