From 55962692bb5b3ab021a7f084deb6368a1464fabb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bruno=20Perdig=C3=A3o?= Date: Mon, 16 Oct 2023 15:31:56 -0300 Subject: [PATCH] Fix #2187. ifc_duplicate_operator now recreates the IfcElementAssembly structure into a new Assembly --- .../bim/module/geometry/operator.py | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/src/blenderbim/blenderbim/bim/module/geometry/operator.py b/src/blenderbim/blenderbim/bim/module/geometry/operator.py index 5231852bce..cc80e85997 100644 --- a/src/blenderbim/blenderbim/bim/module/geometry/operator.py +++ b/src/blenderbim/blenderbim/bim/module/geometry/operator.py @@ -819,6 +819,11 @@ class OverrideDuplicateMove(bpy.types.Operator): if new.is_a("IfcRelSpaceBoundary"): tool.Boundary.decorate_boundary(new_obj) + # Recreate assembly relationship + for old in old_to_new.keys(): + if old.is_a("IfcElementAssembly"): + OverrideDuplicateMove.recreate_assembly(old_to_new) + # Recreate decompositions tool.Root.recreate_decompositions(relationships, old_to_new) blenderbim.bim.handler.refresh_ui_data() @@ -860,6 +865,22 @@ class OverrideDuplicateMove(bpy.types.Operator): return arrays_to_create, array_children + @staticmethod + def recreate_assembly(old_to_new): + for old_element, new_element in old_to_new.items(): + print(old_element, new_element) + old_parent = ifcopenshell.util.element.get_aggregate(old_element) + if old_parent: + new_parent = old_to_new[old_parent] + print(new_parent) + 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]), + ) + class OverrideDuplicateMoveLinkedMacro(bpy.types.Macro): bl_idname = "bim.override_object_duplicate_move_linked_macro"