MetaFusion/scripts/ui/rigging.py
2025-02-09 23:22:48 +08:00

266 lines
9.1 KiB
Python

#!/usr/bin/env python
# -*- coding: utf-8 -*-
#===================================== 1. Module Imports =====================================
import maya.OpenMayaUI as omui
from scripts import config
import maya.cmds as cmds
import maya.mel as mel
import webbrowser
import sys
import os
from scripts import config
try:
from PySide2 import QtCore, QtGui, QtWidgets
from shiboken2 import wrapInstance
print("从PySide2加载Qt和shiboken2")
except ImportError:
try:
from PySide6 import QtCore, QtGui, QtWidgets
from shiboken6 import wrapInstance
print("从PySide6加载Qt和shiboken6")
except ImportError:
try:
from PySide import QtCore, QtGui, QtWidgets
from shiboken import wrapInstance
print("从PySide加载Qt和shiboken")
except ImportError as e:
print(f"Qt加载失败: {str(e)}")
QtCore = QtGui = QtWidgets = None
wrapInstance = None
class RiggingTab(QtWidgets.QWidget):
def __init__(self, parent=None):
super(RiggingTab, self).__init__(parent)
self._setup_ui()
self._create_connections()
def _setup_ui(self):
"""设置UI布局"""
# === Main Layout ===
self.main_layout = QtWidgets.QHBoxLayout(self)
self.main_layout.setContentsMargins(2, 2, 2, 2)
self.main_layout.setSpacing(2)
# 创建左右两个主面板
self.dna_browser_widget = self._create_dna_browser()
self.asset_settings_widget = self._create_asset_settings()
# 设置左右比例为1:1
self.main_layout.addWidget(self.dna_browser_widget, 1)
self.main_layout.addWidget(self.asset_settings_widget, 1)
def _create_dna_browser(self):
"""创建DNA预设浏览器"""
# === Widget ===
widget = QtWidgets.QWidget()
# === Layout ===
layout = QtWidgets.QVBoxLayout(widget)
layout.setContentsMargins(5, 5, 5, 5)
layout.setSpacing(5)
# 预设网格视图
self.preset_view = QtWidgets.QListWidget()
self.preset_view.setViewMode(QtWidgets.QListView.IconMode)
self.preset_view.setIconSize(QtCore.QSize(90, 90))
self.preset_view.setSpacing(10)
self.preset_view.setResizeMode(QtWidgets.QListView.Adjust)
self.preset_view.setMovement(QtWidgets.QListView.Static)
self.preset_view.setWrapping(True)
layout.addWidget(self.preset_view)
# 缩放控制
zoom_widget = QtWidgets.QWidget()
zoom_layout = QtWidgets.QHBoxLayout(zoom_widget)
zoom_layout.setContentsMargins(0, 0, 0, 0)
zoom_label = QtWidgets.QLabel("缩放:")
self.zoom_slider = QtWidgets.QSlider(QtCore.Qt.Horizontal)
self.zoom_slider.setMinimum(60)
self.zoom_slider.setMaximum(200)
self.zoom_slider.setValue(90)
self.zoom_value_label = QtWidgets.QLabel("90")
zoom_layout.addWidget(zoom_label)
zoom_layout.addWidget(self.zoom_slider)
zoom_layout.addWidget(self.zoom_value_label)
layout.addWidget(zoom_widget)
# 导入/导出按钮
button_widget = QtWidgets.QWidget()
button_layout = QtWidgets.QHBoxLayout(button_widget)
button_layout.setContentsMargins(0, 0, 0, 0)
self.import_btn = QtWidgets.QPushButton("导入设置")
self.export_btn = QtWidgets.QPushButton("导出设置")
button_layout.addWidget(self.import_btn)
button_layout.addWidget(self.export_btn)
layout.addWidget(button_widget)
return widget
def _create_asset_settings(self):
"""创建资产设置面板"""
# === Widget ===
widget = QtWidgets.QWidget()
# === Layout ===
layout = QtWidgets.QVBoxLayout(widget)
layout.setContentsMargins(5, 5, 5, 5)
layout.setSpacing(5)
# 项目路径设置
self.project_group = self._create_project_settings()
layout.addWidget(self.project_group)
# 数据分层选项
self.layer_group = self._create_layer_settings()
layout.addWidget(self.layer_group)
# 描述设置
self.desc_group = self._create_description_settings()
layout.addWidget(self.desc_group)
layout.addStretch()
return widget
def _create_project_settings(self):
"""创建项目设置组"""
# === Widget ===
group = QtWidgets.QGroupBox("项目设置")
# === Layout ===
layout = QtWidgets.QFormLayout(group)
layout.setContentsMargins(5, 5, 5, 5)
layout.setSpacing(5)
# 项目路径
path_widget = QtWidgets.QWidget()
path_layout = QtWidgets.QHBoxLayout(path_widget)
path_layout.setContentsMargins(0, 0, 0, 0)
self.project_path = QtWidgets.QLineEdit()
self.browse_project_btn = QtWidgets.QPushButton("浏览...")
self.browse_project_btn.setFixedWidth(60)
path_layout.addWidget(self.project_path)
path_layout.addWidget(self.browse_project_btn)
layout.addRow("项目路径:", path_widget)
# 预设文件
preset_widget = QtWidgets.QWidget()
preset_layout = QtWidgets.QHBoxLayout(preset_widget)
preset_layout.setContentsMargins(0, 0, 0, 0)
self.preset_path = QtWidgets.QLineEdit()
self.browse_preset_btn = QtWidgets.QPushButton("浏览...")
self.browse_preset_btn.setFixedWidth(60)
preset_layout.addWidget(self.preset_path)
preset_layout.addWidget(self.browse_preset_btn)
layout.addRow("预设文件:", preset_widget)
return group
def _create_layer_settings(self):
"""创建数据分层设置组"""
# === Widget ===
group = QtWidgets.QGroupBox("数据分层")
# === Layout ===
layout = QtWidgets.QVBoxLayout(group)
layout.setContentsMargins(5, 5, 5, 5)
layout.setSpacing(5)
self.behavior_check = QtWidgets.QCheckBox("行为(包括描述和定义)")
self.expression_check = QtWidgets.QCheckBox("覆盖表情选项")
layout.addWidget(self.behavior_check)
layout.addWidget(self.expression_check)
return group
def _create_description_settings(self):
"""创建描述设置组"""
# === Widget ===
group = QtWidgets.QGroupBox("描述设置")
# === Layout ===
layout = QtWidgets.QFormLayout(group)
layout.setContentsMargins(5, 5, 5, 5)
layout.setSpacing(5)
# 创建设置项
self.name_edit = QtWidgets.QLineEdit("Archetype")
self.type_combo = QtWidgets.QComboBox()
self.type_combo.addItem("其他")
self.gender_combo = QtWidgets.QComboBox()
self.gender_combo.addItem("女性")
self.age_spin = QtWidgets.QSpinBox()
self.age_spin.setValue(24)
self.transform_combo = QtWidgets.QComboBox()
self.transform_combo.addItem("厘米")
self.rotation_combo = QtWidgets.QComboBox()
self.rotation_combo.addItem("角度")
self.up_axis_combo = QtWidgets.QComboBox()
self.up_axis_combo.addItem("Z轴向上")
self.lod_spin = QtWidgets.QSpinBox()
self.lod_spin.setValue(8)
# 添加到布局
layout.addRow("名称:", self.name_edit)
layout.addRow("原型:", self.type_combo)
layout.addRow("性别:", self.gender_combo)
layout.addRow("年龄:", self.age_spin)
layout.addRow("变换单位:", self.transform_combo)
layout.addRow("旋转单位:", self.rotation_combo)
layout.addRow("向上轴标:", self.up_axis_combo)
layout.addRow("LOD计数:", self.lod_spin)
return group
def _create_connections(self):
"""创建信号连接"""
# 缩放滑块
self.zoom_slider.valueChanged.connect(self._on_zoom_changed)
# 导入导出按钮
self.import_btn.clicked.connect(self._on_import)
self.export_btn.clicked.connect(self._on_export)
# 浏览按钮
self.browse_project_btn.clicked.connect(self._on_browse_project)
self.browse_preset_btn.clicked.connect(self._on_browse_preset)
def _on_zoom_changed(self, value):
"""缩放值改变"""
self.zoom_value_label.setText(str(value))
self.preset_view.setIconSize(QtCore.QSize(value, value))
def _on_import(self):
"""导入设置"""
# TODO: 实现导入逻辑
pass
def _on_export(self):
"""导出设置"""
# TODO: 实现导出逻辑
pass
def _on_browse_project(self):
"""浏览项目路径"""
# TODO: 实现浏览逻辑
pass
def _on_browse_preset(self):
"""浏览预设文件"""
# TODO: 实现浏览逻辑
pass
if __name__ == "__main__":
pass