Prevent aggregate objects to be edited by TAB when not in aggregate mode.

This commit is contained in:
Bruno Perdigão
2024-11-25 17:45:24 -03:00
committed by Bruno Perdigão
parent cbdbd5bd83
commit 3c590f097a
@@ -1876,6 +1876,10 @@ class OverrideModeSetEdit(bpy.types.Operator, tool.Ifc.Operator):
def _execute(self, context):
selected_objs = context.selected_objects # Purposely exclude active object
if self.has_aggregates(selected_objs):
self.report({"INFO"}, "One or more selected objects belong to an aggregate. Please enter Aggregate Mode to edit them.")
return {"FINISHED"}
if len(selected_objs) == 1 and context.active_object == selected_objs[0]:
self.handle_single_object(context, context.active_object)
elif len(selected_objs) == 0:
@@ -1978,6 +1982,18 @@ class OverrideModeSetEdit(bpy.types.Operator, tool.Ifc.Operator):
context.scene.BIMGeometryProperties.mode = "EDIT"
context.scene.BIMGeometryProperties.is_changing_mode = False
def has_aggregates(self, objs):
for obj in objs:
element = tool.Ifc.get_entity(obj)
if not element:
continue
aggregate = ifcopenshell.util.element.get_aggregate(element)
parts = ifcopenshell.util.element.get_parts(element)
if (aggregate or parts) and not bpy.context.scene.BIMAggregateProperties.in_aggregate_mode:
return True
else:
return False
class OverrideModeSetObject(bpy.types.Operator, tool.Ifc.Operator):
bl_description = "Switch from Edit to Item or Object mode"
@@ -2871,6 +2887,7 @@ class OverrideMoveAggregateMacro(bpy.types.Macro):
bl_label = "IFC Move Aggregate"
bl_options = {"REGISTER", "UNDO"}
class OverrideMoveAggregate(bpy.types.Operator):
bl_idname = "bim.override_move_aggregate"
bl_label = "IFC Move Aggregate"