From c45e3b00994bd1843ed11d59d078d82e371ec9cb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bruno=20Perdig=C3=A3o?= Date: Wed, 16 Apr 2025 20:46:39 -0300 Subject: [PATCH] See #6537. Fix how `OverrideMove` works when dealing with multiple levels of aggregates. --- src/bonsai/bonsai/bim/module/geometry/operator.py | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/bonsai/bonsai/bim/module/geometry/operator.py b/src/bonsai/bonsai/bim/module/geometry/operator.py index 6ce4b0ad11..58a89b52cf 100644 --- a/src/bonsai/bonsai/bim/module/geometry/operator.py +++ b/src/bonsai/bonsai/bim/module/geometry/operator.py @@ -3299,9 +3299,17 @@ class OverrideMove(bpy.types.Operator): if parts: aggregates_to_move.append(tool.Ifc.get_object(element)) aggregates_to_move.extend(list(tool.Aggregate.get_parts_recursively(element))) - continue - aggregate = ifcopenshell.util.element.get_aggregate(element) + + # Controls the aggregate level it should consider to move + aggregates = tool.Aggregate.get_aggregates_recursively(element) + aggregate = aggregates[-1] + if props.in_aggregate_mode: + current_aggregate_index = aggregates.index(tool.Ifc.get_entity(props.editing_aggregate)) + aggregate = aggregates[current_aggregate_index - 1] + if tool.Ifc.get_entity(props.editing_aggregate) == aggregates[0]: + aggregate = aggregates[0] + if not parts and props.in_aggregate_mode and aggregate == tool.Ifc.get_entity(props.editing_aggregate): continue if aggregate: