From 845402ea9cdd8fb0b04ff1fc8d17c4f7ef5231ff Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Thu, 12 Sep 2024 18:15:15 +0500 Subject: [PATCH] Replace grids/space elements visibility two toggles with one See - https://i.imgur.com/5GssIDp.png (same for grids) --- src/bonsai/bonsai/bim/module/spatial/prop.py | 34 ++++++++++++++++++-- src/bonsai/bonsai/bim/module/spatial/ui.py | 18 ++++++----- 2 files changed, 42 insertions(+), 10 deletions(-) diff --git a/src/bonsai/bonsai/bim/module/spatial/prop.py b/src/bonsai/bonsai/bim/module/spatial/prop.py index 10b5ec1111..6959f24992 100644 --- a/src/bonsai/bonsai/bim/module/spatial/prop.py +++ b/src/bonsai/bonsai/bim/module/spatial/prop.py @@ -127,6 +127,14 @@ def update_spatial_is_locked(self, context): tool.Geometry.unlock_object(obj) +def update_spatial_is_visible(self: "BIMSpatialDecompositionProperties", context: bpy.types.Context) -> None: + bpy.ops.bim.toggle_spatial_elements(is_visible=self.is_visible) + + +def update_grid_is_visible(self: "BIMGridProperties", context: bpy.types.Context) -> None: + bpy.ops.bim.toggle_grids(is_visible=self.is_visible) + + def poll_container_obj(self, obj): return obj is None or tool.Ifc.get_entity(obj) @@ -174,7 +182,18 @@ class Element(PropertyGroup): class BIMSpatialDecompositionProperties(PropertyGroup): - is_locked: BoolProperty(name="Is Locked", default=True, update=update_spatial_is_locked) + is_locked: BoolProperty( + name="Is Locked", + description="Prevent all spatial elements from being edited, removed, duplicated", + default=True, + update=update_spatial_is_locked, + ) + is_visible: BoolProperty( + name="Is Visible", + description="Show or hide spatial elements, such as buildings, sites, etc", + default=True, + update=update_spatial_is_visible, + ) container_filter: StringProperty(name="Container Filter", default="", options={"TEXTEDIT_UPDATE"}) containers: CollectionProperty(name="Containers", type=BIMContainer) contracted_containers: StringProperty(name="Contracted containers", default="[]") @@ -211,5 +230,16 @@ class BIMSpatialDecompositionProperties(PropertyGroup): class BIMGridProperties(PropertyGroup): - is_locked: BoolProperty(name="Is Locked", default=True, update=update_grid_is_locked) + is_locked: BoolProperty( + name="Is Locked", + description="Prevent all grids and grid axes from being edited, removed, duplicated", + default=True, + update=update_grid_is_locked, + ) + is_visible: BoolProperty( + name="Is Visible", + description="Show or hide grids and grid axes", + default=True, + update=update_grid_is_visible, + ) grid_axes: CollectionProperty(name="Grid Axes", type=ObjProperty) diff --git a/src/bonsai/bonsai/bim/module/spatial/ui.py b/src/bonsai/bonsai/bim/module/spatial/ui.py index 39e810ed8d..a1d25b8c6f 100644 --- a/src/bonsai/bonsai/bim/module/spatial/ui.py +++ b/src/bonsai/bonsai/bim/module/spatial/ui.py @@ -103,12 +103,13 @@ class BIM_PT_spatial_decomposition(Panel): return tool.Ifc.get() def draw_header(self, context): + props = context.scene.BIMSpatialDecompositionProperties row = self.layout.row(align=True) row.label(text="") # empty text occupies the left of the row - row.operator("bim.toggle_spatial_elements", text="", icon="HIDE_OFF").is_visible = True - row.operator("bim.toggle_spatial_elements", text="", icon="HIDE_ON").is_visible = False - icon = "VIEW_LOCKED" if context.scene.BIMSpatialDecompositionProperties.is_locked else "VIEW_UNLOCKED" - row.prop(context.scene.BIMSpatialDecompositionProperties, "is_locked", text="", icon=icon) + icon = "HIDE_OFF" if props.is_visible else "HIDE_ON" + row.prop(props, "is_visible", text="", icon=icon) + icon = "VIEW_LOCKED" if props.is_locked else "VIEW_UNLOCKED" + row.prop(props, "is_locked", text="", icon=icon) def draw(self, context): if not SpatialDecompositionData.is_loaded: @@ -218,12 +219,13 @@ class BIM_PT_grids(Panel): self.layout.row().operator("mesh.add_grid", icon="ADD", text="Add Grids") def draw_header(self, context): + props = context.scene.BIMGridProperties row = self.layout.row(align=True) row.label(text="") # empty text occupies the left of the row - row.operator("bim.toggle_grids", text="", icon="HIDE_OFF").is_visible = True - row.operator("bim.toggle_grids", text="", icon="HIDE_ON").is_visible = False - icon = "VIEW_LOCKED" if context.scene.BIMGridProperties.is_locked else "VIEW_UNLOCKED" - row.prop(context.scene.BIMGridProperties, "is_locked", text="", icon=icon) + icon = "HIDE_OFF" if props.is_visible else "HIDE_ON" + row.prop(props, "is_visible", text="", icon=icon) + icon = "VIEW_LOCKED" if props.is_locked else "VIEW_UNLOCKED" + row.prop(props, "is_locked", text="", icon=icon) class BIM_UL_containers_manager(UIList):