diff --git a/src/bonsai/bonsai/bim/module/classification/__init__.py b/src/bonsai/bonsai/bim/module/classification/__init__.py index ff29167c68..6d33b50ee6 100644 --- a/src/bonsai/bonsai/bim/module/classification/__init__.py +++ b/src/bonsai/bonsai/bim/module/classification/__init__.py @@ -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, ) diff --git a/src/bonsai/bonsai/bim/module/classification/data.py b/src/bonsai/bonsai/bim/module/classification/data.py index 3ed42cf3ea..42b398e7a4 100644 --- a/src/bonsai/bonsai/bim/module/classification/data.py +++ b/src/bonsai/bonsai/bim/module/classification/data.py @@ -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 diff --git a/src/bonsai/bonsai/bim/module/classification/ui.py b/src/bonsai/bonsai/bim/module/classification/ui.py index ddf5d5f2e1..5c4b3576b7 100644 --- a/src/bonsai/bonsai/bim/module/classification/ui.py +++ b/src/bonsai/bonsai/bim/module/classification/ui.py @@ -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, diff --git a/src/bonsai/bonsai/bim/module/system/prop.py b/src/bonsai/bonsai/bim/module/system/prop.py index 6ae14e4132..45ce791fd4 100644 --- a/src/bonsai/bonsai/bim/module/system/prop.py +++ b/src/bonsai/bonsai/bim/module/system/prop.py @@ -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