From ef72cd32505b7ecae1efbe93d84669a6961cd4fc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bruno=20Perdig=C3=A3o?= Date: Mon, 23 Oct 2023 15:46:14 -0300 Subject: [PATCH] recreates assembly for array children objects --- .../bim/module/geometry/operator.py | 25 ++++++++++++++----- 1 file changed, 19 insertions(+), 6 deletions(-) diff --git a/src/blenderbim/blenderbim/bim/module/geometry/operator.py b/src/blenderbim/blenderbim/bim/module/geometry/operator.py index 1388111994..67e3aa1512 100644 --- a/src/blenderbim/blenderbim/bim/module/geometry/operator.py +++ b/src/blenderbim/blenderbim/bim/module/geometry/operator.py @@ -858,17 +858,30 @@ class OverrideDuplicateMove(bpy.types.Operator): @staticmethod def recreate_assembly(old_to_new): - for old_element, new_element in old_to_new.items(): - old_parent = ifcopenshell.util.element.get_aggregate(old_element) - if old_parent: - new_parent = old_to_new[old_parent] + for old, new in old_to_new.items(): + old_aggregate = ifcopenshell.util.element.get_aggregate(old) + if old_aggregate: + new_aggregate = old_to_new[old_aggregate] blenderbim.core.aggregate.assign_object( tool.Ifc, tool.Aggregate, tool.Collector, - relating_obj=tool.Ifc.get_object(new_parent[0]), - related_obj=tool.Ifc.get_object(new_element[0]), + relating_obj=tool.Ifc.get_object(new_aggregate[0]), + related_obj=tool.Ifc.get_object(new[0]), ) + + # Make sure that the array children also get reassigned to the correct aggregate + pset = ifcopenshell.util.element.get_pset(new[0], "BBIM_Array") + if pset: + array_children = tool.Blender.Modifier.Array.get_all_children_objects(new[0]) + for obj in array_children: + blenderbim.core.aggregate.assign_object( + tool.Ifc, + tool.Aggregate, + tool.Collector, + relating_obj=tool.Ifc.get_object(new_aggregate[0]), + related_obj=tool.Ifc.get_object(tool.Ifc.get_entity(obj)), + ) def remove_old_connections(old_to_new): for new in old_to_new.values():