diff --git a/src/blenderbim/blenderbim/bim/module/search/__init__.py b/src/blenderbim/blenderbim/bim/module/search/__init__.py index da8076d64d..ce0c3f6d9e 100644 --- a/src/blenderbim/blenderbim/bim/module/search/__init__.py +++ b/src/blenderbim/blenderbim/bim/module/search/__init__.py @@ -40,6 +40,7 @@ classes = ( operator.SaveSearch, operator.SaveSelectorQuery, operator.Search, + operator.SelectByProperty, operator.SelectFilterElements, operator.SelectGlobalId, operator.SelectIfcClass, diff --git a/src/blenderbim/blenderbim/bim/module/search/operator.py b/src/blenderbim/blenderbim/bim/module/search/operator.py index 78b5887751..71b0669e15 100644 --- a/src/blenderbim/blenderbim/bim/module/search/operator.py +++ b/src/blenderbim/blenderbim/bim/module/search/operator.py @@ -333,6 +333,36 @@ class ColourByProperty(Operator): data["area"].spaces[0].shading.color_type = "OBJECT" +class SelectByProperty(Operator): + bl_idname = "bim.select_by_property" + bl_label = "Select by Property" + bl_options = {"REGISTER", "UNDO"} + + @classmethod + def poll(cls, context): + props = context.scene.BIMSearchProperties + return props.active_colourscheme_index < len(props.colourscheme) + + def execute(self, context): + props = context.scene.BIMSearchProperties + query = props.colourscheme_query + + if not query: + self.report({"ERROR"}, "No Query Provided") + return {"CANCELLED"} + + active_value = props.colourscheme[props.active_colourscheme_index].name + + for obj in context.visible_objects: + element = tool.Ifc.get_entity(obj) + if not element: + continue + value = str(ifcopenshell.util.selector.get_element_value(element, query)) + if value == active_value: + obj.select_set(True) + return {"FINISHED"} + + class SaveColourscheme(Operator, tool.Ifc.Operator): bl_idname = "bim.save_colourscheme" bl_label = "Save Colourscheme" @@ -356,7 +386,9 @@ class SaveColourscheme(Operator, tool.Ifc.Operator): description["colourscheme_query"] = query group.Description = json.dumps(description) else: - description = json.dumps({"type": "BBIM_Search", "colourscheme": coulour_scheme,"colourscheme_query": query}) + description = json.dumps( + {"type": "BBIM_Search", "colourscheme": coulour_scheme, "colourscheme_query": query} + ) group = ifcopenshell.api.run("group.add_group", tool.Ifc.get(), Name=self.name, Description=description) def invoke(self, context, event): diff --git a/src/blenderbim/blenderbim/bim/module/search/prop.py b/src/blenderbim/blenderbim/bim/module/search/prop.py index 53b5db1554..bed3793580 100644 --- a/src/blenderbim/blenderbim/bim/module/search/prop.py +++ b/src/blenderbim/blenderbim/bim/module/search/prop.py @@ -17,9 +17,9 @@ # along with BlenderBIM Add-on. If not, see . import bpy +import blenderbim.tool as tool from ifcopenshell import util from ifcopenshell.util.selector import Selector -import blenderbim.tool as tool from blenderbim.bim.prop import ObjProperty, StrProperty from blenderbim.bim.ifc import IfcStore from blenderbim.bim.module.search.data import SearchData, ColourByPropertyData, SelectSimilarData diff --git a/src/blenderbim/blenderbim/bim/module/search/ui.py b/src/blenderbim/blenderbim/bim/module/search/ui.py index a2a24c7b68..3bef9394de 100644 --- a/src/blenderbim/blenderbim/bim/module/search/ui.py +++ b/src/blenderbim/blenderbim/bim/module/search/ui.py @@ -87,9 +87,12 @@ class BIM_PT_colour_by_property(Panel): row = self.layout.row(align=True) row.operator("bim.colour_by_property", icon="BRUSH_DATA") row.operator("bim.reset_object_colours") + row.operator("bim.select_by_property", icon="RESTRICT_SELECT_OFF", text="") if len(props.colourscheme): - self.layout.template_list("BIM_UL_colourscheme", "", props, "colourscheme", props, "active_colourscheme_index") + self.layout.template_list( + "BIM_UL_colourscheme", "", props, "colourscheme", props, "active_colourscheme_index" + ) class BIM_PT_select_similar(Panel):