131 lines
6.9 KiB
Python
131 lines
6.9 KiB
Python
#!/usr/bin/env python
|
|
# -*- coding: utf-8 -*-
|
|
|
|
#===================================== 1. Module Imports =====================================
|
|
import os
|
|
from scripts.config import data
|
|
from scripts.utils import menu_utils
|
|
|
|
try:
|
|
from PySide2 import QtCore, QtGui, QtWidgets
|
|
from shiboken2 import wrapInstance
|
|
print("从PySide2加载Qt和shiboken2")
|
|
except ImportError:
|
|
try:
|
|
from PySide6 import QtCore, QtGui, QtWidgets
|
|
from shiboken6 import wrapInstance
|
|
print("从PySide6加载Qt和shiboken6")
|
|
except ImportError:
|
|
try:
|
|
from PySide import QtCore, QtGui, QtWidgets
|
|
from shiboken import wrapInstance
|
|
print("从PySide加载Qt和shiboken")
|
|
except ImportError as e:
|
|
print(f"Qt加载失败: {str(e)}")
|
|
QtCore = QtGui = QtWidgets = None
|
|
wrapInstance = None
|
|
|
|
#===================================== 2. Menu Manager Class =====================================
|
|
class MenuManager:
|
|
"""菜单管理器"""
|
|
def __init__(self, parent):
|
|
self.parent = parent
|
|
self.menu_bar = parent.menuBar()
|
|
self.create_menus()
|
|
self.create_toolbar()
|
|
|
|
def create_menus(self):
|
|
"""创建菜单"""
|
|
# 文件菜单
|
|
file_menu = self.menu_bar.addMenu("文件")
|
|
self.add_menu_item(file_menu, "打开DNA", "open.png", menu_utils.load_dna)
|
|
self.add_menu_item(file_menu, "保存DNA", "save.png", menu_utils.save_dna)
|
|
self.add_menu_item(file_menu, "加载当前项目的DNA", "open.png", menu_utils.load_project_dna)
|
|
file_menu.addSeparator()
|
|
self.add_menu_item(file_menu, "修改混合目标名称", "rename.png", menu_utils.rename_blend_target)
|
|
self.add_menu_item(file_menu, "重置混合目标名称", "resetname.png", menu_utils.reset_blend_target)
|
|
file_menu.addSeparator()
|
|
self.add_menu_item(file_menu, "导出FBX", "export.png", menu_utils.export_fbx)
|
|
file_menu.addSeparator()
|
|
self.add_menu_item(file_menu, "退出", "exit.png", menu_utils.safe_shutdown)
|
|
|
|
# 编辑菜单
|
|
edit_menu = self.menu_bar.addMenu("编辑")
|
|
self.add_menu_item(edit_menu, "创建RL4节点", "connect.png", menu_utils.create_rl4_node)
|
|
self.add_menu_item(edit_menu, "删除RL4节点", "disconnect.png", menu_utils.delete_rl4_node)
|
|
edit_menu.addSeparator()
|
|
self.add_menu_item(edit_menu, "镜像左至右", "mirrorL.png", menu_utils.mirror_left_to_right)
|
|
self.add_menu_item(edit_menu, "镜像右至左", "mirrorR.png", menu_utils.mirror_right_to_left)
|
|
edit_menu.addSeparator()
|
|
self.add_menu_item(edit_menu, "姿势由A型转T型", "pose_A_To_T.png", menu_utils.pose_a_to_t)
|
|
self.add_menu_item(edit_menu, "姿势由T型转A型", "pose_T_To_A.png", menu_utils.pose_t_to_a)
|
|
edit_menu.addSeparator()
|
|
self.add_menu_item(edit_menu, "传输LOD贴图", "locator.png", menu_utils.transfer_lod_texture)
|
|
self.add_menu_item(edit_menu, "设置关节颜色", "color.png", menu_utils.set_joint_color)
|
|
edit_menu.addSeparator()
|
|
self.add_menu_item(edit_menu, "取消全部标记", "unmark_all.png", menu_utils.unmark_all)
|
|
self.add_menu_item(edit_menu, "重建所有目标", "rebuildTargets.png", menu_utils.rebuild_all_targets)
|
|
edit_menu.addSeparator()
|
|
self.add_menu_item(edit_menu, "为所有表情设置关键帧", "bakeAnimation.png", menu_utils.bake_all_animations)
|
|
self.add_menu_item(edit_menu, "烘焙所有表情的关键帧", "centerCurrentTime.png", menu_utils.bake_all_keyframes)
|
|
|
|
# 工具菜单
|
|
tools_menu = self.menu_bar.addMenu("工具")
|
|
self.add_menu_item(tools_menu, "导出蒙皮", "export_skin.png", menu_utils.export_skin)
|
|
self.add_menu_item(tools_menu, "导入蒙皮", "import_skin.png", menu_utils.import_skin)
|
|
self.add_menu_item(tools_menu, "拷贝蒙皮", "copy_skin.png", menu_utils.copy_skin)
|
|
tools_menu.addSeparator()
|
|
self.add_menu_item(tools_menu, "RBF变形器", "blendShape.png", menu_utils.create_rbf_deformer)
|
|
self.add_menu_item(tools_menu, "快速绑定服装", "clothing_weight.png", menu_utils.quick_bind_clothing)
|
|
self.add_menu_item(tools_menu, "克隆混合变形", "blendShape.png", menu_utils.clone_blendshape)
|
|
tools_menu.addSeparator()
|
|
self.add_menu_item(tools_menu, "UV传递点序", "repair_vertex_order.png", menu_utils.transfer_uv_order)
|
|
self.add_menu_item(tools_menu, "面部生成控制器", "controller.png", menu_utils.create_face_controller)
|
|
self.add_menu_item(tools_menu, "提取52BS", "ARKit52.png", menu_utils.extract_52bs)
|
|
tools_menu.addSeparator()
|
|
self.add_menu_item(tools_menu, "关节轴向修复", "joint.png", menu_utils.fix_joint_orientation)
|
|
self.add_menu_item(tools_menu, "生成身体控制器", "create_body_ctrl.png", menu_utils.create_body_controller)
|
|
tools_menu.addSeparator()
|
|
self.add_menu_item(tools_menu, "导入面部动画", "import_face_anim.png", menu_utils.import_face_animation)
|
|
self.add_menu_item(tools_menu, "导入身体动画", "import_body_anim.png", menu_utils.import_body_animation)
|
|
|
|
# 语言菜单
|
|
lang_menu = self.menu_bar.addMenu("语言")
|
|
self.add_menu_item(lang_menu, "中文", "chinese.png", menu_utils.set_chinese)
|
|
self.add_menu_item(lang_menu, "English", "english.png", menu_utils.set_english)
|
|
|
|
# 帮助菜单
|
|
help_menu = self.menu_bar.addMenu("帮助")
|
|
self.add_menu_item(help_menu, "帮助文档", "help.png", menu_utils.show_help)
|
|
self.add_menu_item(help_menu, "关于", "warning.png", menu_utils.show_about)
|
|
|
|
def create_toolbar(self):
|
|
"""创建工具栏"""
|
|
toolbar = self.parent.addToolBar("主工具栏")
|
|
toolbar.setMovable(False)
|
|
|
|
# 添加工具栏按钮
|
|
self.add_toolbar_item(toolbar, "保存DNA", "save.png", menu_utils.save_dna)
|
|
self.add_toolbar_item(toolbar, "加载当前项目DNA", "open.png", menu_utils.load_project_dna)
|
|
|
|
def add_menu_item(self, menu, text, icon, callback):
|
|
"""添加菜单项"""
|
|
action = QtWidgets.QAction(text, self.parent)
|
|
if icon:
|
|
icon_path = os.path.join(data.ICONS_PATH, icon)
|
|
if os.path.exists(icon_path):
|
|
action.setIcon(QtGui.QIcon(icon_path))
|
|
action.triggered.connect(callback)
|
|
menu.addAction(action)
|
|
return action
|
|
|
|
def add_toolbar_item(self, toolbar, text, icon, callback):
|
|
"""添加工具栏项"""
|
|
action = QtWidgets.QAction(text, self.parent)
|
|
if icon:
|
|
icon_path = os.path.join(data.ICONS_PATH, icon)
|
|
if os.path.exists(icon_path):
|
|
action.setIcon(QtGui.QIcon(icon_path))
|
|
action.triggered.connect(callback)
|
|
toolbar.addAction(action)
|
|
return action |