This commit is contained in:
falken10vdl
2025-12-11 02:05:08 +01:00
parent 89973a7a76
commit 34cf69e3fb
4 changed files with 45 additions and 31 deletions
+1 -2
View File
@@ -144,6 +144,7 @@ classes = [
prop.ISODuration,
prop.BIMAreaProperties,
prop.BIMTabProperties,
prop.BIMTabVisibility, # Must be registered before BIMProperties
prop.BIMPanelProperties, # Must be registered before BIMProperties
prop.BIMProperties,
prop.IfcParameter,
@@ -285,8 +286,6 @@ def register():
bpy.types.Camera.BIMMeshProperties = bpy.props.PointerProperty(type=prop.BIMMeshProperties)
bpy.types.PointLight.BIMMeshProperties = bpy.props.PointerProperty(type=prop.BIMMeshProperties)
ui.initialize_panel_properties()
if hasattr(bpy.types, "UI_MT_button_context_menu"):
bpy.types.UI_MT_button_context_menu.append(ui.draw_custom_context_menu)
bpy.types.STATUSBAR_HT_header.append(ui.draw_statusbar)
+2 -1
View File
@@ -33,7 +33,7 @@ import bonsai.bim
import bonsai.tool as tool
import bonsai.bim.handler
from enum import Enum
from bonsai.bim.ui import get_all_tab_panels, get_tab_visibility, set_tab_visibility, get_tab_names, get_panel_config, initialize_panel_properties
from bonsai.bim.ui import get_all_tab_panels, get_tab_visibility, set_tab_visibility, get_tab_names, get_panel_config, initialize_panel_properties, initialize_tab_visibilities
from bpy_extras.io_utils import ImportHelper
from bonsai.bim import import_ifc
from bonsai.bim.prop import StrProperty
@@ -1794,6 +1794,7 @@ class BIM_OT_manage_tab_panels(bpy.types.Operator):
context.scene.active_tab_name = self.tab_name
context.scene.tab_panels.clear()
initialize_tab_visibilities()
initialize_panel_properties()
all_panels = get_all_tab_panels(force_refresh=True)
+12 -20
View File
@@ -530,6 +530,15 @@ class BIMTabProperties(PropertyGroup):
inactive_tab: bool
class BIMTabVisibility(PropertyGroup):
name: StringProperty(name="Tab Name")
is_visible: BoolProperty(name="Is Visible", default=True)
if TYPE_CHECKING:
name: str
is_visible: bool
class BIMPanelProperties(PropertyGroup):
is_visible_in_tab: BoolProperty(name="Is Visible in Tab", default=True)
is_visible_in_bookmarks: BoolProperty(name="Is Visible in Bookmarks", default=True)
@@ -624,16 +633,8 @@ class BIMProperties(PropertyGroup):
],
name="Time Unit",
default="HOUR",
) tab_visibility_project: BoolProperty(name="Project Tab Visible", default=True)
tab_visibility_object: BoolProperty(name="Object Tab Visible", default=True)
tab_visibility_geometry: BoolProperty(name="Geometry Tab Visible", default=True)
tab_visibility_drawings: BoolProperty(name="Drawings Tab Visible", default=True)
tab_visibility_services: BoolProperty(name="Services Tab Visible", default=True)
tab_visibility_structure: BoolProperty(name="Structure Tab Visible", default=True)
tab_visibility_scheduling: BoolProperty(name="Scheduling Tab Visible", default=True)
tab_visibility_fm: BoolProperty(name="FM Tab Visible", default=True)
tab_visibility_quality: BoolProperty(name="Quality Tab Visible", default=True)
tab_visibility_bookmark: BoolProperty(name="Bookmark Tab Visible", default=True)
)
tab_visibilities: CollectionProperty(type=BIMTabVisibility, name="Tab Visibilities")
panel_properties: CollectionProperty(type=BIMPanelProperties, name="Panel Properties")
if TYPE_CHECKING:
@@ -650,16 +651,7 @@ class BIMProperties(PropertyGroup):
volume_unit: str
mass_unit: str
time_unit: str
tab_visibility_project: bool
tab_visibility_object: bool
tab_visibility_geometry: bool
tab_visibility_drawings: bool
tab_visibility_services: bool
tab_visibility_structure: bool
tab_visibility_scheduling: bool
tab_visibility_fm: bool
tab_visibility_quality: bool
tab_visibility_bookmark: bool
tab_visibilities: bpy.types.bpy_prop_collection[BIMTabVisibility]
panel_properties: bpy.types.bpy_prop_collection[BIMPanelProperties]
+30 -8
View File
@@ -35,7 +35,7 @@ from bonsai import get_debug_info
import bonsai.bim
import bonsai.tool as tool
from ifcopenshell.util.file import IfcHeaderExtractor
from bonsai.bim.prop import Attribute
from bonsai.bim.prop import Attribute, get_tab
from bonsai.bim.module.bsdd.prop import BIMBSDDProperties, BSDDProperty
from bonsai.bim.module.pset.prop import IfcProperty
from bonsai.bim.module.model.prop import (
@@ -62,10 +62,9 @@ if TYPE_CHECKING:
from bonsai.bim.module.project.prop import BIMProjectProperties
TAB_NAMES = ["PROJECT", "OBJECT", "GEOMETRY", "DRAWINGS", "SERVICES", "STRUCTURE", "SCHEDULING", "FM", "QUALITY", "BOOKMARK"]
def get_tab_names():
return TAB_NAMES
enum_items = get_tab(None, None)
return [item[0] for item in enum_items if item is not None]
def get_panel_tab_name(panel_class):
if hasattr(panel_class, 'bim_tab_name'):
@@ -82,6 +81,23 @@ def should_show_panel(panel_id, panel_tab_name, context):
return False
def initialize_tab_visibilities():
"""Initialize tab visibility collection with all tabs set to visible by default."""
try:
bim_props = tool.Blender.get_bim_props()
except (AttributeError, AssertionError):
# Context not available during registration, skip initialization
return
if len(bim_props.tab_visibilities) > 0:
return
for tab_name in get_tab_names():
tab_vis = bim_props.tab_visibilities.add()
tab_vis.name = tab_name
tab_vis.is_visible = True
def initialize_panel_properties():
try:
bim_props = tool.Blender.get_bim_props()
@@ -161,14 +177,20 @@ def get_all_tab_panels(force_refresh=False):
def get_tab_visibility(tab_name):
bim_props = tool.Blender.get_bim_props()
prop_name = f"tab_visibility_{tab_name.lower()}"
return getattr(bim_props, prop_name, True)
tab_vis = bim_props.tab_visibilities.get(tab_name)
return tab_vis.is_visible if tab_vis else True
def set_tab_visibility(tab_name, visible):
bim_props = tool.Blender.get_bim_props()
prop_name = f"tab_visibility_{tab_name.lower()}"
setattr(bim_props, prop_name, visible)
tab_vis = bim_props.tab_visibilities.get(tab_name)
if tab_vis:
tab_vis.is_visible = visible
else:
# Create if doesn't exist
new_tab = bim_props.tab_visibilities.add()
new_tab.name = tab_name
new_tab.is_visible = visible
def get_panel_visibility(panel_id, current_tab=None):