Base
This commit is contained in:
147
scripts/ui/rigging.py
Normal file
147
scripts/ui/rigging.py
Normal file
@@ -0,0 +1,147 @@
|
||||
#!/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()
|
Reference in New Issue
Block a user