From 5c33a6654899d8b92a6aaf32c382584a6ab2daa5 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Wed, 6 Nov 2024 16:26:53 +0500 Subject: [PATCH] Hide assign class panel for representation items --- src/bonsai/bonsai/bim/module/model/data.py | 16 ++++++++-------- src/bonsai/bonsai/bim/module/model/workspace.py | 4 +++- src/bonsai/bonsai/bim/module/root/ui.py | 6 ++++++ 3 files changed, 17 insertions(+), 9 deletions(-) diff --git a/src/bonsai/bonsai/bim/module/model/data.py b/src/bonsai/bonsai/bim/module/model/data.py index d0ee83b508..8fb018a5db 100644 --- a/src/bonsai/bonsai/bim/module/model/data.py +++ b/src/bonsai/bonsai/bim/module/model/data.py @@ -74,6 +74,7 @@ class AuthoringData: cls.data["has_visible_boundaries"] = cls.has_visible_boundaries() cls.data["active_class"] = cls.active_class() cls.data["active_material_usage"] = cls.active_material_usage() + cls.data["is_representation_item_active"] = cls.is_representation_item_active() cls.data["active_representation_type"] = cls.active_representation_type() cls.data["boundary_class"] = cls.boundary_class() cls.data["selected_material_usages"] = cls.selected_material_usages() @@ -192,6 +193,13 @@ class AuthoringData: if element: return tool.Model.get_usage_type(element) + @classmethod + def is_representation_item_active(cls) -> bool: + object = bpy.context.active_object + if not object: + return False + return tool.Geometry.is_representation_item(object) + @classmethod def active_representation_type(cls): if active_object := tool.Blender.get_active_object(): @@ -555,7 +563,6 @@ class ItemData: cls.data = {} cls.data["representation_identifier"] = cls.representation_identifier() cls.data["representation_type"] = cls.representation_type() - cls.data["is_representation_item_active"] = cls.is_representation_item_active() @classmethod def representation_identifier(cls): @@ -568,10 +575,3 @@ class ItemData: props = bpy.context.scene.BIMGeometryProperties rep = tool.Geometry.get_active_representation(props.representation_obj) return rep.RepresentationType - - @classmethod - def is_representation_item_active(cls) -> bool: - object = bpy.context.active_object - if not object: - return False - return tool.Geometry.is_representation_item(object) diff --git a/src/bonsai/bonsai/bim/module/model/workspace.py b/src/bonsai/bonsai/bim/module/model/workspace.py index 5ac9aaf45c..90ae7f015d 100644 --- a/src/bonsai/bonsai/bim/module/model/workspace.py +++ b/src/bonsai/bonsai/bim/module/model/workspace.py @@ -261,6 +261,8 @@ class EditItemUI: def draw(cls, context: bpy.types.Context, layout: bpy.types.UILayout): if not ItemData.is_loaded: ItemData.load() + if not AuthoringData.is_loaded: + AuthoringData.load() cls.layout = layout row = cls.layout.row() @@ -270,7 +272,7 @@ class EditItemUI: row = cls.layout.row() row.label(text="Type: " + ItemData.data["representation_type"], icon="OUTLINER_OB_MESH") cls.layout.menu("BIM_MT_add_representation_item", icon="ADD") - if not ItemData.data["is_representation_item_active"]: + if not AuthoringData.data["is_representation_item_active"]: return obj = context.active_object assert obj diff --git a/src/bonsai/bonsai/bim/module/root/ui.py b/src/bonsai/bonsai/bim/module/root/ui.py index c8cec94d57..809230656f 100644 --- a/src/bonsai/bonsai/bim/module/root/ui.py +++ b/src/bonsai/bonsai/bim/module/root/ui.py @@ -22,6 +22,7 @@ from bpy.types import Panel from bonsai.bim.ifc import IfcStore from bonsai.bim.helper import prop_with_search from bonsai.bim.module.root.data import IfcClassData +from bonsai.bim.module.model.data import AuthoringData class BIM_PT_class(Panel): @@ -72,6 +73,11 @@ class BIM_PT_class(Panel): if IfcClassData.data["can_reassign_class"]: row.operator("bim.enable_reassign_class", icon="GREASEPENCIL", text="") else: + if not AuthoringData.is_loaded: + AuthoringData.load() + if AuthoringData.data["is_representation_item_active"]: + return + ifc_predefined_types = root_prop.get_ifc_predefined_types(context.scene.BIMRootProperties, context) self.draw_class_dropdowns(context, ifc_predefined_types) row = self.layout.row(align=True)