Files
MetaFusion/scripts/ui/rigging.py
2025-05-02 00:14:28 +08:00

147 lines
5.6 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
Rigging UI Module for Plugin
绑定系统UI模块 - 负责显示骨骼绑定编辑界面和基础操作
基本功能:
- DNA浏览器
- 根据DNA导入骨骼
- 根据DNA生成身体
- DNA校准
- 骨骼位置校准
- 创建绑定
- 复制蒙皮
"""
#===================================== IMPORT MODULES =====================================
from Qt import QtWidgets, QtCore, QtGui
from Qt.QtCompat import wrapInstance
from maya import OpenMayaUI as omui
import sys
import os
#===================================== IMPORT FUNCTIONS ===================================
from scripts.utils import utils_rigging as utils_rigging
from scripts.ui import ui_utils
#========================================== WIDGETS ==========================================
# 全局变量存储UI控件
dna_browser_tree = None
joint_list = None
dna_info_panel = None
rig_buttons = {}
def widgets():
"""
创建绑定系统UI控件
"""
global dna_browser_tree, joint_list, dna_info_panel, rig_buttons
# DNA浏览器树形视图
dna_browser_tree = QtWidgets.QTreeWidget()
dna_browser_tree.setHeaderLabels(["DNA文件", "版本", "修改日期"])
dna_browser_tree.setMinimumHeight(200)
# 关节列表
joint_list = QtWidgets.QListWidget()
joint_list.setMinimumHeight(150)
# DNA信息面板
dna_info_panel = QtWidgets.QTextEdit()
dna_info_panel.setReadOnly(True)
dna_info_panel.setMinimumHeight(100)
# 功能按钮
rig_buttons["load_dna"] = QtWidgets.QPushButton("加载DNA")
rig_buttons["import_joints"] = QtWidgets.QPushButton("导入骨骼")
rig_buttons["generate_body"] = QtWidgets.QPushButton("生成身体")
rig_buttons["calibrate_dna"] = QtWidgets.QPushButton("DNA校准")
rig_buttons["calibrate_joints"] = QtWidgets.QPushButton("骨骼位置校准")
rig_buttons["create_binding"] = QtWidgets.QPushButton("创建绑定")
rig_buttons["copy_skinning"] = QtWidgets.QPushButton("复制蒙皮")
rig_buttons["save_dna"] = QtWidgets.QPushButton("保存DNA")
#========================================== LAYOUTS ==========================================
def layouts(parent_tab=None):
"""
创建绑定系统UI布局
Args:
parent_tab: 父容器控件由Main.py传入
"""
# 获取父容器在Main.py中创建的rigging_tab
if not parent_tab:
parent_tab = ui_utils.get_parent_widget("rigging_tab")
if not parent_tab:
print("无法获取父容器,布局创建失败")
return
# 创建主布局
main_layout = parent_tab.layout()
if not main_layout:
print("父容器没有布局,布局创建失败")
return
# 创建分割控件
splitter = QtWidgets.QSplitter(QtCore.Qt.Vertical)
# 上部区域 - DNA浏览器
dna_browser_group = QtWidgets.QGroupBox("DNA浏览器")
dna_browser_layout = QtWidgets.QVBoxLayout(dna_browser_group)
dna_browser_layout.addWidget(dna_browser_tree)
# 中部区域 - 关节列表
joint_list_group = QtWidgets.QGroupBox("骨骼列表")
joint_list_layout = QtWidgets.QVBoxLayout(joint_list_group)
joint_list_layout.addWidget(joint_list)
# 下部区域 - DNA信息
dna_info_group = QtWidgets.QGroupBox("DNA信息")
dna_info_layout = QtWidgets.QVBoxLayout(dna_info_group)
dna_info_layout.addWidget(dna_info_panel)
# 添加到分割控件
splitter.addWidget(dna_browser_group)
splitter.addWidget(joint_list_group)
splitter.addWidget(dna_info_group)
# 按钮区域
button_layout = QtWidgets.QGridLayout()
button_layout.addWidget(rig_buttons["load_dna"], 0, 0)
button_layout.addWidget(rig_buttons["import_joints"], 0, 1)
button_layout.addWidget(rig_buttons["generate_body"], 1, 0)
button_layout.addWidget(rig_buttons["calibrate_dna"], 1, 1)
button_layout.addWidget(rig_buttons["calibrate_joints"], 2, 0)
button_layout.addWidget(rig_buttons["create_binding"], 2, 1)
button_layout.addWidget(rig_buttons["copy_skinning"], 3, 0)
button_layout.addWidget(rig_buttons["save_dna"], 3, 1)
# 添加到主布局
main_layout.addWidget(splitter)
main_layout.addLayout(button_layout)
#========================================== CONNECTIONS ==========================================
def connections():
"""
连接绑定系统UI信号和槽
"""
# 连接按钮点击事件到占位函数
rig_buttons["load_dna"].clicked.connect(lambda: print("加载DNA功能待实现"))
rig_buttons["import_joints"].clicked.connect(lambda: print("导入骨骼功能待实现"))
rig_buttons["generate_body"].clicked.connect(lambda: print("生成身体功能待实现"))
rig_buttons["calibrate_dna"].clicked.connect(lambda: print("DNA校准功能待实现"))
rig_buttons["calibrate_joints"].clicked.connect(lambda: print("骨骼位置校准功能待实现"))
rig_buttons["create_binding"].clicked.connect(lambda: print("创建绑定功能待实现"))
rig_buttons["copy_skinning"].clicked.connect(lambda: print("复制蒙皮功能待实现"))
rig_buttons["save_dna"].clicked.connect(lambda: print("保存DNA功能待实现"))
# 连接树形视图选择事件
dna_browser_tree.itemSelectionChanged.connect(lambda: print("DNA文件选择已更改"))
# 连接关节列表选择事件
joint_list.itemSelectionChanged.connect(lambda: print("骨骼选择已更改"))
#===================================== PLACEHOLDER FUNCTION ===================================
def rigging_temp_function():
return utils_rigging.rigging_temp_utils_function()