From c3323733a70affec5e82ff40f414b199862e62a2 Mon Sep 17 00:00:00 2001 From: Gorgious Date: Sun, 23 Jul 2023 13:39:52 +0200 Subject: [PATCH] Array children are now transforme-locked after editing the array I have yet to find how to set it on ifc load though --- src/blenderbim/blenderbim/bim/module/model/array.py | 1 + src/blenderbim/blenderbim/tool/blender.py | 8 ++++++++ 2 files changed, 9 insertions(+) diff --git a/src/blenderbim/blenderbim/bim/module/model/array.py b/src/blenderbim/blenderbim/bim/module/model/array.py index 991f34563a..263752e29a 100644 --- a/src/blenderbim/blenderbim/bim/module/model/array.py +++ b/src/blenderbim/blenderbim/bim/module/model/array.py @@ -135,6 +135,7 @@ class EditArray(bpy.types.Operator, tool.Ifc.Operator): data = json.dumps(data) ifcopenshell.api.run("pset.edit_pset", tool.Ifc.get(), pset=pset, properties={"Data": data}) + tool.Blender.Modifier.Array.lock_children_transform(element, True) 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 c571a9020a..e75fac4dfd 100644 --- a/src/blenderbim/blenderbim/tool/blender.py +++ b/src/blenderbim/blenderbim/tool/blender.py @@ -532,6 +532,14 @@ class Blender: ) or child.constraints.new("CHILD_OF") constraint.target = parent_obj + @classmethod + def lock_children_transform(cls, parent_element, lock_state=True): + for child_obj in cls.get_all_children_objects(parent_element): + for prop in ("lock_location", "lock_rotation", "lock_scale"): + attr = getattr(child_obj, prop) + for axis_idx in range(3): + attr[axis_idx] = lock_state + @classmethod def get_all_objects(cls, parent_element): parent_obj = tool.Ifc.get_object(parent_element)