From 6f11f74aac6a89cc37f07b5ae685f88ddf183b4d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bruno=20Perdig=C3=A3o?= Date: Sat, 16 Nov 2024 12:59:40 -0300 Subject: [PATCH] Apply aggregate constraints instead of removing. --- src/bonsai/bonsai/bim/module/aggregate/operator.py | 2 +- src/bonsai/bonsai/tool/aggregate.py | 10 ++++++---- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/src/bonsai/bonsai/bim/module/aggregate/operator.py b/src/bonsai/bonsai/bim/module/aggregate/operator.py index b827a1028f..7a4c6ae3a7 100644 --- a/src/bonsai/bonsai/bim/module/aggregate/operator.py +++ b/src/bonsai/bonsai/bim/module/aggregate/operator.py @@ -96,7 +96,7 @@ class BIM_OT_aggregate_unassign_object(bpy.types.Operator, tool.Ifc.Operator): related_obj=tool.Ifc.get_object(element), ) - tool.Aggregate.remove_constraints(tool.Ifc.get_object(element)) + tool.Aggregate.apply_constraints(tool.Ifc.get_object(element)) # Removes Pset related to Linked Aggregates if not element.is_a("IfcElementAssembly"): diff --git a/src/bonsai/bonsai/tool/aggregate.py b/src/bonsai/bonsai/tool/aggregate.py index e0423439f7..8e767dac35 100644 --- a/src/bonsai/bonsai/tool/aggregate.py +++ b/src/bonsai/bonsai/tool/aggregate.py @@ -90,6 +90,9 @@ class Aggregate(bonsai.core.tool.Aggregate): parts = ifcopenshell.util.element.get_parts(agg_element) parts_objs = [tool.Ifc.get_object(p) for p in parts] for obj in parts_objs: + if not obj.data: + continue + tool.Geometry.lock_object(obj) constraint = next((c for c in obj.constraints if c.type == "CHILD_OF"), None) if constraint: obj.constraints.remove(constraint) @@ -97,9 +100,8 @@ class Aggregate(bonsai.core.tool.Aggregate): constraint.target = aggregate @classmethod - def remove_constraints(cls, part: bpy.types.Object): + def apply_constraints(cls, part: bpy.types.Object): constraint = next((c for c in part.constraints if c.type == "CHILD_OF"), None) if constraint: - part.constraints.remove(constraint) - - + bpy.ops.constraint.apply(constraint=constraint.name) + tool.Geometry.unlock_object(part)