Merge branch 'main' into RemoveDoubles

This commit is contained in:
Yusarina
2024-07-22 22:21:49 +01:00
committed by GitHub
21 changed files with 414 additions and 576 deletions
-4
View File
@@ -13,7 +13,3 @@ else:
for module_name in [ basename(f)[:-3] for f in modules if isfile(f) and not f.endswith('__init__.py')]:
print("reloading " +module_name)
exec("importlib.reload("+module_name+")")
+7 -5
View File
@@ -1,10 +1,11 @@
import bpy
from ..core.register import register_wrap
from .panel import AvatarToolkitPanel
from ..functions.translations import t
@register_wrap
class AvatarToolkitOptimizationPanel(bpy.types.Panel):
bl_label = "Optimization"
bl_label = t("Optimization.label")
bl_idname = "OBJECT_PT_avatar_toolkit_optimization"
bl_space_type = 'VIEW_3D'
bl_region_type = 'UI'
@@ -13,18 +14,19 @@ class AvatarToolkitOptimizationPanel(bpy.types.Panel):
def draw(self, context):
layout = self.layout
layout.label(text="Optimization Options")
layout.label(text=t("Optimization.options.label"))
row = layout.row()
row.scale_y = 1.2
row.operator("avatar_toolkit.combine_materials", text="Combine Materials")
row.operator("avatar_toolkit.combine_materials", text=t("Optimization.combine_materials.label"))
layout.separator(factor=0.5)
row = layout.row(align=True)
row.scale_y = 1.2
row.operator("avatar_toolkit.join_all_meshes", text="Join All Meshes")
row.operator("avatar_toolkit.join_selected_meshes", text="Join Selected Meshes")
row.operator("avatar_toolkit.join_all_meshes", text=t("Optimization.join_all_meshes.label"))
row.operator("avatar_toolkit.join_selected_meshes", text=t("Optimization.join_selected_meshes.label"))
row.operator("avatar_toolkit.remove_doubles_safely", text="Remove Doubles Safely")
# Add optimization options here
+1
View File
@@ -1,5 +1,6 @@
import bpy
from ..core.register import register_wrap
from ..functions.translations import t
@register_wrap
class AvatarToolkitPanel(bpy.types.Panel):
+52 -14
View File
@@ -2,13 +2,15 @@ import bpy
from ..core.register import register_wrap
from .panel import AvatarToolkitPanel
from bpy.types import Context
from ..functions.translations import t
from ..core.import_pmx import import_pmx
from ..core.import_pmd import import_pmd
from ..core.importer import import_fbx
@register_wrap
class AvatarToolkitQuickAccessPanel(bpy.types.Panel):
bl_label = "Quick Access"
bl_label = t("Quick_Access.label")
bl_idname = "OBJECT_PT_avatar_toolkit_quick_access"
bl_space_type = 'VIEW_3D'
bl_region_type = 'UI'
@@ -17,22 +19,23 @@ class AvatarToolkitQuickAccessPanel(bpy.types.Panel):
def draw(self, context: Context):
layout = self.layout
layout.label(text="Quick Access Options")
layout.label(text=t("Quick_Access.options"))
row = layout.row()
row.label(text="Import/Export", icon='IMPORT')
row.label(text=t("Quick_Access.import_export.label"), icon='IMPORT')
layout.separator(factor=0.5)
row = layout.row(align=True)
row.scale_y = 1.5
row.operator("avatar_toolkit.import_menu", text="Import")
row.operator("avatar_toolkit.export_menu", text="Export")
row.operator("avatar_toolkit.import_menu", text=t("Quick_Access.import"))
row.operator("avatar_toolkit.export_menu", text=t("Quick_Access.export"))
@register_wrap
class AVATAR_TOOLKIT_OT_import_menu(bpy.types.Operator):
bl_idname = "avatar_toolkit.import_menu"
bl_label = "Import Menu"
bl_label = t("Quick_Access.import_menu.label")
bl_description = t("Quick_Access.import_menu.desc")
def execute(self, context: Context):
return {'FINISHED'}
@@ -44,13 +47,19 @@ class AVATAR_TOOLKIT_OT_import_menu(bpy.types.Operator):
def draw(self, context: Context):
layout = self.layout
layout.label(text="Select Import Method")
layout.operator("avatar_toolkit.import_pmx", text="Import PMX")
layout.operator("avatar_toolkit.import_pmd", text="Import PMD")
layout.operator("avatar_toolkit.import_pmx", text=t("Quick_Access.import_pmx"))
layout.operator("avatar_toolkit.import_pmd", text=t("Quick_Access.import_pmd"))
layout.operator("avatar_toolkit.import_fbx", text="Import FBX")
@register_wrap
class AVATAR_TOOLKIT_OT_export_menu(bpy.types.Operator):
bl_idname = "avatar_toolkit.export_menu"
bl_label = "Export Menu"
bl_label = t("Quick_Access.export_menu.label")
bl_description = t("Quick_Access.import_pmx.desc")
@classmethod
def poll(cls, context):
return any(obj.type == 'MESH' for obj in context.scene.objects)
def execute(self, context: Context):
return {'FINISHED'}
@@ -61,13 +70,14 @@ class AVATAR_TOOLKIT_OT_export_menu(bpy.types.Operator):
def draw(self, context: Context):
layout = self.layout
layout.label(text="Select Export Method")
layout.operator("avatar_toolkit.export_resonite", text="Export Resonite")
layout.label(text=t("Quick_Access.select_export.label"))
layout.operator("avatar_toolkit.export_resonite", text=t("Quick_Access.select_export_resonite.label"))
layout.operator("avatar_toolkit.export_fbx", text="Export FBX")
@register_wrap
class AVATAR_TOOLKIT_OT_import_pmx(bpy.types.Operator):
bl_idname = "avatar_toolkit.import_pmx"
bl_label = "Import PMX"
bl_label = t("Quick_Access.import_pmx")
filepath: bpy.props.StringProperty(subtype="FILE_PATH")
@@ -82,7 +92,7 @@ class AVATAR_TOOLKIT_OT_import_pmx(bpy.types.Operator):
@register_wrap
class AVATAR_TOOLKIT_OT_import_pmd(bpy.types.Operator):
bl_idname = "avatar_toolkit.import_pmd"
bl_label = "Import PMD"
bl_label = t("Quick_Access.import_pmd")
filepath: bpy.props.StringProperty(subtype="FILE_PATH")
@@ -93,3 +103,31 @@ class AVATAR_TOOLKIT_OT_import_pmd(bpy.types.Operator):
def invoke(self, context: Context, event):
context.window_manager.fileselect_add(self)
return {'RUNNING_MODAL'}
@register_wrap
class AVATAR_TOOLKIT_OT_import_fbx(bpy.types.Operator):
bl_idname = "avatar_toolkit.import_fbx"
bl_label = "Import FBX"
filepath: bpy.props.StringProperty(subtype="FILE_PATH")
def execute(self, context):
import_fbx(self.filepath)
return {'FINISHED'}
def invoke(self, context, event):
context.window_manager.fileselect_add(self)
return {'RUNNING_MODAL'}
@register_wrap
class AVATAR_TOOLKIT_OT_export_fbx(bpy.types.Operator):
bl_idname = 'avatar_toolkit.export_fbx'
bl_label = "Export FBX"
bl_description = "Export the model as FBX"
bl_options = {'REGISTER', 'UNDO', 'INTERNAL'}
def execute(self, context):
bpy.ops.export_scene.fbx('INVOKE_DEFAULT')
return {'FINISHED'}
+39
View File
@@ -0,0 +1,39 @@
import bpy
from ..core.register import register_wrap
from .panel import AvatarToolkitPanel
from ..functions.translations import t
@register_wrap
class AvatarToolkitSettingsPanel(bpy.types.Panel):
bl_label = t("Settings.label")
bl_idname = "OBJECT_PT_avatar_toolkit_settings"
bl_space_type = 'VIEW_3D'
bl_region_type = 'UI'
bl_category = "Avatar Toolkit"
bl_parent_id = "OBJECT_PT_avatar_toolkit"
def draw(self, context):
layout = self.layout
layout.prop(context.scene, "avatar_toolkit_language", text=t("Settings.language.label"))
@register_wrap
class AVATAR_TOOLKIT_OT_translation_restart_popup(bpy.types.Operator):
bl_idname = "avatar_toolkit.translation_restart_popup"
bl_label = t("Settings.translation_restart_popup.label")
bl_description = t("Settings.translation_restart_popup.description")
bl_options = {'INTERNAL'}
def execute(self, context):
if context.scene.avatar_toolkit_language_changed:
# Reload the addon after the popup is closed
bpy.ops.script.reload()
context.scene.avatar_toolkit_language_changed = False
return {'FINISHED'}
def invoke(self, context, event):
return context.window_manager.invoke_props_dialog(self, width=300)
def draw(self, context):
layout = self.layout
layout.label(text=t("Settings.translation_restart_popup.message1"))
layout.label(text=t("Settings.translation_restart_popup.message2"))
+4 -3
View File
@@ -2,6 +2,7 @@ import bpy
from ..core.register import register_wrap
from .panel import AvatarToolkitPanel
from bpy.types import Context
from ..functions.translations import t
@register_wrap
class AvatarToolkitToolsPanel(bpy.types.Panel):
@@ -14,11 +15,11 @@ class AvatarToolkitToolsPanel(bpy.types.Panel):
def draw(self, context: Context):
layout = self.layout
layout.label(text="Tools")
layout.label(text=t("Tools.tools_title.label"))
layout.separator(factor=0.5)
row = layout.row(align=True)
row.scale_y = 1.5
row.operator("avatar_toolkit.convert_to_resonite", text="Translate to Resonite")
row.operator("avatar_toolkit.convert_to_resonite", text=t("Tools.convert_to_resonite.label"))
row = layout.row(align=True)
row.operator("avatar_toolkit.remove_doubles_safely", text="Remove Doubles Safely")
row.operator("avatar_toolkit.remove_doubles_safely", text="Remove Doubles Safely")