Update rigging.py
This commit is contained in:
@@ -59,77 +59,6 @@ class RiggingUI(ui_utils.BaseUI):
|
|||||||
绑定系统UI类 - 负责显示骨骼绑定编辑界面和基础操作
|
绑定系统UI类 - 负责显示骨骼绑定编辑界面和基础操作
|
||||||
继承自BaseUI类,实现绑定系统相关的UI功能
|
继承自BaseUI类,实现绑定系统相关的UI功能
|
||||||
"""
|
"""
|
||||||
#======================================= FUNCTIONS ======================================
|
|
||||||
def connect_ui_signals(self):
|
|
||||||
"""
|
|
||||||
连接UI信号和槽
|
|
||||||
设置UI控件的事件处理函数
|
|
||||||
"""
|
|
||||||
# 创建信号映射字典
|
|
||||||
signal_mapping = {
|
|
||||||
'buttons': {
|
|
||||||
'add_joint_btn': {'signal': 'clicked', 'handler': utils_rigging.add_joint},
|
|
||||||
'remove_joint_btn': {'signal': 'clicked', 'handler': utils_rigging.remove_joint},
|
|
||||||
'duplicate_joint_btn': {'signal': 'clicked', 'handler': utils_rigging.duplicate_joint},
|
|
||||||
'add_controller_btn': {'signal': 'clicked', 'handler': utils_rigging.add_controller},
|
|
||||||
'remove_controller_btn': {'signal': 'clicked', 'handler': utils_rigging.remove_controller},
|
|
||||||
'duplicate_controller_btn': {'signal': 'clicked', 'handler': utils_rigging.duplicate_controller},
|
|
||||||
'import_dna_btn': {'signal': 'clicked', 'handler': utils_rigging.import_dna},
|
|
||||||
'export_dna_btn': {'signal': 'clicked', 'handler': utils_rigging.export_dna},
|
|
||||||
'calibrate_dna_btn': {'signal': 'clicked', 'handler': utils_rigging.calibrate_dna},
|
|
||||||
},
|
|
||||||
'splitters': {
|
|
||||||
'main_splitter': {'signal': 'splitterMoved', 'handler': lambda pos, index: ui_utils.on_splitter_moved(self, pos, index)},
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
# 使用ui_utils中的通用函数连接信号
|
|
||||||
ui_utils.connect_ui_signals(self, signal_mapping)
|
|
||||||
|
|
||||||
# 连接关节属性编辑控件
|
|
||||||
if hasattr(self, 'joint_name_edit'):
|
|
||||||
self.joint_name_edit.editingFinished.connect(lambda: utils_rigging.handle_joint_name_changed(self.joint_name_edit))
|
|
||||||
|
|
||||||
# 关节位置编辑
|
|
||||||
if hasattr(self, 'joint_pos_x_spin'):
|
|
||||||
self.joint_pos_x_spin.valueChanged.connect(lambda val: utils_rigging.handle_joint_position_changed(0, [self.joint_pos_x_spin, self.joint_pos_y_spin, self.joint_pos_z_spin]))
|
|
||||||
if hasattr(self, 'joint_pos_y_spin'):
|
|
||||||
self.joint_pos_y_spin.valueChanged.connect(lambda val: utils_rigging.handle_joint_position_changed(1, [self.joint_pos_x_spin, self.joint_pos_y_spin, self.joint_pos_z_spin]))
|
|
||||||
if hasattr(self, 'joint_pos_z_spin'):
|
|
||||||
self.joint_pos_z_spin.valueChanged.connect(lambda val: utils_rigging.handle_joint_position_changed(2, [self.joint_pos_x_spin, self.joint_pos_y_spin, self.joint_pos_z_spin]))
|
|
||||||
|
|
||||||
# 关节旋转编辑
|
|
||||||
if hasattr(self, 'joint_rot_x_spin'):
|
|
||||||
self.joint_rot_x_spin.valueChanged.connect(lambda val: utils_rigging.handle_joint_rotation_changed(0, [self.joint_rot_x_spin, self.joint_rot_y_spin, self.joint_rot_z_spin]))
|
|
||||||
if hasattr(self, 'joint_rot_y_spin'):
|
|
||||||
self.joint_rot_y_spin.valueChanged.connect(lambda val: utils_rigging.handle_joint_rotation_changed(1, [self.joint_rot_x_spin, self.joint_rot_y_spin, self.joint_rot_z_spin]))
|
|
||||||
if hasattr(self, 'joint_rot_z_spin'):
|
|
||||||
self.joint_rot_z_spin.valueChanged.connect(lambda val: utils_rigging.handle_joint_rotation_changed(2, [self.joint_rot_x_spin, self.joint_rot_y_spin, self.joint_rot_z_spin]))
|
|
||||||
|
|
||||||
# 关节缩放编辑
|
|
||||||
if hasattr(self, 'joint_scale_x_spin'):
|
|
||||||
self.joint_scale_x_spin.valueChanged.connect(lambda val: utils_rigging.handle_joint_scale_changed(0, [self.joint_scale_x_spin, self.joint_scale_y_spin, self.joint_scale_z_spin]))
|
|
||||||
if hasattr(self, 'joint_scale_y_spin'):
|
|
||||||
self.joint_scale_y_spin.valueChanged.connect(lambda val: utils_rigging.handle_joint_scale_changed(1, [self.joint_scale_x_spin, self.joint_scale_y_spin, self.joint_scale_z_spin]))
|
|
||||||
if hasattr(self, 'joint_scale_z_spin'):
|
|
||||||
self.joint_scale_z_spin.valueChanged.connect(lambda val: utils_rigging.handle_joint_scale_changed(2, [self.joint_scale_x_spin, self.joint_scale_y_spin, self.joint_scale_z_spin]))
|
|
||||||
|
|
||||||
# 关节属性应用和重置按钮
|
|
||||||
if "apply_joint_props_btn" in self.buttons:
|
|
||||||
pos_widgets = [self.joint_pos_x_spin, self.joint_pos_y_spin, self.joint_pos_z_spin] if all(hasattr(self, attr) for attr in ['joint_pos_x_spin', 'joint_pos_y_spin', 'joint_pos_z_spin']) else None
|
|
||||||
rot_widgets = [self.joint_rot_x_spin, self.joint_rot_y_spin, self.joint_rot_z_spin] if all(hasattr(self, attr) for attr in ['joint_rot_x_spin', 'joint_rot_y_spin', 'joint_rot_z_spin']) else None
|
|
||||||
scale_widgets = [self.joint_scale_x_spin, self.joint_scale_y_spin, self.joint_scale_z_spin] if all(hasattr(self, attr) for attr in ['joint_scale_x_spin', 'joint_scale_y_spin', 'joint_scale_z_spin']) else None
|
|
||||||
self.buttons["apply_joint_props_btn"].clicked.connect(lambda: utils_rigging.apply_joint_properties_from_ui(pos_widgets, rot_widgets, scale_widgets))
|
|
||||||
|
|
||||||
if "reset_joint_props_btn" in self.buttons:
|
|
||||||
pos_widgets = [self.joint_pos_x_spin, self.joint_pos_y_spin, self.joint_pos_z_spin] if all(hasattr(self, attr) for attr in ['joint_pos_x_spin', 'joint_pos_y_spin', 'joint_pos_z_spin']) else None
|
|
||||||
rot_widgets = [self.joint_rot_x_spin, self.joint_rot_y_spin, self.joint_rot_z_spin] if all(hasattr(self, attr) for attr in ['joint_rot_x_spin', 'joint_rot_y_spin', 'joint_rot_z_spin']) else None
|
|
||||||
scale_widgets = [self.joint_scale_x_spin, self.joint_scale_y_spin, self.joint_scale_z_spin] if all(hasattr(self, attr) for attr in ['joint_scale_x_spin', 'joint_scale_y_spin', 'joint_scale_z_spin']) else None
|
|
||||||
self.buttons["reset_joint_props_btn"].clicked.connect(lambda: utils_rigging.reset_joint_properties_ui(pos_widgets, rot_widgets, scale_widgets))
|
|
||||||
|
|
||||||
# 使用Maya的脚本任务来监听选择变化
|
|
||||||
ui_utils.connect_maya_selection_changed(self, utils_rigging.on_selection_changed)
|
|
||||||
|
|
||||||
#========================================== INIT ========================================
|
#========================================== INIT ========================================
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
"""
|
"""
|
||||||
@@ -153,7 +82,7 @@ class RiggingUI(ui_utils.BaseUI):
|
|||||||
# 初始化UI
|
# 初始化UI
|
||||||
self.create_widgets()
|
self.create_widgets()
|
||||||
self.create_layouts()
|
self.create_layouts()
|
||||||
self.connect_ui_signals()
|
self.create_connections()
|
||||||
|
|
||||||
#========================================= WIDGET =======================================
|
#========================================= WIDGET =======================================
|
||||||
def create_widgets(self):
|
def create_widgets(self):
|
||||||
@@ -709,4 +638,75 @@ class RiggingUI(ui_utils.BaseUI):
|
|||||||
|
|
||||||
# 设置分割器的伸缩因子
|
# 设置分割器的伸缩因子
|
||||||
for i in range(self.splitters["main_splitter"].count()):
|
for i in range(self.splitters["main_splitter"].count()):
|
||||||
self.splitters["main_splitter"].setStretchFactor(i, 1)
|
self.splitters["main_splitter"].setStretchFactor(i, 1)
|
||||||
|
|
||||||
|
#======================================= FUNCTIONS ======================================
|
||||||
|
def create_connections(self):
|
||||||
|
"""
|
||||||
|
连接UI信号和槽
|
||||||
|
设置UI控件的事件处理函数
|
||||||
|
"""
|
||||||
|
# 创建信号映射字典
|
||||||
|
signal_mapping = {
|
||||||
|
'buttons': {
|
||||||
|
'add_joint_btn': {'signal': 'clicked', 'handler': utils_rigging.add_joint},
|
||||||
|
'remove_joint_btn': {'signal': 'clicked', 'handler': utils_rigging.remove_joint},
|
||||||
|
'duplicate_joint_btn': {'signal': 'clicked', 'handler': utils_rigging.duplicate_joint},
|
||||||
|
'add_controller_btn': {'signal': 'clicked', 'handler': utils_rigging.add_controller},
|
||||||
|
'remove_controller_btn': {'signal': 'clicked', 'handler': utils_rigging.remove_controller},
|
||||||
|
'duplicate_controller_btn': {'signal': 'clicked', 'handler': utils_rigging.duplicate_controller},
|
||||||
|
'import_dna_btn': {'signal': 'clicked', 'handler': utils_rigging.import_dna},
|
||||||
|
'export_dna_btn': {'signal': 'clicked', 'handler': utils_rigging.export_dna},
|
||||||
|
'calibrate_dna_btn': {'signal': 'clicked', 'handler': utils_rigging.calibrate_dna},
|
||||||
|
},
|
||||||
|
'splitters': {
|
||||||
|
'main_splitter': {'signal': 'splitterMoved', 'handler': lambda pos, index: ui_utils.on_splitter_moved(self, pos, index)},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# 使用ui_utils中的通用函数连接信号
|
||||||
|
ui_utils.connect_ui_signals(self, signal_mapping)
|
||||||
|
|
||||||
|
# 连接关节属性编辑控件
|
||||||
|
if hasattr(self, 'joint_name_edit'):
|
||||||
|
self.joint_name_edit.editingFinished.connect(lambda: utils_rigging.handle_joint_name_changed(self.joint_name_edit))
|
||||||
|
|
||||||
|
# 关节位置编辑
|
||||||
|
if hasattr(self, 'joint_pos_x_spin'):
|
||||||
|
self.joint_pos_x_spin.valueChanged.connect(lambda val: utils_rigging.handle_joint_position_changed(0, [self.joint_pos_x_spin, self.joint_pos_y_spin, self.joint_pos_z_spin]))
|
||||||
|
if hasattr(self, 'joint_pos_y_spin'):
|
||||||
|
self.joint_pos_y_spin.valueChanged.connect(lambda val: utils_rigging.handle_joint_position_changed(1, [self.joint_pos_x_spin, self.joint_pos_y_spin, self.joint_pos_z_spin]))
|
||||||
|
if hasattr(self, 'joint_pos_z_spin'):
|
||||||
|
self.joint_pos_z_spin.valueChanged.connect(lambda val: utils_rigging.handle_joint_position_changed(2, [self.joint_pos_x_spin, self.joint_pos_y_spin, self.joint_pos_z_spin]))
|
||||||
|
|
||||||
|
# 关节旋转编辑
|
||||||
|
if hasattr(self, 'joint_rot_x_spin'):
|
||||||
|
self.joint_rot_x_spin.valueChanged.connect(lambda val: utils_rigging.handle_joint_rotation_changed(0, [self.joint_rot_x_spin, self.joint_rot_y_spin, self.joint_rot_z_spin]))
|
||||||
|
if hasattr(self, 'joint_rot_y_spin'):
|
||||||
|
self.joint_rot_y_spin.valueChanged.connect(lambda val: utils_rigging.handle_joint_rotation_changed(1, [self.joint_rot_x_spin, self.joint_rot_y_spin, self.joint_rot_z_spin]))
|
||||||
|
if hasattr(self, 'joint_rot_z_spin'):
|
||||||
|
self.joint_rot_z_spin.valueChanged.connect(lambda val: utils_rigging.handle_joint_rotation_changed(2, [self.joint_rot_x_spin, self.joint_rot_y_spin, self.joint_rot_z_spin]))
|
||||||
|
|
||||||
|
# 关节缩放编辑
|
||||||
|
if hasattr(self, 'joint_scale_x_spin'):
|
||||||
|
self.joint_scale_x_spin.valueChanged.connect(lambda val: utils_rigging.handle_joint_scale_changed(0, [self.joint_scale_x_spin, self.joint_scale_y_spin, self.joint_scale_z_spin]))
|
||||||
|
if hasattr(self, 'joint_scale_y_spin'):
|
||||||
|
self.joint_scale_y_spin.valueChanged.connect(lambda val: utils_rigging.handle_joint_scale_changed(1, [self.joint_scale_x_spin, self.joint_scale_y_spin, self.joint_scale_z_spin]))
|
||||||
|
if hasattr(self, 'joint_scale_z_spin'):
|
||||||
|
self.joint_scale_z_spin.valueChanged.connect(lambda val: utils_rigging.handle_joint_scale_changed(2, [self.joint_scale_x_spin, self.joint_scale_y_spin, self.joint_scale_z_spin]))
|
||||||
|
|
||||||
|
# 关节属性应用和重置按钮
|
||||||
|
if "apply_joint_props_btn" in self.buttons:
|
||||||
|
pos_widgets = [self.joint_pos_x_spin, self.joint_pos_y_spin, self.joint_pos_z_spin] if all(hasattr(self, attr) for attr in ['joint_pos_x_spin', 'joint_pos_y_spin', 'joint_pos_z_spin']) else None
|
||||||
|
rot_widgets = [self.joint_rot_x_spin, self.joint_rot_y_spin, self.joint_rot_z_spin] if all(hasattr(self, attr) for attr in ['joint_rot_x_spin', 'joint_rot_y_spin', 'joint_rot_z_spin']) else None
|
||||||
|
scale_widgets = [self.joint_scale_x_spin, self.joint_scale_y_spin, self.joint_scale_z_spin] if all(hasattr(self, attr) for attr in ['joint_scale_x_spin', 'joint_scale_y_spin', 'joint_scale_z_spin']) else None
|
||||||
|
self.buttons["apply_joint_props_btn"].clicked.connect(lambda: utils_rigging.apply_joint_properties_from_ui(pos_widgets, rot_widgets, scale_widgets))
|
||||||
|
|
||||||
|
if "reset_joint_props_btn" in self.buttons:
|
||||||
|
pos_widgets = [self.joint_pos_x_spin, self.joint_pos_y_spin, self.joint_pos_z_spin] if all(hasattr(self, attr) for attr in ['joint_pos_x_spin', 'joint_pos_y_spin', 'joint_pos_z_spin']) else None
|
||||||
|
rot_widgets = [self.joint_rot_x_spin, self.joint_rot_y_spin, self.joint_rot_z_spin] if all(hasattr(self, attr) for attr in ['joint_rot_x_spin', 'joint_rot_y_spin', 'joint_rot_z_spin']) else None
|
||||||
|
scale_widgets = [self.joint_scale_x_spin, self.joint_scale_y_spin, self.joint_scale_z_spin] if all(hasattr(self, attr) for attr in ['joint_scale_x_spin', 'joint_scale_y_spin', 'joint_scale_z_spin']) else None
|
||||||
|
self.buttons["reset_joint_props_btn"].clicked.connect(lambda: utils_rigging.reset_joint_properties_ui(pos_widgets, rot_widgets, scale_widgets))
|
||||||
|
|
||||||
|
# 使用Maya的脚本任务来监听选择变化
|
||||||
|
ui_utils.connect_maya_selection_changed(self, utils_rigging.on_selection_changed)
|
Reference in New Issue
Block a user