MetaFusion/scripts/ui/define.py
2025-02-06 04:00:17 +08:00

171 lines
5.5 KiB
Python

import os
from scripts.config import data
from scripts.ui.widgets import (
BaseWidget, IconButton, SearchLineEdit
)
QtCore, QtGui, QtWidgets = data.Qt()
class DefineTab(BaseWidget):
"""定义标签页"""
def __init__(self, parent=None):
super(DefineTab, self).__init__(parent)
def setup_ui(self):
layout = QtWidgets.QVBoxLayout(self)
# 创建滚动区域
scroll = QtWidgets.QScrollArea()
scroll.setWidgetResizable(True)
scroll.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff)
layout.addWidget(scroll)
# 创建内容控件
content = QtWidgets.QWidget()
content_layout = QtWidgets.QVBoxLayout(content)
scroll.setWidget(content)
# DNA定义部分
dna_group = self.create_dna_definition()
content_layout.addWidget(dna_group)
# 骨骼定义部分
joint_group = self.create_joint_definition()
content_layout.addWidget(joint_group)
# BlendShape定义部分
bs_group = self.create_blendshape_definition()
content_layout.addWidget(bs_group)
content_layout.addStretch()
def create_dna_definition(self):
"""创建DNA定义组"""
group = QtWidgets.QGroupBox("DNA定义")
layout = QtWidgets.QVBoxLayout(group)
# DNA文件选择
file_layout = QtWidgets.QHBoxLayout()
file_layout.addWidget(QtWidgets.QLabel("DNA文件:"))
self.dna_file_input = QtWidgets.QLineEdit()
file_layout.addWidget(self.dna_file_input)
browse_btn = IconButton("target.png", "浏览DNA文件")
browse_btn.clicked.connect(self.browse_dna_file)
file_layout.addWidget(browse_btn)
layout.addLayout(file_layout)
# DNA预览
preview_group = QtWidgets.QGroupBox("DNA预览")
preview_layout = QtWidgets.QVBoxLayout(preview_group)
self.dna_preview = QtWidgets.QTextEdit()
self.dna_preview.setReadOnly(True)
preview_layout.addWidget(self.dna_preview)
layout.addWidget(preview_group)
return group
def create_joint_definition(self):
"""创建骨骼定义组"""
group = QtWidgets.QGroupBox("骨骼定义")
layout = QtWidgets.QVBoxLayout(group)
# 骨骼列表
self.joint_list = QtWidgets.QTreeWidget()
self.joint_list.setHeaderLabels(["骨骼名称", "位置", "旋转", "缩放"])
layout.addWidget(self.joint_list)
# 骨骼工具栏
tools_layout = QtWidgets.QHBoxLayout()
# 添加骨骼
add_btn = IconButton("joint.png", "添加骨骼")
add_btn.clicked.connect(self.add_joint)
tools_layout.addWidget(add_btn)
# 删除骨骼
del_btn = IconButton("delete.png", "删除骨骼")
del_btn.clicked.connect(self.delete_joint)
tools_layout.addWidget(del_btn)
# 修改骨骼
mod_btn = IconButton("modify.png", "修改骨骼")
mod_btn.clicked.connect(self.modify_joint)
tools_layout.addWidget(mod_btn)
tools_layout.addStretch()
layout.addLayout(tools_layout)
return group
def create_blendshape_definition(self):
"""创建BlendShape定义组"""
group = QtWidgets.QGroupBox("BlendShape定义")
layout = QtWidgets.QVBoxLayout(group)
# BlendShape列表
self.bs_list = QtWidgets.QTreeWidget()
self.bs_list.setHeaderLabels(["名称", "目标", "权重"])
layout.addWidget(self.bs_list)
# BlendShape工具栏
tools_layout = QtWidgets.QHBoxLayout()
# 添加BlendShape
add_btn = IconButton("blendShape.png", "添加BlendShape")
add_btn.clicked.connect(self.add_blendshape)
tools_layout.addWidget(add_btn)
# 删除BlendShape
del_btn = IconButton("delete.png", "删除BlendShape")
del_btn.clicked.connect(self.delete_blendshape)
tools_layout.addWidget(del_btn)
# 修改BlendShape
mod_btn = IconButton("modify.png", "修改BlendShape")
mod_btn.clicked.connect(self.modify_blendshape)
tools_layout.addWidget(mod_btn)
tools_layout.addStretch()
layout.addLayout(tools_layout)
return group
# DNA定义回调
def browse_dna_file(self):
"""浏览DNA文件"""
from scripts.utils import define_utils
define_utils.browse_dna_file()
# 骨骼定义回调
def add_joint(self):
"""添加骨骼"""
from scripts.utils import define_utils
define_utils.add_joint()
def delete_joint(self):
"""删除骨骼"""
from scripts.utils import define_utils
define_utils.delete_joint()
def modify_joint(self):
"""修改骨骼"""
from scripts.utils import define_utils
define_utils.modify_joint()
# BlendShape定义回调
def add_blendshape(self):
"""添加BlendShape"""
from scripts.utils import define_utils
define_utils.add_blendshape()
def delete_blendshape(self):
"""删除BlendShape"""
from scripts.utils import define_utils
define_utils.delete_blendshape()
def modify_blendshape(self):
"""修改BlendShape"""
from scripts.utils import define_utils
define_utils.modify_blendshape()