266 lines
9.1 KiB
Python
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 |