From 057343c7a8d954e6219789548b751a7d7154cd59 Mon Sep 17 00:00:00 2001 From: Ryan Schultz Date: Sun, 9 Mar 2025 09:23:23 -0500 Subject: [PATCH] first stab --- .../bonsai/bim/module/material/__init__.py | 1 + .../bonsai/bim/module/material/operator.py | 8 ++++++++ src/bonsai/bonsai/bim/module/material/ui.py | 20 ++++++++++++++++++- 3 files changed, 28 insertions(+), 1 deletion(-) diff --git a/src/bonsai/bonsai/bim/module/material/__init__.py b/src/bonsai/bonsai/bim/module/material/__init__.py index c7f7756bc9..23cdd72f25 100644 --- a/src/bonsai/bonsai/bim/module/material/__init__.py +++ b/src/bonsai/bonsai/bim/module/material/__init__.py @@ -66,6 +66,7 @@ classes = ( ui.BIM_PT_materials, ui.BIM_PT_object_material, ui.BIM_UL_materials, + ui.BIM_MT_material_context_menu ) diff --git a/src/bonsai/bonsai/bim/module/material/operator.py b/src/bonsai/bonsai/bim/module/material/operator.py index c6abbde92d..e004ad1298 100644 --- a/src/bonsai/bonsai/bim/module/material/operator.py +++ b/src/bonsai/bonsai/bim/module/material/operator.py @@ -62,6 +62,14 @@ class SelectByMaterial(bpy.types.Operator): bl_options = {"REGISTER", "UNDO"} material: bpy.props.IntProperty() + def invoke(self, context, event): + if event.type == 'RIGHTMOUSE': + if not hasattr(context.scene, "select_by_material_id"): + context.scene["select_by_material_id"] = self.material + bpy.ops.wm.call_menu(name="BIM_MT_material_context_menu") + return {"CANCELLED"} # Don't run execute() + return self.execute(context) + def execute(self, context): material = tool.Ifc.get().by_id(self.material) core.select_by_material(tool.Material, tool.Spatial, material=material) diff --git a/src/bonsai/bonsai/bim/module/material/ui.py b/src/bonsai/bonsai/bim/module/material/ui.py index f2eb2f155c..5e3533789d 100644 --- a/src/bonsai/bonsai/bim/module/material/ui.py +++ b/src/bonsai/bonsai/bim/module/material/ui.py @@ -20,7 +20,7 @@ from __future__ import annotations import bonsai.bim.helper import bonsai.tool as tool import bpy -from bpy.types import Panel, UIList +from bpy.types import Panel, UIList, Operator, Menu from bonsai.bim.helper import draw_attributes from bonsai.bim.helper import prop_with_search from bonsai.bim.module.material.data import MaterialsData, ObjectMaterialData @@ -374,6 +374,9 @@ class BIM_PT_object_material(Panel): self.layerset_bounds(box, active_object, location="Bottom_Exterior") + + + def layerset_bounds(self, layout, obj, location="Top_Interior"): set_usage = ObjectMaterialData.data.get("set_usage", {}) layer_set_direction = set_usage.get("layer_set_direction") @@ -437,3 +440,18 @@ class BIM_UL_materials(UIList): if item.has_style: row2.label(text="", icon="SHADING_RENDERED") row2.label(text=str(item.total_elements)) + + + + + +class BIM_MT_material_context_menu(bpy.types.Menu): + bl_label = "Material Context Menu" + + def draw(self, context): + layout = self.layout + op = layout.operator("bim.material_ui_select", text="Select by Material", icon="RESTRICT_SELECT_OFF") + op.material = context.scene.select_by_material_id # Use stored material + + +