Update behaviour.py
This commit is contained in:
@@ -30,6 +30,10 @@ import os
|
||||
#===================================== IMPORT FUNCTIONS ===================================
|
||||
from scripts.utils import utils_behaviour as utils_behaviour
|
||||
from scripts.ui import ui_utils
|
||||
import config
|
||||
|
||||
# 导入图标路径
|
||||
ICONS_PATH = config.ICONS_PATH
|
||||
|
||||
#========================================== WIDGETS ==========================================
|
||||
# 全局变量存储UI控件
|
||||
@@ -37,71 +41,203 @@ blendshape_tree = None
|
||||
sub_blendshape_tree = None
|
||||
blendshape_slider = None
|
||||
blendshape_preview = None
|
||||
search_input = None
|
||||
weight_value = None
|
||||
right_slider = None
|
||||
right_value = None
|
||||
restore_button = None
|
||||
combo_select_button = None
|
||||
single_target_button = None
|
||||
combo_target_button = None
|
||||
batch_target_button = None
|
||||
add_target_button = None
|
||||
remove_target_button = None
|
||||
mirror_target_button = None
|
||||
flip_target_button = None
|
||||
plus_button = None
|
||||
all_button = None
|
||||
number_buttons_layout = None
|
||||
|
||||
# 全局布局变量
|
||||
search_layout = None
|
||||
left_bottom_buttons = None
|
||||
left_slider_layout = None
|
||||
left_bottom_layout = None
|
||||
right_slider_layout = None
|
||||
right_buttons_row1 = None
|
||||
right_buttons_row2 = None
|
||||
right_buttons_row3 = None
|
||||
tab_buttons = None
|
||||
bottom_slider_layout = None
|
||||
bottom_slider = None
|
||||
bottom_value = None
|
||||
bottom_buttons_row1 = None
|
||||
bottom_buttons_row2 = None
|
||||
|
||||
behaviour_buttons = {}
|
||||
|
||||
def set_button_icon(button, icon_name):
|
||||
"""
|
||||
设置按钮图标,使用Maya默认图标
|
||||
|
||||
Args:
|
||||
button: 要设置图标的按钮
|
||||
icon_name: 图标文件名
|
||||
"""
|
||||
# 使用Maya内置图标
|
||||
from maya import cmds
|
||||
|
||||
# 设置按钮图标使用Maya的图标
|
||||
button.setIcon(QtGui.QIcon(":/{}".format(icon_name)))
|
||||
button.setIconSize(QtCore.QSize(24, 24)) # 图标尺寸
|
||||
print(f"成功设置按钮图标: {icon_name}")
|
||||
|
||||
# 注意:如果图标加载失败,我们会看到一个空图标,但不会引起错误
|
||||
|
||||
def widgets():
|
||||
"""
|
||||
创建行为系统UI控件
|
||||
"""
|
||||
global blendshape_tree, sub_blendshape_tree, blendshape_slider, blendshape_preview, behaviour_buttons
|
||||
global search_input, weight_value, right_slider, right_value, restore_button, combo_select_button
|
||||
global single_target_button, combo_target_button, batch_target_button, add_target_button
|
||||
global remove_target_button, mirror_target_button, flip_target_button, plus_button, all_button
|
||||
global number_buttons_layout
|
||||
|
||||
# 混合变形树形视图
|
||||
blendshape_tree = QtWidgets.QTreeWidget()
|
||||
blendshape_tree.setHeaderLabels(["混合变形名称", "权重", "类型"])
|
||||
blendshape_tree.setMinimumHeight(200)
|
||||
blendshape_tree.setSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Expanding)
|
||||
blendshape_tree.header().setSectionResizeMode(QtWidgets.QHeaderView.Stretch) # 列自动拉伸
|
||||
# 全局布局变量
|
||||
global search_layout, left_bottom_buttons, left_slider_layout, left_bottom_layout
|
||||
global right_slider_layout, right_buttons_row1, right_buttons_row2, right_buttons_row3
|
||||
global tab_buttons, bottom_slider_layout, bottom_slider, bottom_value
|
||||
global bottom_buttons_row1, bottom_buttons_row2
|
||||
|
||||
# 次级混合变形树形视图
|
||||
sub_blendshape_tree = QtWidgets.QTreeWidget()
|
||||
sub_blendshape_tree.setHeaderLabels(["次级混合变形", "权重", "目标"])
|
||||
sub_blendshape_tree.setMinimumHeight(150)
|
||||
sub_blendshape_tree.setSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Expanding)
|
||||
sub_blendshape_tree.header().setSectionResizeMode(QtWidgets.QHeaderView.Stretch) # 列自动拉伸
|
||||
# 创建搜索框
|
||||
search_layout = QtWidgets.QHBoxLayout()
|
||||
search_icon = QtWidgets.QLabel()
|
||||
search_icon.setPixmap(QtGui.QIcon(":/magnifyGlass.png").pixmap(16, 16))
|
||||
search_input = QtWidgets.QLineEdit()
|
||||
search_input.setPlaceholderText("搜索...")
|
||||
search_input.setObjectName("SearchInput")
|
||||
|
||||
# 混合变形滑块
|
||||
# 主表情控制列表
|
||||
blendshape_tree = QtWidgets.QListWidget()
|
||||
blendshape_tree.setObjectName("RawControlList")
|
||||
blendshape_tree.setSelectionMode(QtWidgets.QAbstractItemView.ExtendedSelection)
|
||||
|
||||
# 相关混合变形列表
|
||||
sub_blendshape_tree = QtWidgets.QListWidget()
|
||||
sub_blendshape_tree.setObjectName("RelatedBlendShapesList")
|
||||
sub_blendshape_tree.setSelectionMode(QtWidgets.QAbstractItemView.ExtendedSelection)
|
||||
|
||||
# 创建权重滑块和数值显示
|
||||
blendshape_slider = QtWidgets.QSlider(QtCore.Qt.Horizontal)
|
||||
blendshape_slider.setMinimum(0)
|
||||
blendshape_slider.setMaximum(100)
|
||||
blendshape_slider.setMaximum(1000) # 使用更精细的值,对应到0-1.0
|
||||
blendshape_slider.setValue(0)
|
||||
blendshape_slider.setSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Fixed)
|
||||
blendshape_slider.setObjectName("WeightSlider")
|
||||
|
||||
# 预览区域
|
||||
blendshape_preview = QtWidgets.QLabel("预览区域")
|
||||
blendshape_preview.setAlignment(QtCore.Qt.AlignCenter)
|
||||
blendshape_preview.setStyleSheet("background-color: #333333; color: white;")
|
||||
blendshape_preview.setMinimumHeight(150)
|
||||
blendshape_preview.setSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Expanding)
|
||||
# 权重数值显示
|
||||
weight_value = QtWidgets.QLineEdit("0.000")
|
||||
weight_value.setFixedWidth(50)
|
||||
weight_value.setAlignment(QtCore.Qt.AlignRight | QtCore.Qt.AlignVCenter)
|
||||
weight_value.setObjectName("WeightValue")
|
||||
|
||||
# 功能按钮 - 设置统一的大小策略
|
||||
button_names = [
|
||||
"refresh_blendshapes", "refresh_sub_blendshapes", "export_blendshapes", "import_blendshapes",
|
||||
"edit_range", "mirror_blendshape", "find_flip_target", "rebuild_blendshape",
|
||||
"reset_controller", "find_expression", "find_control_panel", "select_related_joints",
|
||||
"write_current_expression", "write_mirror_expression"
|
||||
]
|
||||
# 全部按钮
|
||||
all_button = QtWidgets.QPushButton("全部")
|
||||
all_button.setFixedWidth(60)
|
||||
all_button.setObjectName("AllButton")
|
||||
|
||||
button_texts = {
|
||||
"refresh_blendshapes": "刷新混合变形",
|
||||
"refresh_sub_blendshapes": "刷新次级混合变形",
|
||||
"export_blendshapes": "导出混合变形",
|
||||
"import_blendshapes": "导入混合变形",
|
||||
"edit_range": "范围编辑",
|
||||
"mirror_blendshape": "混合变形镜像",
|
||||
"find_flip_target": "查找翻转目标",
|
||||
"rebuild_blendshape": "重建混合变形",
|
||||
"reset_controller": "还原默认表情",
|
||||
"find_expression": "查找选择表情",
|
||||
"find_control_panel": "控制面板查找",
|
||||
"select_related_joints": "选择关联关节",
|
||||
"write_current_expression": "写入当前表情",
|
||||
"write_mirror_expression": "写入镜像表情"
|
||||
}
|
||||
# 数字按钮组
|
||||
number_buttons_layout = QtWidgets.QHBoxLayout()
|
||||
for i in range(1, 7): # 1-6的数字按钮
|
||||
num_button = QtWidgets.QPushButton(str(i))
|
||||
num_button.setFixedWidth(30)
|
||||
num_button.setObjectName(f"NumButton{i}")
|
||||
number_buttons_layout.addWidget(num_button)
|
||||
|
||||
for button_name in button_names:
|
||||
behaviour_buttons[button_name] = QtWidgets.QPushButton(button_texts[button_name])
|
||||
behaviour_buttons[button_name].setSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Fixed)
|
||||
behaviour_buttons[button_name].setMinimumWidth(120)
|
||||
# 创建左侧底部按钮
|
||||
restore_button = QtWidgets.QPushButton("恢复表情")
|
||||
set_button_icon(restore_button, "undo.png")
|
||||
restore_button.setObjectName("RestoreButton")
|
||||
|
||||
combo_select_button = QtWidgets.QPushButton("组合选择")
|
||||
set_button_icon(combo_select_button, "selectByHull.png")
|
||||
combo_select_button.setObjectName("ComboSelectButton")
|
||||
|
||||
# 创建右侧按钮
|
||||
# 第一行按钮
|
||||
single_target_button = QtWidgets.QPushButton("单个目标表情")
|
||||
set_button_icon(single_target_button, "blendShape.png")
|
||||
single_target_button.setObjectName("SingleTargetButton")
|
||||
|
||||
combo_target_button = QtWidgets.QPushButton("复合目标表情")
|
||||
set_button_icon(combo_target_button, "blendShapeEditor.png")
|
||||
combo_target_button.setObjectName("ComboTargetButton")
|
||||
|
||||
batch_target_button = QtWidgets.QPushButton("批量目标表情")
|
||||
set_button_icon(batch_target_button, "blendShapePanel.png")
|
||||
batch_target_button.setObjectName("BatchTargetButton")
|
||||
|
||||
# 第二行按钮
|
||||
add_target_button = QtWidgets.QPushButton("添加目标表情")
|
||||
set_button_icon(add_target_button, "addClip.png")
|
||||
add_target_button.setObjectName("AddTargetButton")
|
||||
|
||||
remove_target_button = QtWidgets.QPushButton("移除目标表情")
|
||||
set_button_icon(remove_target_button, "removeClip.png")
|
||||
remove_target_button.setObjectName("RemoveTargetButton")
|
||||
|
||||
# 第三行按钮
|
||||
mirror_target_button = QtWidgets.QPushButton("镜像目标表情")
|
||||
set_button_icon(mirror_target_button, "mirrorJoint.png")
|
||||
mirror_target_button.setObjectName("MirrorTargetButton")
|
||||
|
||||
flip_target_button = QtWidgets.QPushButton("翻转目标表情")
|
||||
set_button_icon(flip_target_button, "flipTriangle.png")
|
||||
flip_target_button.setObjectName("FlipTargetButton")
|
||||
|
||||
# 右侧滑块和数值显示
|
||||
right_slider = QtWidgets.QSlider(QtCore.Qt.Horizontal)
|
||||
right_slider.setMinimum(0)
|
||||
right_slider.setMaximum(1000) # 使用更精细的值,对应到0-1.0
|
||||
right_slider.setValue(0)
|
||||
right_slider.setObjectName("RightSlider")
|
||||
|
||||
right_value = QtWidgets.QLineEdit("0.000")
|
||||
right_value.setFixedWidth(50)
|
||||
right_value.setAlignment(QtCore.Qt.AlignRight | QtCore.Qt.AlignVCenter)
|
||||
right_value.setObjectName("RightValue")
|
||||
|
||||
# 添加加号按钮
|
||||
plus_button = QtWidgets.QPushButton("+")
|
||||
plus_button.setFixedSize(30, 30)
|
||||
plus_button.setObjectName("PlusButton")
|
||||
|
||||
# 底部按钮
|
||||
# 第一行按钮
|
||||
behaviour_buttons["reset_controller"] = QtWidgets.QPushButton("还原默认表情")
|
||||
set_button_icon(behaviour_buttons["reset_controller"], "undo.png")
|
||||
|
||||
behaviour_buttons["find_expression"] = QtWidgets.QPushButton("查找选择表情")
|
||||
set_button_icon(behaviour_buttons["find_expression"], "find.png")
|
||||
|
||||
behaviour_buttons["find_control_panel"] = QtWidgets.QPushButton("控制面板查找")
|
||||
set_button_icon(behaviour_buttons["find_control_panel"], "menuIconWindow.png")
|
||||
|
||||
# 第二行按钮
|
||||
behaviour_buttons["select_related_joints"] = QtWidgets.QPushButton("选择关联关节")
|
||||
set_button_icon(behaviour_buttons["select_related_joints"], "kinJoint.png")
|
||||
|
||||
behaviour_buttons["write_current_expression"] = QtWidgets.QPushButton("写入当前表情")
|
||||
set_button_icon(behaviour_buttons["write_current_expression"], "positionConstraint.png")
|
||||
|
||||
behaviour_buttons["write_mirror_expression"] = QtWidgets.QPushButton("写入镜像表情")
|
||||
set_button_icon(behaviour_buttons["write_mirror_expression"], "mirrorJoint.png")
|
||||
|
||||
# 设置所有按钮的样式
|
||||
for key, button in behaviour_buttons.items():
|
||||
button.setMinimumHeight(28)
|
||||
button.setStyleSheet("text-align: left; padding-left: 30px;")
|
||||
button.setToolTip(button.text())
|
||||
|
||||
#========================================== LAYOUTS ==========================================
|
||||
def layouts(parent_tab=None):
|
||||
@@ -129,104 +265,275 @@ def layouts(parent_tab=None):
|
||||
# 创建主分割控件
|
||||
main_splitter = QtWidgets.QSplitter(QtCore.Qt.Horizontal)
|
||||
|
||||
# 左侧区域 - 混合变形列表
|
||||
# 左侧区域 - Raw Control
|
||||
left_widget = QtWidgets.QWidget()
|
||||
left_layout = QtWidgets.QVBoxLayout(left_widget)
|
||||
left_layout.setContentsMargins(2, 2, 2, 2)
|
||||
left_layout.setSpacing(2)
|
||||
|
||||
# 混合变形列表区域
|
||||
blendshape_group = QtWidgets.QGroupBox("混合变形列表")
|
||||
blendshape_layout = QtWidgets.QVBoxLayout(blendshape_group)
|
||||
# 标题和搜索区域
|
||||
left_header = QtWidgets.QHBoxLayout()
|
||||
left_title = QtWidgets.QLabel("Raw Control [000]")
|
||||
left_title.setStyleSheet("font-weight: bold;")
|
||||
left_header.addWidget(left_title)
|
||||
left_layout.addLayout(left_header)
|
||||
|
||||
# 添加刷新按钮
|
||||
refresh_layout = QtWidgets.QHBoxLayout()
|
||||
refresh_layout.addWidget(behaviour_buttons["refresh_blendshapes"])
|
||||
refresh_layout.addWidget(behaviour_buttons["refresh_sub_blendshapes"])
|
||||
blendshape_layout.addLayout(refresh_layout)
|
||||
# 搜索框
|
||||
search_layout = QtWidgets.QHBoxLayout()
|
||||
search_icon = QtWidgets.QLabel()
|
||||
search_icon.setPixmap(QtGui.QIcon(":/magnifyGlass.png").pixmap(16, 16))
|
||||
search_layout.addWidget(search_icon)
|
||||
search_layout.addWidget(search_input)
|
||||
left_layout.addLayout(search_layout)
|
||||
|
||||
# 创建列表分割控件
|
||||
list_splitter = QtWidgets.QSplitter(QtCore.Qt.Vertical)
|
||||
list_splitter.addWidget(blendshape_tree)
|
||||
list_splitter.addWidget(sub_blendshape_tree)
|
||||
blendshape_layout.addWidget(list_splitter)
|
||||
# 主列表
|
||||
left_layout.addWidget(blendshape_tree)
|
||||
|
||||
# 添加滑块
|
||||
slider_layout = QtWidgets.QHBoxLayout()
|
||||
slider_layout.addWidget(QtWidgets.QLabel("权重:"))
|
||||
slider_layout.addWidget(blendshape_slider)
|
||||
slider_layout.addWidget(QtWidgets.QLabel("0"))
|
||||
blendshape_layout.addLayout(slider_layout)
|
||||
# 底部按钮组
|
||||
left_bottom_buttons = QtWidgets.QHBoxLayout()
|
||||
left_bottom_buttons.addWidget(restore_button)
|
||||
left_bottom_buttons.addWidget(combo_select_button)
|
||||
left_layout.addLayout(left_bottom_buttons)
|
||||
|
||||
left_layout.addWidget(blendshape_group)
|
||||
# 数字按钮组
|
||||
left_layout.addWidget(all_button)
|
||||
left_layout.addLayout(number_buttons_layout)
|
||||
|
||||
# 左侧按钮组
|
||||
left_buttons_layout = QtWidgets.QGridLayout()
|
||||
left_buttons_layout.addWidget(behaviour_buttons["export_blendshapes"], 0, 0)
|
||||
left_buttons_layout.addWidget(behaviour_buttons["import_blendshapes"], 0, 1)
|
||||
left_buttons_layout.addWidget(behaviour_buttons["edit_range"], 1, 0)
|
||||
left_buttons_layout.addWidget(behaviour_buttons["mirror_blendshape"], 1, 1)
|
||||
left_buttons_layout.addWidget(behaviour_buttons["find_flip_target"], 2, 0)
|
||||
left_buttons_layout.addWidget(behaviour_buttons["rebuild_blendshape"], 2, 1)
|
||||
left_layout.addLayout(left_buttons_layout)
|
||||
# 底部滑块和数值
|
||||
left_slider_layout = QtWidgets.QHBoxLayout()
|
||||
left_slider_layout.addWidget(weight_value)
|
||||
left_slider_layout.addWidget(blendshape_slider)
|
||||
left_slider_layout.addWidget(QtWidgets.QPushButton("全部"))
|
||||
left_layout.addLayout(left_slider_layout)
|
||||
|
||||
# 右侧区域 - 预览和工具
|
||||
# 左侧底部按钮组
|
||||
left_bottom_layout = QtWidgets.QHBoxLayout()
|
||||
left_bottom_layout.addWidget(QtWidgets.QPushButton("定义"))
|
||||
left_bottom_layout.addWidget(QtWidgets.QPushButton("范围 -"))
|
||||
left_layout.addLayout(left_bottom_layout)
|
||||
|
||||
# 右侧区域 - Related BlendShapes
|
||||
right_widget = QtWidgets.QWidget()
|
||||
right_layout = QtWidgets.QVBoxLayout(right_widget)
|
||||
right_layout.setContentsMargins(2, 2, 2, 2)
|
||||
right_layout.setSpacing(2)
|
||||
|
||||
# 预览区域
|
||||
preview_group = QtWidgets.QGroupBox("预览")
|
||||
preview_layout = QtWidgets.QVBoxLayout(preview_group)
|
||||
preview_layout.addWidget(blendshape_preview)
|
||||
right_layout.addWidget(preview_group)
|
||||
# 标题
|
||||
right_header = QtWidgets.QHBoxLayout()
|
||||
right_title = QtWidgets.QLabel("Related BlendShapes [000]")
|
||||
right_title.setStyleSheet("font-weight: bold;")
|
||||
right_header.addWidget(right_title)
|
||||
right_layout.addLayout(right_header)
|
||||
|
||||
# 右侧按钮组
|
||||
right_buttons_layout = QtWidgets.QGridLayout()
|
||||
right_buttons_layout.addWidget(behaviour_buttons["reset_controller"], 0, 0)
|
||||
right_buttons_layout.addWidget(behaviour_buttons["find_expression"], 0, 1)
|
||||
right_buttons_layout.addWidget(behaviour_buttons["find_control_panel"], 1, 0)
|
||||
right_buttons_layout.addWidget(behaviour_buttons["select_related_joints"], 1, 1)
|
||||
right_buttons_layout.addWidget(behaviour_buttons["write_current_expression"], 2, 0)
|
||||
right_buttons_layout.addWidget(behaviour_buttons["write_mirror_expression"], 2, 1)
|
||||
right_layout.addLayout(right_buttons_layout)
|
||||
# 相关混合变形列表
|
||||
right_layout.addWidget(sub_blendshape_tree)
|
||||
|
||||
# 右侧滑块和数值
|
||||
right_slider_layout = QtWidgets.QHBoxLayout()
|
||||
right_slider_layout.addWidget(right_value)
|
||||
right_slider_layout.addWidget(right_slider)
|
||||
right_slider_layout.addWidget(QtWidgets.QPushButton("全部"))
|
||||
right_layout.addLayout(right_slider_layout)
|
||||
|
||||
# 右侧按钮组 - 第一行
|
||||
right_buttons_row1 = QtWidgets.QHBoxLayout()
|
||||
right_buttons_row1.addWidget(single_target_button)
|
||||
right_buttons_row1.addWidget(combo_target_button)
|
||||
right_buttons_row1.addWidget(batch_target_button)
|
||||
right_layout.addLayout(right_buttons_row1)
|
||||
|
||||
# 右侧按钮组 - 第二行
|
||||
right_buttons_row2 = QtWidgets.QHBoxLayout()
|
||||
right_buttons_row2.addWidget(add_target_button)
|
||||
right_buttons_row2.addWidget(remove_target_button)
|
||||
right_layout.addLayout(right_buttons_row2)
|
||||
|
||||
# 右侧按钮组 - 第三行
|
||||
right_buttons_row3 = QtWidgets.QHBoxLayout()
|
||||
right_buttons_row3.addWidget(mirror_target_button)
|
||||
right_buttons_row3.addWidget(flip_target_button)
|
||||
right_layout.addLayout(right_buttons_row3)
|
||||
|
||||
# 添加到主分割控件
|
||||
main_splitter.addWidget(left_widget)
|
||||
main_splitter.addWidget(right_widget)
|
||||
|
||||
# 设置分割比例
|
||||
main_splitter.setSizes([int(parent_tab.width() * 0.6), int(parent_tab.width() * 0.4)])
|
||||
main_splitter.setSizes([int(parent_tab.width() * 0.5), int(parent_tab.width() * 0.5)])
|
||||
|
||||
# 底部按钮组
|
||||
bottom_widget = QtWidgets.QWidget()
|
||||
bottom_layout = QtWidgets.QVBoxLayout(bottom_widget)
|
||||
bottom_layout.setContentsMargins(4, 4, 4, 4)
|
||||
bottom_layout.setSpacing(4)
|
||||
|
||||
# 选项卡按钮组
|
||||
tab_buttons = QtWidgets.QHBoxLayout()
|
||||
tab_buttons.addWidget(QtWidgets.QPushButton("BS"))
|
||||
tab_buttons.addWidget(QtWidgets.QPushButton("PSD"))
|
||||
tab_buttons.addWidget(QtWidgets.QPushButton("KEY"))
|
||||
tab_buttons.addWidget(QtWidgets.QPushButton("JNT"))
|
||||
tab_buttons.addWidget(QtWidgets.QPushButton("ARK"))
|
||||
tab_buttons.addWidget(QtWidgets.QPushButton("CTR"))
|
||||
bottom_layout.addLayout(tab_buttons)
|
||||
|
||||
# 底部滑块
|
||||
bottom_slider_layout = QtWidgets.QHBoxLayout()
|
||||
bottom_slider = QtWidgets.QSlider(QtCore.Qt.Horizontal)
|
||||
bottom_slider.setMinimum(0)
|
||||
bottom_slider.setMaximum(1000)
|
||||
bottom_slider.setValue(0)
|
||||
bottom_value = QtWidgets.QLineEdit("0.000")
|
||||
bottom_value.setFixedWidth(50)
|
||||
bottom_value.setAlignment(QtCore.Qt.AlignRight | QtCore.Qt.AlignVCenter)
|
||||
bottom_slider_layout.addWidget(bottom_value)
|
||||
bottom_slider_layout.addWidget(bottom_slider)
|
||||
bottom_slider_layout.addWidget(plus_button)
|
||||
bottom_slider_layout.addWidget(QtWidgets.QPushButton("全部"))
|
||||
bottom_layout.addLayout(bottom_slider_layout)
|
||||
|
||||
# 底部按钮组 - 第一行
|
||||
bottom_buttons_row1 = QtWidgets.QHBoxLayout()
|
||||
bottom_buttons_row1.addWidget(behaviour_buttons["reset_controller"])
|
||||
bottom_buttons_row1.addWidget(behaviour_buttons["find_expression"])
|
||||
bottom_buttons_row1.addWidget(behaviour_buttons["write_current_expression"])
|
||||
bottom_layout.addLayout(bottom_buttons_row1)
|
||||
|
||||
# 底部按钮组 - 第二行
|
||||
bottom_buttons_row2 = QtWidgets.QHBoxLayout()
|
||||
bottom_buttons_row2.addWidget(behaviour_buttons["find_control_panel"])
|
||||
bottom_buttons_row2.addWidget(behaviour_buttons["select_related_joints"])
|
||||
bottom_buttons_row2.addWidget(behaviour_buttons["write_mirror_expression"])
|
||||
bottom_layout.addLayout(bottom_buttons_row2)
|
||||
|
||||
# 添加到主布局
|
||||
main_layout.addWidget(main_splitter)
|
||||
main_layout.addWidget(main_splitter, 3) # 占据更多空间
|
||||
main_layout.addWidget(bottom_widget, 1) # 占据较少空间
|
||||
|
||||
#========================================== CONNECTIONS ==========================================
|
||||
def connections():
|
||||
"""
|
||||
连接行为系统UI信号和槽
|
||||
"""
|
||||
# 连接按钮点击事件到占位函数
|
||||
behaviour_buttons["refresh_blendshapes"].clicked.connect(lambda: print("刷新混合变形功能待实现"))
|
||||
behaviour_buttons["refresh_sub_blendshapes"].clicked.connect(lambda: print("刷新次级混合变形功能待实现"))
|
||||
behaviour_buttons["export_blendshapes"].clicked.connect(lambda: print("导出混合变形功能待实现"))
|
||||
behaviour_buttons["import_blendshapes"].clicked.connect(lambda: print("导入混合变形功能待实现"))
|
||||
behaviour_buttons["edit_range"].clicked.connect(lambda: print("范围编辑功能待实现"))
|
||||
behaviour_buttons["mirror_blendshape"].clicked.connect(lambda: print("混合变形镜像功能待实现"))
|
||||
behaviour_buttons["find_flip_target"].clicked.connect(lambda: print("查找翻转目标功能待实现"))
|
||||
behaviour_buttons["rebuild_blendshape"].clicked.connect(lambda: print("重建混合变形功能待实现"))
|
||||
behaviour_buttons["reset_controller"].clicked.connect(lambda: print("还原默认表情功能待实现"))
|
||||
behaviour_buttons["find_expression"].clicked.connect(lambda: print("查找选择表情功能待实现"))
|
||||
behaviour_buttons["find_control_panel"].clicked.connect(lambda: print("控制面板查找功能待实现"))
|
||||
behaviour_buttons["select_related_joints"].clicked.connect(lambda: print("选择关联关节功能待实现"))
|
||||
behaviour_buttons["write_current_expression"].clicked.connect(lambda: print("写入当前表情功能待实现"))
|
||||
behaviour_buttons["write_mirror_expression"].clicked.connect(lambda: print("写入镜像表情功能待实现"))
|
||||
|
||||
# 连接树形视图选择事件
|
||||
blendshape_tree.itemSelectionChanged.connect(lambda: print("混合变形选择已更改"))
|
||||
sub_blendshape_tree.itemSelectionChanged.connect(lambda: print("次级混合变形选择已更改"))
|
||||
# 连接主表情控制列表选择事件
|
||||
blendshape_tree.itemSelectionChanged.connect(on_blendshape_selection_changed)
|
||||
sub_blendshape_tree.itemSelectionChanged.connect(on_sub_blendshape_selection_changed)
|
||||
|
||||
# 连接滑块值变化事件
|
||||
blendshape_slider.valueChanged.connect(lambda value: print(f"混合变形权重已更改为: {value/100.0}"))
|
||||
blendshape_slider.valueChanged.connect(on_blendshape_slider_changed)
|
||||
|
||||
# 连接底部按钮点击事件
|
||||
behaviour_buttons["reset_controller"].clicked.connect(on_reset_controller)
|
||||
behaviour_buttons["find_expression"].clicked.connect(on_find_expression)
|
||||
behaviour_buttons["find_control_panel"].clicked.connect(on_find_control_panel)
|
||||
behaviour_buttons["select_related_joints"].clicked.connect(on_select_related_joints)
|
||||
behaviour_buttons["write_current_expression"].clicked.connect(on_write_current_expression)
|
||||
behaviour_buttons["write_mirror_expression"].clicked.connect(on_write_mirror_expression)
|
||||
|
||||
# 连接其他按钮点击事件
|
||||
restore_button.clicked.connect(on_restore_expression)
|
||||
combo_select_button.clicked.connect(on_combo_select)
|
||||
|
||||
# 连接右侧按钮点击事件
|
||||
single_target_button.clicked.connect(on_single_target)
|
||||
combo_target_button.clicked.connect(on_combo_target)
|
||||
batch_target_button.clicked.connect(on_batch_target)
|
||||
add_target_button.clicked.connect(on_add_target)
|
||||
remove_target_button.clicked.connect(on_remove_target)
|
||||
mirror_target_button.clicked.connect(on_mirror_target)
|
||||
flip_target_button.clicked.connect(on_flip_target)
|
||||
|
||||
#===================================== CALLBACK FUNCTIONS ===================================
|
||||
def on_blendshape_selection_changed():
|
||||
"""当主表情控制列表选择变化时调用"""
|
||||
print("主表情控制选择已更改")
|
||||
# TODO: 实现选择变化后的逻辑
|
||||
|
||||
def on_sub_blendshape_selection_changed():
|
||||
"""当相关混合变形列表选择变化时调用"""
|
||||
print("相关混合变形选择已更改")
|
||||
# TODO: 实现选择变化后的逻辑
|
||||
|
||||
def on_blendshape_slider_changed(value):
|
||||
"""当混合变形滑块值变化时调用"""
|
||||
actual_value = value / 1000.0 # 转换为0-1范围
|
||||
print(f"混合变形权重已更改为: {actual_value:.3f}")
|
||||
# TODO: 实现权重变化后的逻辑
|
||||
|
||||
def on_reset_controller():
|
||||
"""还原默认表情"""
|
||||
print("还原默认表情功能待实现")
|
||||
# TODO: 实现还原默认表情功能
|
||||
|
||||
def on_find_expression():
|
||||
"""查找选择表情"""
|
||||
print("查找选择表情功能待实现")
|
||||
# TODO: 实现查找选择表情功能
|
||||
|
||||
def on_find_control_panel():
|
||||
"""控制面板查找"""
|
||||
print("控制面板查找功能待实现")
|
||||
# TODO: 实现控制面板查找功能
|
||||
|
||||
def on_select_related_joints():
|
||||
"""选择关联关节"""
|
||||
print("选择关联关节功能待实现")
|
||||
# TODO: 实现选择关联关节功能
|
||||
|
||||
def on_write_current_expression():
|
||||
"""写入当前表情"""
|
||||
print("写入当前表情功能待实现")
|
||||
# TODO: 实现写入当前表情功能
|
||||
|
||||
def on_write_mirror_expression():
|
||||
"""写入镜像表情"""
|
||||
print("写入镜像表情功能待实现")
|
||||
# TODO: 实现写入镜像表情功能
|
||||
|
||||
def on_restore_expression():
|
||||
"""恢复表情"""
|
||||
print("恢复表情功能待实现")
|
||||
# TODO: 实现恢复表情功能
|
||||
|
||||
def on_combo_select():
|
||||
"""组合选择"""
|
||||
print("组合选择功能待实现")
|
||||
# TODO: 实现组合选择功能
|
||||
|
||||
def on_single_target():
|
||||
"""单个目标表情"""
|
||||
print("单个目标表情功能待实现")
|
||||
# TODO: 实现单个目标表情功能
|
||||
|
||||
def on_combo_target():
|
||||
"""复合目标表情"""
|
||||
print("复合目标表情功能待实现")
|
||||
# TODO: 实现复合目标表情功能
|
||||
|
||||
def on_batch_target():
|
||||
"""批量目标表情"""
|
||||
print("批量目标表情功能待实现")
|
||||
# TODO: 实现批量目标表情功能
|
||||
|
||||
def on_add_target():
|
||||
"""添加目标表情"""
|
||||
print("添加目标表情功能待实现")
|
||||
# TODO: 实现添加目标表情功能
|
||||
|
||||
def on_remove_target():
|
||||
"""移除目标表情"""
|
||||
print("移除目标表情功能待实现")
|
||||
# TODO: 实现移除目标表情功能
|
||||
|
||||
def on_mirror_target():
|
||||
"""镜像目标表情"""
|
||||
print("镜像目标表情功能待实现")
|
||||
# TODO: 实现镜像目标表情功能
|
||||
|
||||
def on_flip_target():
|
||||
"""翻转目标表情"""
|
||||
print("翻转目标表情功能待实现")
|
||||
# TODO: 实现翻转目标表情功能
|
||||
|
||||
#===================================== PLACEHOLDER FUNCTION ===================================
|
||||
def behaviour_temp_function():
|
||||
|
Reference in New Issue
Block a user