This commit is contained in:
2025-05-08 23:57:22 +08:00
parent 24acc2a6f1
commit 7094a5886a
18 changed files with 442 additions and 583 deletions

View File

@@ -14,8 +14,8 @@ Rigging UI Module for Plugin
- 复制蒙皮
"""
#========================================= IMPORT =========================================
from Qt import QtWidgets, QtCore, QtGui
from Qt.QtCompat import wrapInstance
from scripts.ui.Qt import QtWidgets, QtCore, QtGui
from scripts.ui.Qt.QtCompat import wrapInstance
from maya import OpenMayaUI as omui
import maya.cmds as cmds
import maya.mel as mel
@@ -54,8 +54,7 @@ TOOL_WIDTH = config.TOOL_WIDTH
TOOL_HEIGHT = config.TOOL_HEIGHT
#========================================= LOCATION =======================================
from scripts.ui import localization
LANG = localization.LANG
get_text = localization.get_text
TEXT = localization.TEXT
class RiggingUI(ui_utils.BaseUI):
"""
@@ -63,21 +62,13 @@ class RiggingUI(ui_utils.BaseUI):
继承自BaseUI类实现绑定系统相关的UI功能
"""
#========================================== INIT ========================================
def __init__(self):
def __init__(self, parent=None):
"""
初始化绑定系统UI
创建主控件和布局,并连接信号和槽
"""
super(RiggingUI, self).__init__()
# 初始化字典
self.controls = {}
self.layouts = {}
self.buttons = {}
self.splitters = {}
self.inputs = {}
self.labels = {}
super().__init__(parent)
# 创建主控件
self.main_widget = QtWidgets.QWidget()
self.main_widget.setObjectName("riggingMainWidget")
@@ -86,6 +77,9 @@ class RiggingUI(ui_utils.BaseUI):
self.create_widgets()
self.create_layouts()
self.create_connections()
# 更新UI文本
self.update_language()
#========================================= WIDGET =======================================
def create_widgets(self):
@@ -94,7 +88,7 @@ class RiggingUI(ui_utils.BaseUI):
包括按钮、标签、列表等
"""
# 标题标签 - 使用HTML格式化标题
title_text = f"<h4 style='margin:0;padding:5px;'>{get_text('rigging_title', '骨骼绑定')}</h4>"
title_text = f"<h4 style='margin:0;padding:5px;'>{TEXT('rigging_title', '骨骼绑定')}</h4>"
self.controls["title_label"] = QtWidgets.QLabel(title_text)
self.controls["title_label"].setObjectName("riggingTitleLabel")
self.controls["title_label"].setAlignment(QtCore.Qt.AlignCenter)
@@ -109,7 +103,7 @@ class RiggingUI(ui_utils.BaseUI):
self.controls["presets_panel"].setObjectName("presetsPanel")
# Presets 组
self.controls["presets_group"] = QtWidgets.QGroupBox(get_text("presets", "Presets"))
self.controls["presets_group"] = QtWidgets.QGroupBox(TEXT("presets", "Presets"))
self.controls["presets_group"].setObjectName("presetsGroup")
# 创建预设显示区域
@@ -190,12 +184,12 @@ class RiggingUI(ui_utils.BaseUI):
self.controls["presets_slider"].setValue(50)
# 导出预设按钮
self.buttons["export_presets"] = QtWidgets.QPushButton(get_text("export_presets", "导出预设"))
self.buttons["export_presets"] = QtWidgets.QPushButton(TEXT("export_presets", "导出预设"))
self.buttons["export_presets"].setObjectName("exportPresetsButton")
self.buttons["export_presets"].setIcon(ui_utils.load_icon("export"))
# 导入预设按钮
self.buttons["import_presets"] = QtWidgets.QPushButton(get_text("import_presets", "导入预设"))
self.buttons["import_presets"] = QtWidgets.QPushButton(TEXT("import_presets", "导入预设"))
self.buttons["import_presets"].setObjectName("importPresetsButton")
self.buttons["import_presets"].setIcon(ui_utils.load_icon("import"))
@@ -210,11 +204,11 @@ class RiggingUI(ui_utils.BaseUI):
self.controls["assets_panel"].setObjectName("assetsPanel")
# Assets 组
self.controls["assets_group"] = QtWidgets.QGroupBox(get_text("assets", "Assets"))
self.controls["assets_group"] = QtWidgets.QGroupBox(TEXT("assets", "资产"))
self.controls["assets_group"].setObjectName("assetsGroup")
# 项目路径标签和输入框
self.controls["project_path_label"] = QtWidgets.QLabel(get_text("project_path", "项目路径:"))
self.controls["project_path_label"] = QtWidgets.QLabel(TEXT("project_path", "项目路径:"))
self.controls["project_path_label"].setObjectName("projectPathLabel")
self.controls["project_path_input"] = QtWidgets.QLineEdit()
@@ -229,7 +223,7 @@ class RiggingUI(ui_utils.BaseUI):
self.buttons["browse_path"].setFixedWidth(100)
# Presets DNA 标签和输入框
self.controls["presets_dna_label"] = QtWidgets.QLabel(get_text("Presets DNA:", "预设 DNA:"))
self.controls["presets_dna_label"] = QtWidgets.QLabel(TEXT("Presets DNA:", "预设 DNA:"))
self.controls["presets_dna_label"].setObjectName("presetsDnaLabel")
self.controls["presets_dna_input"] = QtWidgets.QLineEdit()
@@ -247,18 +241,18 @@ class RiggingUI(ui_utils.BaseUI):
self.controls["descriptor_panel"].setObjectName("descriptorPanel")
# Descriptor 组
self.controls["descriptor_group"] = QtWidgets.QGroupBox(get_text("descriptor", "Descriptor"))
self.controls["descriptor_group"] = QtWidgets.QGroupBox(TEXT("descriptor", "描述"))
self.controls["descriptor_group"].setObjectName("descriptorGroup")
# 名称标签和输入框
self.controls["name_label"] = QtWidgets.QLabel(get_text("name", "名称:"))
self.controls["name_label"] = QtWidgets.QLabel(TEXT("name", "名称:"))
self.controls["name_label"].setObjectName("nameLabel")
self.controls["name_input"] = QtWidgets.QLineEdit()
self.controls["name_input"].setObjectName("nameInput")
# 原型标签和下拉框
self.controls["archetype_label"] = QtWidgets.QLabel(get_text("archetype", "原型:"))
self.controls["archetype_label"] = QtWidgets.QLabel(TEXT("archetype", "原型:"))
self.controls["archetype_label"].setObjectName("archetypeLabel")
self.controls["archetype_combo"] = QtWidgets.QComboBox()
@@ -268,7 +262,7 @@ class RiggingUI(ui_utils.BaseUI):
self.controls["archetype_combo"].addItem("african")
# 性别标签和下拉框
self.controls["gender_label"] = QtWidgets.QLabel(get_text("gender", "性别:"))
self.controls["gender_label"] = QtWidgets.QLabel(TEXT("gender", "性别:"))
self.controls["gender_label"].setObjectName("genderLabel")
self.controls["gender_combo"] = QtWidgets.QComboBox()
@@ -277,7 +271,7 @@ class RiggingUI(ui_utils.BaseUI):
self.controls["gender_combo"].addItem("male")
# 年龄标签和输入框
self.controls["age_label"] = QtWidgets.QLabel(get_text("age", "年龄:"))
self.controls["age_label"] = QtWidgets.QLabel(TEXT("age", "年龄:"))
self.controls["age_label"].setObjectName("ageLabel")
self.controls["age_spinner"] = QtWidgets.QSpinBox()
@@ -287,7 +281,7 @@ class RiggingUI(ui_utils.BaseUI):
self.controls["age_spinner"].setValue(24)
# 平移单位标签和下拉框
self.controls["translation_unit_label"] = QtWidgets.QLabel(get_text("translation_unit", "平移单位:"))
self.controls["translation_unit_label"] = QtWidgets.QLabel(TEXT("translation_unit", "平移单位:"))
self.controls["translation_unit_label"].setObjectName("translationUnitLabel")
self.controls["translation_unit_combo"] = QtWidgets.QComboBox()
@@ -297,7 +291,7 @@ class RiggingUI(ui_utils.BaseUI):
self.controls["translation_unit_combo"].addItem("m")
# 旋转单位标签和下拉框
self.controls["rotation_unit_label"] = QtWidgets.QLabel(get_text("rotation_unit", "旋转单位:"))
self.controls["rotation_unit_label"] = QtWidgets.QLabel(TEXT("rotation_unit", "旋转单位:"))
self.controls["rotation_unit_label"].setObjectName("rotationUnitLabel")
self.controls["rotation_unit_combo"] = QtWidgets.QComboBox()
@@ -306,7 +300,7 @@ class RiggingUI(ui_utils.BaseUI):
self.controls["rotation_unit_combo"].addItem("radians")
# 坐标系统标签和下拉框
self.controls["coordinate_system_label"] = QtWidgets.QLabel(get_text("coordinate_system", "坐标系统:"))
self.controls["coordinate_system_label"] = QtWidgets.QLabel(TEXT("coordinate_system", "坐标系统:"))
self.controls["coordinate_system_label"].setObjectName("coordinateSystemLabel")
self.controls["coordinate_system_combo"] = QtWidgets.QComboBox()
@@ -315,7 +309,7 @@ class RiggingUI(ui_utils.BaseUI):
self.controls["coordinate_system_combo"].addItem("ZAxisUp")
# LOD数量标签和输入框
self.controls["lod_count_label"] = QtWidgets.QLabel(get_text("lod_count", "LOD数量:"))
self.controls["lod_count_label"] = QtWidgets.QLabel(TEXT("lod_count", "LOD数量:"))
self.controls["lod_count_label"].setObjectName("lodCountLabel")
self.controls["lod_count_spinner"] = QtWidgets.QSpinBox()
@@ -329,17 +323,17 @@ class RiggingUI(ui_utils.BaseUI):
self.controls["bottom_buttons_panel"].setObjectName("bottomButtonsPanel")
# 删除所有按钮
self.buttons["remove_all"] = QtWidgets.QPushButton(get_text("remove_all", "删除所有"))
self.buttons["remove_all"] = QtWidgets.QPushButton(TEXT("remove_all", "删除全部"))
self.buttons["remove_all"].setObjectName("removeAllButton")
self.buttons["remove_all"].setIcon(ui_utils.load_icon("delete.png"))
# 导入骨骼按钮
self.buttons["import_skeleton"] = QtWidgets.QPushButton(get_text("import_skeleton", "导入骨骼"))
self.buttons["import_skeleton"] = QtWidgets.QPushButton(TEXT("import_skeleton", "导入骨骼"))
self.buttons["import_skeleton"].setObjectName("importSkeletonButton")
self.buttons["import_skeleton"].setIcon(ui_utils.load_icon("HIKCharacterToolSkeleton.png"))
# 生成绑定按钮
self.buttons["build_rigging"] = QtWidgets.QPushButton(get_text("build_rigging", "生成绑定"))
self.buttons["build_rigging"] = QtWidgets.QPushButton(TEXT("build_rigging", "创建绑定"))
self.buttons["build_rigging"].setObjectName("buildRiggingButton")
self.buttons["build_rigging"].setIcon(ui_utils.load_icon("HIKcreateControlRig.png"))