From fefad1edf46add1b6076a8bd86ed70851c40e429 Mon Sep 17 00:00:00 2001 From: tim Date: Fri, 7 Feb 2025 10:27:55 -0500 Subject: [PATCH 1/4] Geographic Element Tool Icon My tree was missing --- .../model/ops.authoring.geographicelement.dat | Bin 0 -> 1196 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 src/bonsai/bonsai/bim/module/model/ops.authoring.geographicelement.dat diff --git a/src/bonsai/bonsai/bim/module/model/ops.authoring.geographicelement.dat b/src/bonsai/bonsai/bim/module/model/ops.authoring.geographicelement.dat new file mode 100644 index 0000000000000000000000000000000000000000..770d95e149da08b8253301fc4651070dc825e120 GIT binary patch literal 1196 zcmbtQy=vn?5Y~GHgI^*@;L5}p8-x!vu^4nxxm^&JA_SV4RNJW9Rw=d@hEoUz6)sZb z0fefw2EWH=f2JA zkJW3v5w4ikw<{du96VCZaU5}Ccomo4mY8^8pU}-}Xl46a%dXT4-mr zD{wAJ6LBC9=%5XI*~;#v#{+a>|I$lxl5NE|#H=`$5vQ!uB`4Onf;G_MA?$UE*2q>g z6&H;plr`i*GnU#POV$ul()>&VIjF=jzDS-8|>G8oQQndYalt z^-mq^Qr2<*n{HK+`fZtcKk>MhZ+e`< MECWB$8o2r0U)l@d6aWAK literal 0 HcmV?d00001 From fa53f1f8e4bcbe79dee482bf9072c6b9650f2131 Mon Sep 17 00:00:00 2001 From: tim Date: Fri, 7 Feb 2025 10:42:51 -0500 Subject: [PATCH 2/4] Icon mode for IFC Modes Added UIData class with function for storing icon color mode. IFC Mode dropdown now supports blender dark, blender light, and custom "white" themes --- src/bonsai/bonsai/bim/module/geometry/ui.py | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/src/bonsai/bonsai/bim/module/geometry/ui.py b/src/bonsai/bonsai/bim/module/geometry/ui.py index 80f5751eeca..f76bbed8938 100644 --- a/src/bonsai/bonsai/bim/module/geometry/ui.py +++ b/src/bonsai/bonsai/bim/module/geometry/ui.py @@ -32,13 +32,30 @@ from bonsai.bim.module.layer.data import LayersData +class UIData: + data = {} + is_loaded = False + + @classmethod + def load(cls): + cls.data = {"menu_icon_color_mode": cls.icon_color_mode("user_interface.wcol_menu.text")} + cls.is_loaded = True + + @classmethod + def icon_color_mode(cls, color_path): + return tool.Blender.detect_icon_color_mode(color_path) + + def mode_menu(self, context): if not tool.Ifc.get(): return + if not UIData.is_loaded: + UIData.load() + ifc_icon = f"{UIData.data['menu_icon_color_mode']}_ifc" row = self.layout.row(align=True) if context.scene.BIMGeometryProperties.mode == "EDIT": row.operator("bim.override_mode_set_object", icon="CANCEL", text="Discard Changes").should_save = False - row.prop(context.scene.BIMGeometryProperties, "mode", text="", icon_value=bonsai.bim.icons["IFC"].icon_id) + row.prop(context.scene.BIMGeometryProperties, "mode", text="", icon_value=bonsai.bim.icons[ifc_icon].icon_id) def object_menu(self, context): From deac7e8872c37c6ac9ef901e539628bc86cdceab Mon Sep 17 00:00:00 2001 From: tim Date: Fri, 7 Feb 2025 10:53:44 -0500 Subject: [PATCH 3/4] Icon mode for Open-Recent-IFC-Project Added UIData class with function for storing icon color mode. Open Recent IFC Project icons now supports blender dark, blender light, and custom "white" themes --- src/bonsai/bonsai/bim/module/project/ui.py | 23 +++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/src/bonsai/bonsai/bim/module/project/ui.py b/src/bonsai/bonsai/bim/module/project/ui.py index 4b4b5dcad97..51505ed46e0 100644 --- a/src/bonsai/bonsai/bim/module/project/ui.py +++ b/src/bonsai/bonsai/bim/module/project/ui.py @@ -37,6 +37,24 @@ def file_import_menu(self, context): op.should_start_fresh_session = False +def refresh(): + UIData.is_loaded = False + + +class UIData: + data = {} + is_loaded = False + + @classmethod + def load(cls): + cls.data = {"menu_item_icon_color_mode": cls.icon_color_mode("user_interface.wcol_menu_item.text")} + cls.is_loaded = True + + @classmethod + def icon_color_mode(cls, color_path): + return tool.Blender.detect_icon_color_mode(color_path) + + class BIM_MT_project(Menu): bl_idname = "BIM_MT_project" bl_label = "New IFC Project" @@ -54,6 +72,9 @@ class BIM_MT_recent_projects(Menu): bl_label = "Open Recent IFC Project" def draw(self, context): + if not UIData.is_loaded: + UIData.load() + ifc_icon = f"{UIData.data['menu_item_icon_color_mode']}_ifc" layout = self.layout paths = tool.Project.get_recent_ifc_projects() if not paths: @@ -62,7 +83,7 @@ def draw(self, context): for path in paths: row = layout.row() - op = row.operator("bim.load_project", text=path.name, icon_value=bonsai.bim.icons["IFC"].icon_id) + op = row.operator("bim.load_project", text=path.name, icon_value=bonsai.bim.icons[ifc_icon].icon_id) op.filepath = str(path) op.should_start_fresh_session = True op.use_detailed_tooltip = True From d7de70de141babb3d7a28a6d7f0a6832e242ca94 Mon Sep 17 00:00:00 2001 From: tim Date: Fri, 7 Feb 2025 12:50:04 -0500 Subject: [PATCH 4/4] IFC icon in Scene dropdown custom white mode support for IFC icon in scene drop down menu --- src/bonsai/bonsai/bim/prop.py | 11 ++++++++--- src/bonsai/bonsai/bim/ui.py | 12 ++++++++---- 2 files changed, 16 insertions(+), 7 deletions(-) diff --git a/src/bonsai/bonsai/bim/prop.py b/src/bonsai/bonsai/bim/prop.py index caddd909755..8c790444f1b 100644 --- a/src/bonsai/bonsai/bim/prop.py +++ b/src/bonsai/bonsai/bim/prop.py @@ -406,11 +406,16 @@ def set_value(self, value: Union[Any, str, float, bool, int]) -> None: def get_tab( self: "Union[BIMAreaProperties, BIMTabProperties]", context: bpy.types.Context ) -> list[tuple[str, str, str, str, int]]: - # Items are not very dynamic, but can't make them completely static - # because icons are not yet available during prop registration. + + UIData = bonsai.bim.ui.UIData + if not UIData.is_loaded: + UIData.load() + + icon_key = f"{UIData.data['menu_icon_color_mode']}_ifc" + if not hasattr(get_tab, "enum_items"): get_tab.enum_items = [ - ("PROJECT", "Project Overview", "", bonsai.bim.icons["IFC"].icon_id, 0), + ("PROJECT", "Project Overview", "", bonsai.bim.icons[icon_key].icon_id, 0), ("OBJECT", "Object Information", "", "FILE_3D", 1), ("GEOMETRY", "Geometry and Materials", "", "MATERIAL", 2), ("DRAWINGS", "Drawings and Documents", "", "DOCUMENTS", 3), diff --git a/src/bonsai/bonsai/bim/ui.py b/src/bonsai/bonsai/bim/ui.py index 3579366a1e9..bc6a1a2b304 100644 --- a/src/bonsai/bonsai/bim/ui.py +++ b/src/bonsai/bonsai/bim/ui.py @@ -407,7 +407,7 @@ def draw(self, context): UIData.load() is_ifc_project = bool(tool.Ifc.get()) aprops = tool.Blender.get_area_props(context) - ifc_icon = f"{UIData.data['icon_color_mode']}_ifc" + ifc_icon = f"{UIData.data['tabs_icon_color_mode']}_ifc" row = self.layout.row() row.alignment = "CENTER" @@ -1118,7 +1118,11 @@ class UIData: @classmethod def load(cls): - cls.data = {"version": cls.version(), "icon_color_mode": cls.icon_color_mode()} + cls.data = { + "version": cls.version(), + "tabs_icon_color_mode": cls.icon_color_mode("user_interface.wcol_regular.text"), + "menu_icon_color_mode": cls.icon_color_mode("user_interface.wcol_menu.text"), + } cls.is_loaded = True @classmethod @@ -1126,8 +1130,8 @@ def version(cls): return tool.Blender.get_bonsai_version() @classmethod - def icon_color_mode(cls): - return tool.Blender.detect_icon_color_mode() + def icon_color_mode(cls, color_path): + return tool.Blender.detect_icon_color_mode(color_path) def draw_statusbar(self, context):