From 1d90665c3a400e05ba8ab855e3d897860894c31e Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Mon, 21 Oct 2024 11:52:23 +0500 Subject: [PATCH] split_by_loose_parts to preserve the objects selection Noticed that bim.assign_class started to loose the objects selection after 29d6d2b --- src/bonsai/bonsai/tool/blender.py | 7 +++++++ src/bonsai/bonsai/tool/geometry.py | 5 +++++ 2 files changed, 12 insertions(+) diff --git a/src/bonsai/bonsai/tool/blender.py b/src/bonsai/bonsai/tool/blender.py index 26222e2dc9..43760e5ce8 100644 --- a/src/bonsai/bonsai/tool/blender.py +++ b/src/bonsai/bonsai/tool/blender.py @@ -538,6 +538,13 @@ class Blender(bonsai.core.tool.Blender): else: cls.clear_active_object() + @classmethod + def get_objects_selection( + cls, context: bpy.types.Context + ) -> tuple[bpy.types.Context, Union[bpy.types.Object, None], list[bpy.types.Object]]: + """Get objects selection to later pass to `set_objects_selection`.""" + return context, context.view_layer.objects.active, context.selected_objects + @classmethod def set_objects_selection( cls, diff --git a/src/bonsai/bonsai/tool/geometry.py b/src/bonsai/bonsai/tool/geometry.py index 873d4089b7..1598da9215 100644 --- a/src/bonsai/bonsai/tool/geometry.py +++ b/src/bonsai/bonsai/tool/geometry.py @@ -1591,6 +1591,9 @@ class Geometry(bonsai.core.tool.Geometry): @classmethod def split_by_loose_parts(cls, obj: bpy.types.Object) -> List[bpy.types.Mesh]: + # Before .copy() since it also copies the selection. + selection = tool.Blender.get_objects_selection(bpy.context) + dup_obj = obj.copy() dup_obj.data = obj.data.copy() bpy.context.scene.collection.objects.link(dup_obj) @@ -1607,6 +1610,8 @@ class Geometry(bonsai.core.tool.Geometry): results.append(obj.data) bpy.data.objects.remove(obj) + # Preserve original selection. + tool.Blender.set_objects_selection(*selection) return results @classmethod