This commit is contained in:
2025-05-05 20:51:26 +08:00
parent f4f0c8196c
commit 37f772c919
2 changed files with 1531 additions and 17 deletions

View File

@@ -59,6 +59,252 @@ class RiggingUI(ui_utils.BaseUI):
绑定系统UI类 - 负责显示骨骼绑定编辑界面和基础操作
继承自BaseUI类实现绑定系统相关的UI功能
"""
#======================================= FUNCTIONS ======================================
def on_show_event(self, event):
"""
显示事件处理
当面板显示时重置分割器大小
"""
self.reset_splitter_sizes()
super(RiggingUI, self).showEvent(event)
def reset_splitter_sizes(self):
"""
重置分割器大小,确保左右栏宽度均等
"""
if self.splitters["main_splitter"]:
width = self.splitters["main_splitter"].width()
self.splitters["main_splitter"].setSizes([width // 2, width // 2])
def on_splitter_moved(self, pos, index):
"""
分割器移动事件处理
记录当前分割器位置
"""
utils_rigging.update_splitter_position(self.splitters["main_splitter"])
# 左侧面板 - 骨骼列表操作
def add_joint(self):
"""
添加关节
"""
utils_rigging.add_joint(self.controls["skeleton_list"])
def remove_joint(self):
"""
移除关节
"""
utils_rigging.remove_joint(self.controls["skeleton_list"])
def duplicate_joint(self):
"""
复制关节
"""
utils_rigging.duplicate_joint(self.controls["skeleton_list"])
def on_joint_selection_changed(self):
"""
关节选择变化事件
更新关节属性面板
"""
utils_rigging.update_joint_properties(
self.controls["skeleton_list"],
self.controls["joint_name_input"],
self.controls["joint_x_input"],
self.controls["joint_y_input"],
self.controls["joint_z_input"],
self.controls["joint_rx_input"],
self.controls["joint_ry_input"],
self.controls["joint_rz_input"],
self.controls["joint_sx_input"],
self.controls["joint_sy_input"],
self.controls["joint_sz_input"]
)
# 左侧面板 - 控制器列表操作
def add_controller(self):
"""
添加控制器
"""
utils_rigging.add_controller(self.controls["controller_list"])
def remove_controller(self):
"""
移除控制器
"""
utils_rigging.remove_controller(self.controls["controller_list"])
def duplicate_controller(self):
"""
复制控制器
"""
utils_rigging.duplicate_controller(self.controls["controller_list"])
def on_controller_selection_changed(self):
"""
控制器选择变化事件
更新控制器属性
"""
utils_rigging.update_controller_properties(self.controls["controller_list"])
# 右侧面板 - 关节属性
def on_joint_name_changed(self):
"""
关节名称变化事件
"""
utils_rigging.update_joint_name(
self.controls["skeleton_list"],
self.controls["joint_name_input"]
)
def on_joint_position_changed(self, axis):
"""
关节位置变化事件
"""
utils_rigging.update_joint_position(
self.controls["skeleton_list"],
axis,
self.controls[f"joint_{axis}_input"]
)
def on_joint_rotation_changed(self, axis):
"""
关节旋转变化事件
"""
utils_rigging.update_joint_rotation(
self.controls["skeleton_list"],
axis,
self.controls[f"joint_r{axis}_input"]
)
def on_joint_scale_changed(self, axis):
"""
关节缩放变化事件
"""
utils_rigging.update_joint_scale(
self.controls["skeleton_list"],
axis,
self.controls[f"joint_s{axis}_input"]
)
def apply_joint_properties(self):
"""
应用关节属性
"""
utils_rigging.apply_joint_properties(
self.controls["skeleton_list"],
self.controls["joint_name_input"],
self.controls["joint_x_input"],
self.controls["joint_y_input"],
self.controls["joint_z_input"],
self.controls["joint_rx_input"],
self.controls["joint_ry_input"],
self.controls["joint_rz_input"],
self.controls["joint_sx_input"],
self.controls["joint_sy_input"],
self.controls["joint_sz_input"]
)
def reset_joint_properties(self):
"""
重置关节属性
"""
utils_rigging.reset_joint_properties(
self.controls["skeleton_list"],
self.controls["joint_name_input"],
self.controls["joint_x_input"],
self.controls["joint_y_input"],
self.controls["joint_z_input"],
self.controls["joint_rx_input"],
self.controls["joint_ry_input"],
self.controls["joint_rz_input"],
self.controls["joint_sx_input"],
self.controls["joint_sy_input"],
self.controls["joint_sz_input"]
)
# 右侧面板 - 绑定工具
def create_binding(self):
"""
创建绑定
"""
utils_rigging.create_binding()
def copy_skin(self):
"""
复制蒙皮
"""
utils_rigging.copy_skin()
def mirror_skin(self):
"""
镜像蒙皮
"""
utils_rigging.mirror_skin()
def paint_weights(self):
"""
绘制权重
"""
utils_rigging.paint_weights()
# 底部工具面板 - DNA操作
def import_dna(self):
"""
导入DNA
"""
utils_rigging.import_dna()
def export_dna(self):
"""
导出DNA
"""
utils_rigging.export_dna()
def calibrate_dna(self):
"""
校准DNA
"""
utils_rigging.calibrate_dna()
# 底部工具面板 - 骨骼工具
def import_skeleton(self):
"""
导入骨骼
"""
utils_rigging.import_skeleton()
def export_skeleton(self):
"""
导出骨骼
"""
utils_rigging.export_skeleton()
def calibrate_skeleton(self):
"""
校准骨骼
"""
utils_rigging.calibrate_skeleton()
# 底部工具面板 - 绑定工具
def generate_controllers(self):
"""
生成控制器
"""
utils_rigging.generate_controllers()
def generate_body(self):
"""
生成身体
"""
utils_rigging.generate_body()
def clean_rigging(self):
"""
清理绑定
"""
utils_rigging.clean_rigging()
#========================================== INIT ========================================
def __init__(self):
"""
@@ -529,18 +775,60 @@ class RiggingUI(ui_utils.BaseUI):
#======================================= CONNECTION =====================================
def create_connections(self):
"""
连接信号和槽
设置UI控件的交互行为
创建绑定系统UI信号和槽连接
将按钮点击等事件与相应的处理函数连接
"""
# DNA浏览器按钮连接
self.buttons["refresh_dna"].clicked.connect(utils_rigging.rigging_temp_utils_function)
# 左侧面板 - 骨骼列表操作
self.buttons["add_joint"].clicked.connect(self.add_joint)
self.buttons["remove_joint"].clicked.connect(self.remove_joint)
self.buttons["duplicate_joint"].clicked.connect(self.duplicate_joint)
self.controls["skeleton_list"].itemSelectionChanged.connect(self.on_joint_selection_changed)
# DNA操作按钮连接
self.buttons["import_skeleton"].clicked.connect(utils_rigging.rigging_temp_utils_function)
self.buttons["generate_body"].clicked.connect(utils_rigging.rigging_temp_utils_function)
self.buttons["calibrate_dna"].clicked.connect(utils_rigging.rigging_temp_utils_function)
# 左侧面板 - 控制器列表操作
self.buttons["add_controller"].clicked.connect(self.add_controller)
self.buttons["remove_controller"].clicked.connect(self.remove_controller)
self.buttons["duplicate_controller"].clicked.connect(self.duplicate_controller)
self.controls["controller_list"].itemSelectionChanged.connect(self.on_controller_selection_changed)
# 骨骼操作按钮连接
self.buttons["calibrate_skeleton"].clicked.connect(utils_rigging.rigging_temp_utils_function)
self.buttons["create_binding"].clicked.connect(utils_rigging.rigging_temp_utils_function)
self.buttons["copy_skin"].clicked.connect(utils_rigging.rigging_temp_utils_function)
# 右侧面板 - 关节属性
self.buttons["apply_joint_properties"].clicked.connect(self.apply_joint_properties)
self.buttons["reset_joint_properties"].clicked.connect(self.reset_joint_properties)
# 坐标输入框修改事件
self.controls["joint_name_input"].textChanged.connect(self.on_joint_name_changed)
self.controls["joint_x_input"].textChanged.connect(lambda: self.on_joint_position_changed("x"))
self.controls["joint_y_input"].textChanged.connect(lambda: self.on_joint_position_changed("y"))
self.controls["joint_z_input"].textChanged.connect(lambda: self.on_joint_position_changed("z"))
self.controls["joint_rx_input"].textChanged.connect(lambda: self.on_joint_rotation_changed("x"))
self.controls["joint_ry_input"].textChanged.connect(lambda: self.on_joint_rotation_changed("y"))
self.controls["joint_rz_input"].textChanged.connect(lambda: self.on_joint_rotation_changed("z"))
self.controls["joint_sx_input"].textChanged.connect(lambda: self.on_joint_scale_changed("x"))
self.controls["joint_sy_input"].textChanged.connect(lambda: self.on_joint_scale_changed("y"))
self.controls["joint_sz_input"].textChanged.connect(lambda: self.on_joint_scale_changed("z"))
# 右侧面板 - 绑定工具
self.buttons["create_binding"].clicked.connect(self.create_binding)
self.buttons["copy_skin"].clicked.connect(self.copy_skin)
self.buttons["mirror_skin"].clicked.connect(self.mirror_skin)
self.buttons["paint_weights"].clicked.connect(self.paint_weights)
# 底部工具面板 - DNA操作
self.buttons["import_dna"].clicked.connect(self.import_dna)
self.buttons["export_dna"].clicked.connect(self.export_dna)
self.buttons["calibrate_dna"].clicked.connect(self.calibrate_dna)
# 底部工具面板 - 骨骼工具
self.buttons["import_skeleton"].clicked.connect(self.import_skeleton)
self.buttons["export_skeleton"].clicked.connect(self.export_skeleton)
self.buttons["calibrate_skeleton"].clicked.connect(self.calibrate_skeleton)
# 底部工具面板 - 绑定工具
self.buttons["generate_controllers"].clicked.connect(self.generate_controllers)
self.buttons["generate_body"].clicked.connect(self.generate_body)
self.buttons["clean_rigging"].clicked.connect(self.clean_rigging)
# 分割器移动事件
self.splitters["main_splitter"].splitterMoved.connect(self.on_splitter_moved)
# 添加显示事件处理
self.showEvent = self.on_show_event

File diff suppressed because it is too large Load Diff