Zones UI - add classification UI #6941

This commit is contained in:
Andrej730
2025-07-31 15:16:06 +05:00
parent 4ff0fd56e9
commit ff75875045
4 changed files with 35 additions and 1 deletions
@@ -48,6 +48,7 @@ classes = (
ui.BIM_PT_classification_references,
ui.BIM_PT_material_classifications,
ui.BIM_PT_cost_classifications,
ui.BIM_PT_zone_classifications,
ui.BIM_UL_classifications,
)
@@ -30,6 +30,7 @@ def refresh():
ObjectClassificationsData.is_loaded = False
MaterialClassificationsData.is_loaded = False
CostClassificationsData.is_loaded = False
ZoneClassificationsData.is_loaded = False
class ClassificationsData:
@@ -80,7 +81,7 @@ class ClassificationsData:
class ReferencesData:
data: dict[str, Any]
is_loaded = False
obj_type: Literal["Object", "Material", "Cost"]
obj_type: Literal["Object", "Material", "Cost", "Zone"]
@classmethod
def load(cls):
@@ -150,3 +151,14 @@ class CostClassificationsData(ReferencesData):
if cost_item := props.active_cost_item:
return tool.Ifc.get().by_id(cost_item.ifc_definition_id)
return None
class ZoneClassificationsData(ReferencesData):
obj_type = "Zone"
@classmethod
def get_element(cls) -> Union[ifcopenshell.entity_instance, None]:
props = tool.System.get_zone_props()
if active_zone := props.active_zone:
return tool.Ifc.get().by_id(active_zone.ifc_definition_id)
return None
@@ -27,6 +27,7 @@ from bonsai.bim.module.classification.data import (
ObjectClassificationsData,
MaterialClassificationsData,
CostClassificationsData,
ZoneClassificationsData,
)
from typing import TYPE_CHECKING, Any, Union
@@ -118,6 +119,7 @@ class ReferenceUI:
ObjectClassificationsData,
MaterialClassificationsData,
CostClassificationsData,
ZoneClassificationsData,
]
]
@@ -322,6 +324,23 @@ class BIM_PT_cost_classifications(Panel, ReferenceUI):
return bool(props.cost_items)
class BIM_PT_zone_classifications(Panel, ReferenceUI):
bl_label = "Zone Classifications"
bl_idname = "BIM_PT_zone_classifications"
bl_options = {"DEFAULT_CLOSED"}
bl_space_type = "PROPERTIES"
bl_region_type = "WINDOW"
bl_context = "scene"
bl_parent_id = "BIM_PT_zones"
data = ZoneClassificationsData
@classmethod
def poll(cls, context):
props = tool.System.get_zone_props()
return bool(props.active_zone)
class BIM_UL_classifications(UIList):
def draw_item(
self,
@@ -116,8 +116,10 @@ class BIMSystemProperties(PropertyGroup):
def update_active_zone_index(self: "BIMZoneProperties", context: object) -> None:
from bonsai.bim.module.classification.data import ZoneClassificationsData
from bonsai.bim.module.pset.data import ZonePsetsData
ZoneClassificationsData.is_loaded = False
ZonePsetsData.is_loaded = False