From 308d628b1ee3dd337f6cf200e8089db31df3c520 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Mon, 28 Apr 2025 16:22:29 +0500 Subject: [PATCH] IFC Join - prevent joining rep items into non items Because it was removing representation item object leaving Bonsai in confusing state, which may lead to errors later --- src/bonsai/bonsai/bim/module/geometry/operator.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/bonsai/bonsai/bim/module/geometry/operator.py b/src/bonsai/bonsai/bim/module/geometry/operator.py index 812891b668..d668f4b097 100644 --- a/src/bonsai/bonsai/bim/module/geometry/operator.py +++ b/src/bonsai/bonsai/bim/module/geometry/operator.py @@ -1536,6 +1536,7 @@ class OverrideJoin(bpy.types.Operator, tool.Ifc.Operator): blender_op.description + ".\nAlso makes sure changes are in sync with IFC." + "\nIf IFC object is joined into non-IFC object, it will be removed from IFC." + + "\nJoining representation items only supported for joining with other representation items of the same representation." ) bl_options = {"REGISTER", "UNDO"} @@ -1627,6 +1628,8 @@ class OverrideJoin(bpy.types.Operator, tool.Ifc.Operator): element = tool.Ifc.get_entity(obj) if element: ifcopenshell.api.root.remove_product(ifc_file, product=element) + elif tool.Geometry.is_representation_item(obj): + obj.select_set(False) bpy.ops.object.join() bpy.ops.bim.update_representation(obj=self.target.name, ifc_representation_class="") else: @@ -1656,6 +1659,7 @@ class OverrideJoin(bpy.types.Operator, tool.Ifc.Operator): element = tool.Ifc.get_entity(obj) # Non IFC elements cannot be joined since we cannot guarantee SweptSolid compliance + # This check also is also needed to skip representation items. if not element: obj.select_set(False) continue @@ -1772,6 +1776,8 @@ class OverrideJoin(bpy.types.Operator, tool.Ifc.Operator): element = tool.Ifc.get_entity(obj) if element: ifcopenshell.api.root.remove_product(ifc_file, product=element) + elif tool.Geometry.is_representation_item(obj): + obj.select_set(False) bpy.ops.object.join()