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_classification_references,
ui.BIM_PT_material_classifications, ui.BIM_PT_material_classifications,
ui.BIM_PT_cost_classifications, ui.BIM_PT_cost_classifications,
ui.BIM_PT_zone_classifications,
ui.BIM_UL_classifications, ui.BIM_UL_classifications,
) )
@@ -30,6 +30,7 @@ def refresh():
ObjectClassificationsData.is_loaded = False ObjectClassificationsData.is_loaded = False
MaterialClassificationsData.is_loaded = False MaterialClassificationsData.is_loaded = False
CostClassificationsData.is_loaded = False CostClassificationsData.is_loaded = False
ZoneClassificationsData.is_loaded = False
class ClassificationsData: class ClassificationsData:
@@ -80,7 +81,7 @@ class ClassificationsData:
class ReferencesData: class ReferencesData:
data: dict[str, Any] data: dict[str, Any]
is_loaded = False is_loaded = False
obj_type: Literal["Object", "Material", "Cost"] obj_type: Literal["Object", "Material", "Cost", "Zone"]
@classmethod @classmethod
def load(cls): def load(cls):
@@ -150,3 +151,14 @@ class CostClassificationsData(ReferencesData):
if cost_item := props.active_cost_item: if cost_item := props.active_cost_item:
return tool.Ifc.get().by_id(cost_item.ifc_definition_id) return tool.Ifc.get().by_id(cost_item.ifc_definition_id)
return None 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, ObjectClassificationsData,
MaterialClassificationsData, MaterialClassificationsData,
CostClassificationsData, CostClassificationsData,
ZoneClassificationsData,
) )
from typing import TYPE_CHECKING, Any, Union from typing import TYPE_CHECKING, Any, Union
@@ -118,6 +119,7 @@ class ReferenceUI:
ObjectClassificationsData, ObjectClassificationsData,
MaterialClassificationsData, MaterialClassificationsData,
CostClassificationsData, CostClassificationsData,
ZoneClassificationsData,
] ]
] ]
@@ -322,6 +324,23 @@ class BIM_PT_cost_classifications(Panel, ReferenceUI):
return bool(props.cost_items) 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): class BIM_UL_classifications(UIList):
def draw_item( def draw_item(
self, self,
@@ -116,8 +116,10 @@ class BIMSystemProperties(PropertyGroup):
def update_active_zone_index(self: "BIMZoneProperties", context: object) -> None: 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 from bonsai.bim.module.pset.data import ZonePsetsData
ZoneClassificationsData.is_loaded = False
ZonePsetsData.is_loaded = False ZonePsetsData.is_loaded = False