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)