Base
This commit is contained in:
197
scripts/ui/definition.py
Normal file
197
scripts/ui/definition.py
Normal file
@@ -0,0 +1,197 @@
|
||||
#!/usr/bin/env python
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
"""
|
||||
Definition UI Module for Plugin
|
||||
定义系统UI模块 - 负责显示DNA定义编辑界面和基础操作
|
||||
基本功能:
|
||||
- LOD, Meshes, Joints, Blendshape, AnimatedMap 加载和刷新
|
||||
- 写入: 写入关节默认位置,写入几何体,写入蒙皮,写入混合变形目标
|
||||
- 创建:创建混合变形,绑定蒙皮,取消蒙皮
|
||||
- 工具:重新定位头部关节,重新定位身体关节,重新定位全身关节,快速创建预设
|
||||
"""
|
||||
|
||||
#===================================== 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_definition as utils_definition
|
||||
from scripts.ui import ui_utils
|
||||
|
||||
#========================================== WIDGETS ==========================================
|
||||
# 全局变量存储UI控件
|
||||
definition_tabs = None
|
||||
dna_elements = {}
|
||||
definition_buttons = {}
|
||||
|
||||
def widgets():
|
||||
"""
|
||||
创建定义系统UI控件
|
||||
"""
|
||||
global definition_tabs, dna_elements, definition_buttons
|
||||
|
||||
# 创建子标签页
|
||||
definition_tabs = QtWidgets.QTabWidget()
|
||||
|
||||
# 创建各类元素列表
|
||||
dna_elements["lod_list"] = QtWidgets.QListWidget()
|
||||
dna_elements["mesh_list"] = QtWidgets.QListWidget()
|
||||
dna_elements["joint_list"] = QtWidgets.QListWidget()
|
||||
dna_elements["blendshape_list"] = QtWidgets.QListWidget()
|
||||
dna_elements["animmap_list"] = QtWidgets.QListWidget()
|
||||
|
||||
# 创建元素信息面板
|
||||
dna_elements["element_info"] = QtWidgets.QTextEdit()
|
||||
dna_elements["element_info"].setReadOnly(True)
|
||||
|
||||
# 功能按钮
|
||||
definition_buttons["write_joint_defaults"] = QtWidgets.QPushButton("写入关节默认位置")
|
||||
definition_buttons["write_geometry"] = QtWidgets.QPushButton("写入几何体")
|
||||
definition_buttons["write_skinning"] = QtWidgets.QPushButton("写入蒙皮")
|
||||
definition_buttons["write_blendshapes"] = QtWidgets.QPushButton("写入混合变形目标")
|
||||
definition_buttons["create_blendshapes"] = QtWidgets.QPushButton("创建混合变形")
|
||||
definition_buttons["bind_skin"] = QtWidgets.QPushButton("绑定蒙皮")
|
||||
definition_buttons["unbind_skin"] = QtWidgets.QPushButton("取消蒙皮")
|
||||
definition_buttons["reposition_head"] = QtWidgets.QPushButton("重新定位头部关节")
|
||||
definition_buttons["reposition_body"] = QtWidgets.QPushButton("重新定位身体关节")
|
||||
definition_buttons["reposition_all"] = QtWidgets.QPushButton("重新定位全身关节")
|
||||
definition_buttons["quick_preset"] = QtWidgets.QPushButton("快速创建预设")
|
||||
|
||||
#========================================== LAYOUTS ==========================================
|
||||
def layouts(parent_tab=None):
|
||||
"""
|
||||
创建定义系统UI布局
|
||||
|
||||
Args:
|
||||
parent_tab: 父容器控件,由Main.py传入
|
||||
"""
|
||||
# 获取父容器(在Main.py中创建的definition_tab)
|
||||
if not parent_tab:
|
||||
parent_tab = ui_utils.get_parent_widget("definition_tab")
|
||||
if not parent_tab:
|
||||
print("无法获取父容器,布局创建失败")
|
||||
return
|
||||
|
||||
# 创建主布局
|
||||
main_layout = parent_tab.layout()
|
||||
if not main_layout:
|
||||
print("父容器没有布局,布局创建失败")
|
||||
return
|
||||
|
||||
# 创建元素标签页
|
||||
elements_tab = QtWidgets.QWidget()
|
||||
elements_layout = QtWidgets.QVBoxLayout(elements_tab)
|
||||
|
||||
# 创建分割控件
|
||||
elements_splitter = QtWidgets.QSplitter(QtCore.Qt.Vertical)
|
||||
|
||||
# 创建元素列表标签页
|
||||
lists_tabs = QtWidgets.QTabWidget()
|
||||
|
||||
# 创建各类元素列表标签页
|
||||
lod_tab = QtWidgets.QWidget()
|
||||
lod_layout = QtWidgets.QVBoxLayout(lod_tab)
|
||||
lod_layout.addWidget(dna_elements["lod_list"])
|
||||
lists_tabs.addTab(lod_tab, "LOD")
|
||||
|
||||
mesh_tab = QtWidgets.QWidget()
|
||||
mesh_layout = QtWidgets.QVBoxLayout(mesh_tab)
|
||||
mesh_layout.addWidget(dna_elements["mesh_list"])
|
||||
lists_tabs.addTab(mesh_tab, "Meshes")
|
||||
|
||||
joint_tab = QtWidgets.QWidget()
|
||||
joint_layout = QtWidgets.QVBoxLayout(joint_tab)
|
||||
joint_layout.addWidget(dna_elements["joint_list"])
|
||||
lists_tabs.addTab(joint_tab, "Joints")
|
||||
|
||||
blendshape_tab = QtWidgets.QWidget()
|
||||
blendshape_layout = QtWidgets.QVBoxLayout(blendshape_tab)
|
||||
blendshape_layout.addWidget(dna_elements["blendshape_list"])
|
||||
lists_tabs.addTab(blendshape_tab, "Blendshapes")
|
||||
|
||||
animmap_tab = QtWidgets.QWidget()
|
||||
animmap_layout = QtWidgets.QVBoxLayout(animmap_tab)
|
||||
animmap_layout.addWidget(dna_elements["animmap_list"])
|
||||
lists_tabs.addTab(animmap_tab, "AnimatedMaps")
|
||||
|
||||
# 信息面板
|
||||
info_group = QtWidgets.QGroupBox("元素信息")
|
||||
info_layout = QtWidgets.QVBoxLayout(info_group)
|
||||
info_layout.addWidget(dna_elements["element_info"])
|
||||
|
||||
# 添加到分割控件
|
||||
elements_splitter.addWidget(lists_tabs)
|
||||
elements_splitter.addWidget(info_group)
|
||||
elements_layout.addWidget(elements_splitter)
|
||||
|
||||
# 创建工具标签页
|
||||
tools_tab = QtWidgets.QWidget()
|
||||
tools_layout = QtWidgets.QVBoxLayout(tools_tab)
|
||||
|
||||
# 创建工具分组
|
||||
write_group = QtWidgets.QGroupBox("写入")
|
||||
write_layout = QtWidgets.QVBoxLayout(write_group)
|
||||
write_layout.addWidget(definition_buttons["write_joint_defaults"])
|
||||
write_layout.addWidget(definition_buttons["write_geometry"])
|
||||
write_layout.addWidget(definition_buttons["write_skinning"])
|
||||
write_layout.addWidget(definition_buttons["write_blendshapes"])
|
||||
|
||||
create_group = QtWidgets.QGroupBox("创建")
|
||||
create_layout = QtWidgets.QVBoxLayout(create_group)
|
||||
create_layout.addWidget(definition_buttons["create_blendshapes"])
|
||||
create_layout.addWidget(definition_buttons["bind_skin"])
|
||||
create_layout.addWidget(definition_buttons["unbind_skin"])
|
||||
|
||||
tools_group = QtWidgets.QGroupBox("工具")
|
||||
tools_layout2 = QtWidgets.QVBoxLayout(tools_group)
|
||||
tools_layout2.addWidget(definition_buttons["reposition_head"])
|
||||
tools_layout2.addWidget(definition_buttons["reposition_body"])
|
||||
tools_layout2.addWidget(definition_buttons["reposition_all"])
|
||||
tools_layout2.addWidget(definition_buttons["quick_preset"])
|
||||
|
||||
# 添加到工具标签页
|
||||
tools_layout.addWidget(write_group)
|
||||
tools_layout.addWidget(create_group)
|
||||
tools_layout.addWidget(tools_group)
|
||||
tools_layout.addStretch()
|
||||
|
||||
# 添加标签页到主标签控件
|
||||
definition_tabs.addTab(elements_tab, "元素")
|
||||
definition_tabs.addTab(tools_tab, "工具")
|
||||
|
||||
# 添加到主布局
|
||||
main_layout.addWidget(definition_tabs)
|
||||
|
||||
#========================================== CONNECTIONS ==========================================
|
||||
def connections():
|
||||
"""
|
||||
连接定义系统UI信号和槽
|
||||
"""
|
||||
# 连接按钮点击事件到占位函数
|
||||
definition_buttons["write_joint_defaults"].clicked.connect(lambda: print("写入关节默认位置功能待实现"))
|
||||
definition_buttons["write_geometry"].clicked.connect(lambda: print("写入几何体功能待实现"))
|
||||
definition_buttons["write_skinning"].clicked.connect(lambda: print("写入蒙皮功能待实现"))
|
||||
definition_buttons["write_blendshapes"].clicked.connect(lambda: print("写入混合变形目标功能待实现"))
|
||||
definition_buttons["create_blendshapes"].clicked.connect(lambda: print("创建混合变形功能待实现"))
|
||||
definition_buttons["bind_skin"].clicked.connect(lambda: print("绑定蒙皮功能待实现"))
|
||||
definition_buttons["unbind_skin"].clicked.connect(lambda: print("取消蒙皮功能待实现"))
|
||||
definition_buttons["reposition_head"].clicked.connect(lambda: print("重新定位头部关节功能待实现"))
|
||||
definition_buttons["reposition_body"].clicked.connect(lambda: print("重新定位身体关节功能待实现"))
|
||||
definition_buttons["reposition_all"].clicked.connect(lambda: print("重新定位全身关节功能待实现"))
|
||||
definition_buttons["quick_preset"].clicked.connect(lambda: print("快速创建预设功能待实现"))
|
||||
|
||||
# 连接列表选择事件
|
||||
for key, widget in dna_elements.items():
|
||||
if isinstance(widget, QtWidgets.QListWidget):
|
||||
widget.itemSelectionChanged.connect(lambda k=key: print(f"{k} 选择已更改"))
|
||||
|
||||
# 连接标签页切换事件
|
||||
definition_tabs.currentChanged.connect(lambda index: print(f"切换到标签页: {definition_tabs.tabText(index)}"))
|
||||
|
||||
#===================================== PLACEHOLDER FUNCTION ===================================
|
||||
def definition_temp_function():
|
||||
utils_definition.definition_temp_utils_function
|
Reference in New Issue
Block a user