#!/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()