From 85229fc8655605c036d344bdf8e6f28e9010102e Mon Sep 17 00:00:00 2001 From: Dion Moult Date: Wed, 21 Aug 2024 22:22:40 +1000 Subject: [PATCH] Fix #5204. Bug where you could attempt to add IFC objects in edit mode which isn't allowed. --- src/bonsai/bonsai/bim/module/model/door.py | 4 ++++ src/bonsai/bonsai/bim/module/model/grid.py | 2 +- src/bonsai/bonsai/bim/module/model/railing.py | 4 ++++ src/bonsai/bonsai/bim/module/model/roof.py | 4 ++++ src/bonsai/bonsai/bim/module/model/stair.py | 4 ++++ src/bonsai/bonsai/bim/module/model/ui.py | 15 ++++++++------- src/bonsai/bonsai/bim/module/model/window.py | 4 ++++ 7 files changed, 29 insertions(+), 8 deletions(-) diff --git a/src/bonsai/bonsai/bim/module/model/door.py b/src/bonsai/bonsai/bim/module/model/door.py index 6a466a7bf7..4e9a826104 100644 --- a/src/bonsai/bonsai/bim/module/model/door.py +++ b/src/bonsai/bonsai/bim/module/model/door.py @@ -494,6 +494,10 @@ class BIM_OT_add_door(bpy.types.Operator, tool.Ifc.Operator): bl_label = "Door" bl_options = {"REGISTER", "UNDO"} + @classmethod + def poll(cls, context): + return tool.Ifc.get() and context.mode == "OBJECT" + def _execute(self, context): ifc_file = tool.Ifc.get() if not ifc_file: diff --git a/src/bonsai/bonsai/bim/module/model/grid.py b/src/bonsai/bonsai/bim/module/model/grid.py index d42fe30a6d..8f7123c8fd 100644 --- a/src/bonsai/bonsai/bim/module/model/grid.py +++ b/src/bonsai/bonsai/bim/module/model/grid.py @@ -82,7 +82,7 @@ class BIM_OT_add_object(Operator, tool.Ifc.Operator): @classmethod def poll(cls, context): - return tool.Ifc.get() + return tool.Ifc.get() and context.mode == "OBJECT" def _execute(self, context): add_object(self, context) diff --git a/src/bonsai/bonsai/bim/module/model/railing.py b/src/bonsai/bonsai/bim/module/model/railing.py index 0ad8b087f9..d3f4262e71 100644 --- a/src/bonsai/bonsai/bim/module/model/railing.py +++ b/src/bonsai/bonsai/bim/module/model/railing.py @@ -283,6 +283,10 @@ class BIM_OT_add_railing(bpy.types.Operator, tool.Ifc.Operator): bl_label = "Railing" bl_options = {"REGISTER", "UNDO"} + @classmethod + def poll(cls, context): + return tool.Ifc.get() and context.mode == "OBJECT" + def _execute(self, context): ifc_file = tool.Ifc.get() if not ifc_file: diff --git a/src/bonsai/bonsai/bim/module/model/roof.py b/src/bonsai/bonsai/bim/module/model/roof.py index 78661dd55d..05263c82d7 100644 --- a/src/bonsai/bonsai/bim/module/model/roof.py +++ b/src/bonsai/bonsai/bim/module/model/roof.py @@ -499,6 +499,10 @@ class BIM_OT_add_roof(bpy.types.Operator, tool.Ifc.Operator): bl_label = "Roof" bl_options = {"REGISTER", "UNDO"} + @classmethod + def poll(cls, context): + return tool.Ifc.get() and context.mode == "OBJECT" + def _execute(self, context): ifc_file = tool.Ifc.get() if not ifc_file: diff --git a/src/bonsai/bonsai/bim/module/model/stair.py b/src/bonsai/bonsai/bim/module/model/stair.py index e70d9f3b13..70a56be5a8 100644 --- a/src/bonsai/bonsai/bim/module/model/stair.py +++ b/src/bonsai/bonsai/bim/module/model/stair.py @@ -155,6 +155,10 @@ class BIM_OT_add_stair(bpy.types.Operator, tool.Ifc.Operator): bl_label = "Stair" bl_options = {"REGISTER", "UNDO"} + @classmethod + def poll(cls, context): + return tool.Ifc.get() and context.mode == "OBJECT" + def _execute(self, context): ifc_file = tool.Ifc.get() if not ifc_file: diff --git a/src/bonsai/bonsai/bim/module/model/ui.py b/src/bonsai/bonsai/bim/module/model/ui.py index 1183a6f005..3e18849af7 100644 --- a/src/bonsai/bonsai/bim/module/model/ui.py +++ b/src/bonsai/bonsai/bim/module/model/ui.py @@ -663,10 +663,11 @@ def add_menu(self, context): def add_mesh_object_menu(self, context): - self.layout.separator() - self.layout.operator("mesh.add_grid", icon_value=bonsai.bim.icons["IFC"].icon_id) - self.layout.operator("mesh.add_stair", icon_value=bonsai.bim.icons["IFC"].icon_id) - self.layout.operator("mesh.add_window", icon_value=bonsai.bim.icons["IFC"].icon_id) - self.layout.operator("mesh.add_door", icon_value=bonsai.bim.icons["IFC"].icon_id) - self.layout.operator("mesh.add_railing", icon_value=bonsai.bim.icons["IFC"].icon_id) - self.layout.operator("mesh.add_roof", icon_value=bonsai.bim.icons["IFC"].icon_id) + if context.mode == "OBJECT": + self.layout.separator() + self.layout.operator("mesh.add_grid", icon_value=bonsai.bim.icons["IFC"].icon_id) + self.layout.operator("mesh.add_stair", icon_value=bonsai.bim.icons["IFC"].icon_id, text="Stair (Untyped)") + self.layout.operator("mesh.add_window", icon_value=bonsai.bim.icons["IFC"].icon_id, text="Window (Untyped)") + self.layout.operator("mesh.add_door", icon_value=bonsai.bim.icons["IFC"].icon_id, text="Door (Untyped)") + self.layout.operator("mesh.add_railing", icon_value=bonsai.bim.icons["IFC"].icon_id, text="Railing (Untyped)") + self.layout.operator("mesh.add_roof", icon_value=bonsai.bim.icons["IFC"].icon_id, text="Roof (Untyped)") diff --git a/src/bonsai/bonsai/bim/module/model/window.py b/src/bonsai/bonsai/bim/module/model/window.py index bbf6fd19be..257a2e1349 100644 --- a/src/bonsai/bonsai/bim/module/model/window.py +++ b/src/bonsai/bonsai/bim/module/model/window.py @@ -387,6 +387,10 @@ class BIM_OT_add_window(bpy.types.Operator, tool.Ifc.Operator): bl_label = "Window" bl_options = {"REGISTER", "UNDO"} + @classmethod + def poll(cls, context): + return tool.Ifc.get() and context.mode == "OBJECT" + def _execute(self, context): ifc_file = tool.Ifc.get() if not ifc_file: