From 7411da2ae87a02bda70f5b1f6897d6ad8236d7aa Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Wed, 4 Feb 2026 19:46:35 +0500 Subject: [PATCH] bim.search - fix error when unselectable objects get in the way #7635 --- src/bonsai/bonsai/bim/module/search/operator.py | 9 ++++----- src/bonsai/bonsai/tool/blender.py | 10 ++++++++-- 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/src/bonsai/bonsai/bim/module/search/operator.py b/src/bonsai/bonsai/bim/module/search/operator.py index f57a313502..83f401a122 100644 --- a/src/bonsai/bonsai/bim/module/search/operator.py +++ b/src/bonsai/bonsai/bim/module/search/operator.py @@ -788,11 +788,10 @@ class Search(Operator): ) objs = [obj for e in results if isinstance(obj := tool.Ifc.get_object(e), bpy.types.Object)] - for obj in objs: - tool.Blender.set_object_selection(obj) - if objs: - tool.Blender.set_active_object(objs[0]) - self.report({"INFO"}, f"{len(results)} Results.") + active_object = next(iter(objs), None) + selection = tool.Blender.validate_object_selection(context, active_object, objs) + tool.Blender.set_objects_selection(*selection, clear_previous_selection=False) + self.report({"INFO"}, f"{len(results)} Results, {len(selection.selected_objects)} Objects Selected") return {"FINISHED"} diff --git a/src/bonsai/bonsai/tool/blender.py b/src/bonsai/bonsai/tool/blender.py index b78772fbc5..80694917a5 100644 --- a/src/bonsai/bonsai/tool/blender.py +++ b/src/bonsai/bonsai/tool/blender.py @@ -36,6 +36,7 @@ from typing import ( TYPE_CHECKING, Any, Literal, + NamedTuple, Optional, TypeVar, Union, @@ -718,13 +719,18 @@ class Blender(bonsai.core.tool.Blender): if active_object: active_object.select_set(True) + class ObjectsSelectionArgs(NamedTuple): + context: bpy.types.Context + active_object: bpy.types.Object | None + selected_objects: list[bpy.types.Object] + @classmethod def validate_object_selection( cls, context: bpy.types.Context, active_object: Union[bpy.types.Object, None] = None, selected_objects: Sequence[bpy.types.Object] = (), - ) -> tuple[bpy.types.Context, Union[bpy.types.Object, None], list[bpy.types.Object]]: + ) -> ObjectsSelectionArgs: """Validate object selection and return only valid objects. Can be used before ``set_objects_selection`` to avoid errors @@ -739,7 +745,7 @@ class Blender(bonsai.core.tool.Blender): if active_object and not cls.is_valid_data_block(active_object): active_object = None - return context, active_object, new_selected_objects + return cls.ObjectsSelectionArgs(context, active_object, new_selected_objects) @classmethod def clear_objects_selection(cls) -> None: