From 1468b7fdddc4d81e564d56cfaa35a96d47536763 Mon Sep 17 00:00:00 2001 From: Gorgious Date: Sun, 23 Jul 2023 13:38:37 +0200 Subject: [PATCH] Array children now follow their parent with a "child-of" constraint #3492 --- src/blenderbim/blenderbim/bim/module/model/array.py | 2 ++ src/blenderbim/blenderbim/tool/blender.py | 10 ++++++++++ 2 files changed, 12 insertions(+) diff --git a/src/blenderbim/blenderbim/bim/module/model/array.py b/src/blenderbim/blenderbim/bim/module/model/array.py index f075188c17..991f34563a 100644 --- a/src/blenderbim/blenderbim/bim/module/model/array.py +++ b/src/blenderbim/blenderbim/bim/module/model/array.py @@ -134,6 +134,8 @@ class EditArray(bpy.types.Operator, tool.Ifc.Operator): pset = tool.Ifc.get().by_id(pset["id"]) data = json.dumps(data) ifcopenshell.api.run("pset.edit_pset", tool.Ifc.get(), pset=pset, properties={"Data": data}) + + tool.Blender.Modifier.Array.constrain_children_to_parent(element) return {"FINISHED"} diff --git a/src/blenderbim/blenderbim/tool/blender.py b/src/blenderbim/blenderbim/tool/blender.py index 669c8e6ab5..c571a9020a 100644 --- a/src/blenderbim/blenderbim/tool/blender.py +++ b/src/blenderbim/blenderbim/tool/blender.py @@ -522,6 +522,16 @@ class Blender: return cls.is_stair(element) or cls.is_door(element) or cls.is_window(element) class Array: + @classmethod + def constrain_children_to_parent(cls, parent_element): + parent_obj = tool.Ifc.get_object(parent_element) + children = cls.get_all_children_objects(parent_element) + for child in children: + constraint = next( + (c for c in child.constraints if c.type == "CHILD_OF"), None + ) or child.constraints.new("CHILD_OF") + constraint.target = parent_obj + @classmethod def get_all_objects(cls, parent_element): parent_obj = tool.Ifc.get_object(parent_element)