From 9835ef977f5c946d794b8f036d898de30cfd58ac Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Mon, 28 Apr 2025 12:59:07 +0500 Subject: [PATCH] IFC Join - add poll check similar to object.join --- .../bonsai/bim/module/geometry/operator.py | 20 ++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/src/bonsai/bonsai/bim/module/geometry/operator.py b/src/bonsai/bonsai/bim/module/geometry/operator.py index 17789759fe..9c3f81dd89 100644 --- a/src/bonsai/bonsai/bim/module/geometry/operator.py +++ b/src/bonsai/bonsai/bim/module/geometry/operator.py @@ -1538,6 +1538,16 @@ class OverrideJoin(bpy.types.Operator, tool.Ifc.Operator): target: bpy.types.Object target_element: ifcopenshell.entity_instance + @classmethod + def poll(cls, context): + if not bpy.ops.object.join.poll(): + cls.poll_message_set("Active object is not EDITable.") + return False + if not context.selected_editable_objects: + cls.poll_message_set("No objects are selected.") + return False + return True + def invoke(self, context, event): if not tool.Ifc.get(): return bpy.ops.object.join() @@ -1547,10 +1557,14 @@ class OverrideJoin(bpy.types.Operator, tool.Ifc.Operator): if not tool.Ifc.get(): return bpy.ops.object.join() - if not context.active_object: - return - + assert context.active_object self.target = context.active_object + self.target_type = self.target.type + + if not any(obj.type == self.target_type and obj != self.target for obj in context.selected_editable_objects): + self.report({"ERROR"}, f"No additional objects of type '{self.target_type}' selected to join.") + return {"CANCELLED"} + if tool.Geometry.is_representation_item(self.target): return self.join_item() elif target_element := tool.Ifc.get_entity(self.target):