From 3e44f0f37b59da597c840d9253e3e13291a10bf3 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Thu, 31 Oct 2024 17:17:43 +0500 Subject: [PATCH] Quick way to select profile in profiles UI Example - https://imgchest.com/p/9rydakllwyk --- src/bonsai/bonsai/bim/module/material/ui.py | 2 ++ .../bonsai/bim/module/profile/__init__.py | 1 + .../bonsai/bim/module/profile/operator.py | 25 +++++++++++++++++++ 3 files changed, 28 insertions(+) diff --git a/src/bonsai/bonsai/bim/module/material/ui.py b/src/bonsai/bonsai/bim/module/material/ui.py index 3ba5f61206..33c69de2b8 100644 --- a/src/bonsai/bonsai/bim/module/material/ui.py +++ b/src/bonsai/bonsai/bim/module/material/ui.py @@ -297,6 +297,8 @@ class BIM_PT_object_material(Panel): and ObjectMaterialData.data["material_class"] != "IfcMaterialList" ): if "Profile" in ObjectMaterialData.data["material_class"]: + op = row.operator("bim.profiles_ui_select", icon="ZOOM_SELECTED", text="") + op.profile_id = set_item["id"] op = row.operator("bim.enable_editing_material_set_item_profile", icon="ITALIC", text="") op.material_set_item = set_item["id"] op = row.operator("bim.enable_editing_material_set_item", icon="GREASEPENCIL", text="") diff --git a/src/bonsai/bonsai/bim/module/profile/__init__.py b/src/bonsai/bonsai/bim/module/profile/__init__.py index a9a4895884..c4e4d0a91d 100644 --- a/src/bonsai/bonsai/bim/module/profile/__init__.py +++ b/src/bonsai/bonsai/bim/module/profile/__init__.py @@ -31,6 +31,7 @@ classes = ( operator.EnableEditingProfile, operator.LoadProfiles, operator.RemoveProfileDef, + operator.SelectProfileInProfilesUI, prop.Profile, prop.BIMProfileProperties, ui.BIM_PT_profiles, diff --git a/src/bonsai/bonsai/bim/module/profile/operator.py b/src/bonsai/bonsai/bim/module/profile/operator.py index f6d74821f5..b976c16b7e 100644 --- a/src/bonsai/bonsai/bim/module/profile/operator.py +++ b/src/bonsai/bonsai/bim/module/profile/operator.py @@ -274,3 +274,28 @@ class EditArbitraryProfile(bpy.types.Operator, tool.Ifc.Operator): props.active_arbitrary_profile_id = 0 model_profile.DumbProfileRegenerator().regenerate_from_profile_def(profile) + + +class SelectProfileInProfilesUI(bpy.types.Operator): + bl_idname = "bim.profiles_ui_select" + bl_label = "Select Profile In Profiles UI" + bl_options = {"REGISTER", "UNDO"} + profile_id: bpy.props.IntProperty() + + def execute(self, context): + props = bpy.context.scene.BIMProfileProperties + ifc_file = tool.Ifc.get() + profile = ifc_file.by_id(self.profile_id) + bpy.ops.bim.load_profiles() + + profile_index = next((i for i, m in enumerate(props.profiles) if m.ifc_definition_id == self.profile_id), None) + if profile_index is None: + self.report({"INFO"}, "Profile not found in Profiles UI. Perhaps it's unnamed?") + return {"CANCELLED"} + + props.active_profile_index = profile_index + self.report( + {"INFO"}, + f"Profile '{profile.Name or 'Unnamed'}' is selected in Profiles UI.", + ) + return {"FINISHED"}