This commit is contained in:
Yusarina
2024-06-19 00:07:46 +01:00
parent 31f76931b9
commit 96d03075c0
+13 -10
View File
@@ -1,23 +1,25 @@
import bpy import bpy
from typing import List, Optional
from bpy.types import Operator, Context, Object
from ..core.register import register_wrap from ..core.register import register_wrap
from ..core.common import fix_uv_coordinates from ..core.common import fix_uv_coordinates
@register_wrap @register_wrap
class JoinAllMeshes(bpy.types.Operator): class JoinAllMeshes(Operator):
bl_idname = "avatar_toolkit.join_all_meshes" bl_idname = "avatar_toolkit.join_all_meshes"
bl_label = "Join All Meshes" bl_label = "Join All Meshes"
bl_description = "Join all meshes in the scene" bl_description = "Join all meshes in the scene"
bl_options = {'REGISTER', 'UNDO'} bl_options = {'REGISTER', 'UNDO'}
@classmethod @classmethod
def poll(cls, context): def poll(cls, context: Context) -> bool:
return context.mode == 'OBJECT' return context.mode == 'OBJECT'
def execute(self, context): def execute(self, context: Context) -> set:
self.join_all_meshes(context) self.join_all_meshes(context)
return {'FINISHED'} return {'FINISHED'}
def join_all_meshes(self, context): def join_all_meshes(self, context: Context) -> None:
if not bpy.data.objects: if not bpy.data.objects:
self.report({'INFO'}, "No objects in the scene") self.report({'INFO'}, "No objects in the scene")
return return
@@ -25,7 +27,7 @@ class JoinAllMeshes(bpy.types.Operator):
bpy.ops.object.mode_set(mode='OBJECT') bpy.ops.object.mode_set(mode='OBJECT')
bpy.ops.object.select_all(action='DESELECT') bpy.ops.object.select_all(action='DESELECT')
meshes = [obj for obj in bpy.data.objects if obj.type == 'MESH'] meshes: List[Object] = [obj for obj in bpy.data.objects if obj.type == 'MESH']
for mesh in meshes: for mesh in meshes:
mesh.select_set(True) mesh.select_set(True)
@@ -41,22 +43,22 @@ class JoinAllMeshes(bpy.types.Operator):
self.report({'WARNING'}, "No mesh objects selected") self.report({'WARNING'}, "No mesh objects selected")
@register_wrap @register_wrap
class JoinSelectedMeshes(bpy.types.Operator): class JoinSelectedMeshes(Operator):
bl_idname = "avatar_toolkit.join_selected_meshes" bl_idname = "avatar_toolkit.join_selected_meshes"
bl_label = "Join Selected Meshes" bl_label = "Join Selected Meshes"
bl_description = "Join selected meshes" bl_description = "Join selected meshes"
bl_options = {'REGISTER', 'UNDO'} bl_options = {'REGISTER', 'UNDO'}
@classmethod @classmethod
def poll(cls, context): def poll(cls, context: Context) -> bool:
return context.mode == 'OBJECT' return context.mode == 'OBJECT'
def execute(self, context): def execute(self, context: Context) -> set:
self.join_selected_meshes(context) self.join_selected_meshes(context)
return {'FINISHED'} return {'FINISHED'}
def join_selected_meshes(self, context): def join_selected_meshes(self, context: Context) -> None:
selected_objects = [obj for obj in bpy.context.selected_objects if obj.type == 'MESH'] selected_objects: List[Object] = [obj for obj in bpy.context.selected_objects if obj.type == 'MESH']
if not selected_objects: if not selected_objects:
self.report({'WARNING'}, "No mesh objects selected") self.report({'WARNING'}, "No mesh objects selected")
@@ -78,3 +80,4 @@ class JoinSelectedMeshes(bpy.types.Operator):
self.report({'INFO'}, "Selected meshes joined successfully") self.report({'INFO'}, "Selected meshes joined successfully")
else: else:
self.report({'WARNING'}, "No mesh objects selected") self.report({'WARNING'}, "No mesh objects selected")