From 147f0bfc9a4a7340b64eb39d72521aa959023b12 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Mon, 28 Oct 2024 17:23:47 +0500 Subject: [PATCH] Sync parts positions before applying the opening To avoid issues like this - https://imgchest.com/p/bp45zlzen45 --- src/bonsai/bonsai/bim/module/void/operator.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/bonsai/bonsai/bim/module/void/operator.py b/src/bonsai/bonsai/bim/module/void/operator.py index 498448562a..882b3a7a15 100644 --- a/src/bonsai/bonsai/bim/module/void/operator.py +++ b/src/bonsai/bonsai/bim/module/void/operator.py @@ -85,6 +85,7 @@ class AddOpening(bpy.types.Operator, tool.Ifc.Operator): self.report({"INFO"}, f"An {element1.is_a()} is not allowed to have an opening.") continue + # Sync placement before void.add_opening. if tool.Ifc.is_moved(obj1): bonsai.core.geometry.edit_object_placement(tool.Ifc, tool.Geometry, tool.Surveyor, obj=obj1) @@ -111,6 +112,7 @@ class AddOpening(bpy.types.Operator, tool.Ifc.Operator): bonsai.core.geometry.edit_object_placement(tool.Ifc, tool.Geometry, tool.Surveyor, obj=obj2) voided_objs = [obj1] + # TODO: should we use get_parts instead? for subelement in ifcopenshell.util.element.get_decomposition(element1): subobj = tool.Ifc.get_object(subelement) if subobj: @@ -118,6 +120,10 @@ class AddOpening(bpy.types.Operator, tool.Ifc.Operator): for voided_obj in voided_objs: if voided_obj.data: + if tool.Ifc.is_moved(voided_obj): + bonsai.core.geometry.edit_object_placement( + tool.Ifc, tool.Geometry, tool.Surveyor, obj=voided_obj + ) representation = tool.Ifc.get().by_id(voided_obj.data.BIMMeshProperties.ifc_definition_id) bonsai.core.geometry.switch_representation( tool.Ifc,