Update
This commit is contained in:
parent
b1e9964e1a
commit
02bc3822af
@ -1,47 +1,42 @@
|
|||||||
---
|
---
|
||||||
description: ProjectRule
|
description: ProjectRule
|
||||||
globs: json
|
globs: md
|
||||||
---
|
---
|
||||||
|
Always respond in 中文,
|
||||||
|
|
||||||
先阅读知识库,并按照 Readme.md 来查看文件路径以及参考品文档和参考代码来协助用户完成项目
|
先阅读知识库,并按照 Readme.md 来查看文件路径以及参考品文档和参考代码来协助用户完成项目
|
||||||
|
|
||||||
# 代码规则
|
|
||||||
|
|
||||||
- 代码必须考虑兼容 Maya2018, Maya2018, Maya2020,Maya2022, Maya2023, Maya2024, Maya2025
|
|
||||||
- 代码必须考虑兼容 Python3.10, Python3.11, Python3.10.8 等其他不同的版本
|
|
||||||
- 所有模块引用关系自动更新修正
|
|
||||||
- 所有UI必须使用Qt来实现
|
|
||||||
- 所有Pyside代码必须使用 widget, layout, connection 的结构来实现
|
|
||||||
- 使用scripts\config.py文件来统一实现配置文件
|
|
||||||
- 使用scripts\ui\style.qss文件来实现UI样式
|
|
||||||
- 功能函数放在scripts\utils文件夹中
|
|
||||||
- 文件夹结构尽量以目前的代码结构来触发实现,各个模块各功能给要条理清晰
|
|
||||||
|
|
||||||
# MetaFusion 开发文档
|
# MetaFusion 开发文档
|
||||||
|
|
||||||
## 一 本地知识库导航
|
## 一 本地知识库导航
|
||||||
|
|
||||||
### 1 文档
|
### 1 文档
|
||||||
|
|
||||||
- [Metahuman解析](mdc:docs/Metahuman解析.md)
|
Reference\docs\Metahuman解析.pdf
|
||||||
- [SuperRigging解析](mdc:Reference/docs/SuperRigging解析.pdf)
|
Reference\docs\SuperRiggingEditor使用文档.pdf
|
||||||
- [DNA_Calibration 文档](mdc:Reference/docs/DNA_Calibration.pdf)
|
Reference\DNA_Calibration\docs\dna_api.md
|
||||||
- [DNA_Calibration在线文档](mdc:https:/epicgames.github.io/MetaHuman-DNA-Calibration)
|
Reference\DNA_Calibration\docs\dna_viewer_api_build_meshes.md
|
||||||
- [Metahuman解析](mdc:Reference/docs/Metahuman解析.pdf)
|
Reference\DNA_Calibration\docs\dna_viewer_api_build_rig.md
|
||||||
- [SuperRiggingEditor使用文档](mdc:Reference/docs/SuperRiggingEditor使用文档.pdf)
|
Reference\DNA_Calibration\docs\dna_viewer_API.md
|
||||||
|
Reference\DNA_Calibration\docs\dna_viewer_maya.md
|
||||||
|
Reference\DNA_Calibration\docs\dna_viewer.md
|
||||||
|
Reference\DNA_Calibration\docs\dna.md
|
||||||
|
Reference\DNA_Calibration\docs\dnacalib_api.md
|
||||||
|
Reference\DNA_Calibration\docs\dnacalib.md
|
||||||
|
Reference\DNA_Calibration\docs\faq.md
|
||||||
|
Reference\DNA_Calibration\docs\repository_organization.md
|
||||||
|
DNA_Calibration在线文档: https://epicgames.github.io/MetaHuman-DNA-Calibration
|
||||||
|
|
||||||
### 2 代码参考
|
### 2 代码参考
|
||||||
|
|
||||||
- [Metahuman](mdc:Reference/Metahuman)
|
Reference\DNA_Calibration
|
||||||
- [SuperRigging](mdc:Reference/SuperRigging)
|
Reference\MSLiveLink
|
||||||
- [MSLiveLink](mdc:Reference/MSLiveLink)
|
Reference\SuperRiggingEditor
|
||||||
- [DNA_Calibration](mdc:Reference/DNA_Calibration)
|
Reference\Utils
|
||||||
- [功能实现参考](mdc:Reference/Utils)
|
|
||||||
|
|
||||||
### 3 UI参考
|
### 3 UI参考图片
|
||||||
|
|
||||||
- [UI参考图片](mdc:Reference/UI)
|
Reference\UI
|
||||||
|
|
||||||
## 二 项目描述
|
## 二 项目描述
|
||||||
|
|
||||||
@ -91,8 +86,7 @@ globs: json
|
|||||||
│ ├── dna\ DNA文件路径
|
│ ├── dna\ DNA文件路径
|
||||||
│ ├── img\ DNA图标路径
|
│ ├── img\ DNA图标路径
|
||||||
│ ├── maya\ Maya资源文件路径
|
│ ├── maya\ Maya资源文件路径
|
||||||
│ ├── MH.2\ MetaHuman 2.0文件路径
|
│ ├── MH.2\ MetaHuman 2.\ MetaHuman 4.0文件路径
|
||||||
│ ├── MH.4\ MetaHuman 4.0文件路径
|
|
||||||
├── icons\ 插件图标路径
|
├── icons\ 插件图标路径
|
||||||
├── plugins\
|
├── plugins\
|
||||||
│ └── Linux\
|
│ └── Linux\
|
||||||
@ -150,7 +144,12 @@ globs: json
|
|||||||
│ ├── ui\
|
│ ├── ui\
|
||||||
│ │ ├── __init__.py
|
│ │ ├── __init__.py
|
||||||
│ │ ├── style.qss UI样式文件
|
│ │ ├── style.qss UI样式文件
|
||||||
│ │ ├── main.ui UI主界面UI文件
|
│ │ ├── menu.py UI菜单UI文件
|
||||||
|
│ │ ├── toolshelf.py UI工具架UI文件
|
||||||
|
│ │ ├── meshes.py UI模型UI文件
|
||||||
|
│ │ ├── rigging.py UI绑定UI文件
|
||||||
|
│ │ ├── behaviour.py UI行为UI文件
|
||||||
|
│ │ ├── definition.py UI定义UI文件
|
||||||
│ ├── utils\ 功能模块路径
|
│ ├── utils\ 功能模块路径
|
||||||
│ │ ├── __init__.py
|
│ │ ├── __init__.py
|
||||||
│ │ ├── ...
|
│ │ ├── ...
|
||||||
@ -176,9 +175,23 @@ globs: json
|
|||||||
- 输入框要统一
|
- 输入框要统一
|
||||||
- 标签要统一
|
- 标签要统一
|
||||||
|
|
||||||
### 7 UI界面
|
### 7 UI界面ce\UI\01_Menu_File.jpg
|
||||||
|
Reference\UI\02_Menu_Edit.jpg
|
||||||
- 参考[MetaFusion UI 结构](mdc:#metafusion-ui-结构)
|
Reference\UI\03_Menu_Tools.jpg
|
||||||
|
Reference\UI\04_Language.jpg
|
||||||
|
Reference\UI\05_Menu_Help.jpg
|
||||||
|
Reference\UI\06_Tool_Shelf.jpg
|
||||||
|
Reference\UI\07_Meshes_LOD0.jpg
|
||||||
|
Reference\UI\08_Meshes_LOD1.jpg
|
||||||
|
Reference\UI\09_Meshes_LOD2.jpg
|
||||||
|
Reference\UI\10_Meshes_LOD3.jpg
|
||||||
|
Reference\UI\11_Meshes_LOD4.jpg
|
||||||
|
Reference\UI\12_Meshes_LOD5.jpg
|
||||||
|
Reference\UI\13_Meshes_LOD6.jpg
|
||||||
|
Reference\UI\14_Meshes_LOD7.jpg
|
||||||
|
Reference\UI\15_Rigging.jpg
|
||||||
|
Reference\UI\16_Behaviour.jpg
|
||||||
|
Reference\UI\17_Definitions.jpg
|
||||||
|
|
||||||
#### MetaFusion UI 结构
|
#### MetaFusion UI 结构
|
||||||
|
|
||||||
@ -236,11 +249,27 @@ globs: json
|
|||||||
- 帮助文档 | icons\help.png
|
- 帮助文档 | icons\help.png
|
||||||
- 关于 | icons\about.png
|
- 关于 | icons\about.png
|
||||||
|
|
||||||
##### 二、主界面功能区
|
##### 二、工具架 横向排列
|
||||||
|
|
||||||
|
- 保存 DNA | icons\save.png
|
||||||
|
- 加载当前项目 DNA | icons\open.png
|
||||||
|
- 分隔符 separator
|
||||||
|
- 创建RL4节点 | icons\connect.png
|
||||||
|
- 删除RL4节点 | icons\disconnect.png
|
||||||
|
- 分隔符 separator
|
||||||
|
- 导出 蒙皮 | icons\export_skin.png
|
||||||
|
- 导入 蒙皮 | icons\import_skin.png
|
||||||
|
- 复制 蒙皮 | icons\copy_skin.png
|
||||||
|
- 分隔符 separator
|
||||||
|
- 帮助文档 | icons\help.png
|
||||||
|
- 关于 | icons\about.png
|
||||||
|
|
||||||
|
##### 三、主界面功能区
|
||||||
|
|
||||||
###### 1. 模型视图 (Meshes)
|
###### 1. 模型视图 (Meshes)
|
||||||
|
|
||||||
####### LOD选项卡 (LOD0-LOD7)
|
####### LOD选项卡 (LOD0-LOD7)
|
||||||
|
|
||||||
每个LOD包含以下模型项:
|
每个LOD包含以下模型项:
|
||||||
|
|
||||||
- LOD0: ["*头部", "*牙齿", "*牙龈", "*左眼", "*右眼", "*虹膜", "*睫毛", "*眼睑", "*软骨", "*身体"]
|
- LOD0: ["*头部", "*牙齿", "*牙龈", "*左眼", "*右眼", "*虹膜", "*睫毛", "*眼睑", "*软骨", "*身体"]
|
||||||
@ -252,6 +281,71 @@ globs: json
|
|||||||
- LOD6: ["头部", "牙齿", "左眼", "右眼"]
|
- LOD6: ["头部", "牙齿", "左眼", "右眼"]
|
||||||
- LOD7: ["头部", "牙齿", "左眼", "右眼"]
|
- LOD7: ["头部", "牙齿", "左眼", "右眼"]
|
||||||
|
|
||||||
|
####### 功能按钮
|
||||||
|
|
||||||
|
1. 自动选择模型
|
||||||
|
- 功能:根据当前LOD级别自动选择对应的模型组件
|
||||||
|
- 使用场景:快速选择特定LOD级别下的所有相关模型
|
||||||
|
|
||||||
|
2. 标准化命名
|
||||||
|
- 功能:将选中模型重命名为标准命名格式
|
||||||
|
- 使用场景:确保模型命名符合项目规范
|
||||||
|
|
||||||
|
3. 自动分组
|
||||||
|
- 功能:根据模型类型自动创建和整理分组
|
||||||
|
- 使用场景:快速组织和管理模型层级结构
|
||||||
|
|
||||||
|
####### 工具栏功能
|
||||||
|
|
||||||
|
1. 模型显示控制
|
||||||
|
- 切换模型显示/隐藏
|
||||||
|
- 透明度调节
|
||||||
|
- 线框模式切换
|
||||||
|
|
||||||
|
2. LOD选择工具
|
||||||
|
- LOD级别快速切换
|
||||||
|
- 多级别对比视图
|
||||||
|
- 模型细节程度预览
|
||||||
|
|
||||||
|
3. 辅助功能
|
||||||
|
- 模型分离与合并
|
||||||
|
- 顶点/面数统计
|
||||||
|
- 模型检查与修复
|
||||||
|
|
||||||
|
####### 右侧工具面板
|
||||||
|
|
||||||
|
1. 添加功能
|
||||||
|
- 为每个模型类别提供快速添加功能
|
||||||
|
- 支持拖拽导入
|
||||||
|
- 批量导入支持
|
||||||
|
|
||||||
|
2. 模型属性编辑
|
||||||
|
- 材质分配
|
||||||
|
- UV设置
|
||||||
|
- 变形器设置
|
||||||
|
|
||||||
|
3. 高级功能
|
||||||
|
- 模型优化建议
|
||||||
|
- LOD自动生成
|
||||||
|
- 网格简化工具
|
||||||
|
|
||||||
|
####### 注意事项
|
||||||
|
|
||||||
|
1. 模型命名规则
|
||||||
|
- 所有模型必须遵循标准命名规范
|
||||||
|
- LOD0级别模型名称前需添加"*"标记
|
||||||
|
- 确保命名无特殊字符
|
||||||
|
|
||||||
|
2. 模型层级要求
|
||||||
|
- 保持正确的层级关系
|
||||||
|
- 避免深层嵌套
|
||||||
|
- 确保正确的父子关系
|
||||||
|
|
||||||
|
3. 性能优化建议
|
||||||
|
- 根据实际需求选择合适的LOD级别
|
||||||
|
- 注意模型面数控制
|
||||||
|
- 合理使用材质和贴图
|
||||||
|
|
||||||
###### 2. 绑定视图 (Rigging)
|
###### 2. 绑定视图 (Rigging)
|
||||||
|
|
||||||
####### DNA预设浏览器
|
####### DNA预设浏览器
|
||||||
@ -368,4 +462,4 @@ globs: json
|
|||||||
- Unbind Skin For Mesh
|
- Unbind Skin For Mesh
|
||||||
- Tools:
|
- Tools:
|
||||||
- New Neutral Joint Transform
|
- New Neutral Joint Transform
|
||||||
- Quickly Create Presets```
|
- Quickly Create Presets
|
||||||
|
3
.gitignore
vendored
3
.gitignore
vendored
@ -38,5 +38,4 @@
|
|||||||
/.idea
|
/.idea
|
||||||
/output
|
/output
|
||||||
|
|
||||||
/Reference
|
/Reference
|
||||||
/Notes
|
|
60
README.md
60
README.md
@ -8,25 +8,31 @@
|
|||||||
|
|
||||||
### 1 文档
|
### 1 文档
|
||||||
|
|
||||||
- [Metahuman解析](./docs/Metahuman解析.md)
|
Reference\docs\Metahuman解析.pdf
|
||||||
- [SuperRigging解析](./Reference/docs/SuperRigging解析.pdf)
|
Reference\docs\SuperRiggingEditor使用文档.pdf
|
||||||
- [DNA_Calibration 文档](./Reference/docs/DNA_Calibration.pdf)
|
Reference\DNA_Calibration\docs\dna_api.md
|
||||||
- [DNA_Calibration在线文档](https://epicgames.github.io/MetaHuman-DNA-Calibration/)
|
Reference\DNA_Calibration\docs\dna_viewer_api_build_meshes.md
|
||||||
- [Metahuman解析](./Reference/docs/Metahuman解析.pdf)
|
Reference\DNA_Calibration\docs\dna_viewer_api_build_rig.md
|
||||||
- [SuperRiggingEditor使用文档](./Reference/docs/SuperRiggingEditor使用文档.pdf)
|
Reference\DNA_Calibration\docs\dna_viewer_API.md
|
||||||
|
Reference\DNA_Calibration\docs\dna_viewer_maya.md
|
||||||
|
Reference\DNA_Calibration\docs\dna_viewer.md
|
||||||
|
Reference\DNA_Calibration\docs\dna.md
|
||||||
|
Reference\DNA_Calibration\docs\dnacalib_api.md
|
||||||
|
Reference\DNA_Calibration\docs\dnacalib.md
|
||||||
|
Reference\DNA_Calibration\docs\faq.md
|
||||||
|
Reference\DNA_Calibration\docs\repository_organization.md
|
||||||
|
DNA_Calibration在线文档: https://epicgames.github.io/MetaHuman-DNA-Calibration
|
||||||
|
|
||||||
### 2 代码参考
|
### 2 代码参考
|
||||||
|
|
||||||
- [Metahuman](./Reference/Metahuman)
|
Reference\DNA_Calibration
|
||||||
- [SuperRigging](./Reference/SuperRigging)
|
Reference\MSLiveLink
|
||||||
- [MSLiveLink](./Reference/MSLiveLink)
|
Reference\SuperRiggingEditor
|
||||||
- [DNA_Calibration](./Reference/DNA_Calibration)
|
Reference\Utils
|
||||||
- [功能实现参考](./Reference/Utils)
|
|
||||||
|
|
||||||
### 3 UI参考
|
### 3 UI参考图片
|
||||||
|
|
||||||
- [UI参考图片](./Reference/UI)
|
Reference\UI
|
||||||
|
|
||||||
## 二 项目描述
|
## 二 项目描述
|
||||||
|
|
||||||
@ -135,7 +141,12 @@
|
|||||||
│ ├── ui\
|
│ ├── ui\
|
||||||
│ │ ├── __init__.py
|
│ │ ├── __init__.py
|
||||||
│ │ ├── style.qss UI样式文件
|
│ │ ├── style.qss UI样式文件
|
||||||
│ │ ├── main.ui UI主界面UI文件
|
│ │ ├── menu.py UI菜单UI文件
|
||||||
|
│ │ ├── toolshelf.py UI工具架UI文件
|
||||||
|
│ │ ├── meshes.py UI模型UI文件
|
||||||
|
│ │ ├── rigging.py UI绑定UI文件
|
||||||
|
│ │ ├── behaviour.py UI行为UI文件
|
||||||
|
│ │ ├── definition.py UI定义UI文件
|
||||||
│ ├── utils\ 功能模块路径
|
│ ├── utils\ 功能模块路径
|
||||||
│ │ ├── __init__.py
|
│ │ ├── __init__.py
|
||||||
│ │ ├── ...
|
│ │ ├── ...
|
||||||
@ -163,7 +174,24 @@
|
|||||||
|
|
||||||
### 7 UI界面
|
### 7 UI界面
|
||||||
|
|
||||||
- 参考[MetaFusion UI 结构](#metafusion-ui-结构)
|
UI参考图片:
|
||||||
|
Reference\UI\01_Menu_File.jpg
|
||||||
|
Reference\UI\02_Menu_Edit.jpg
|
||||||
|
Reference\UI\03_Menu_Tools.jpg
|
||||||
|
Reference\UI\04_Language.jpg
|
||||||
|
Reference\UI\05_Menu_Help.jpg
|
||||||
|
Reference\UI\06_Tool_Shelf.jpg
|
||||||
|
Reference\UI\07_Meshes_LOD0.jpg
|
||||||
|
Reference\UI\08_Meshes_LOD1.jpg
|
||||||
|
Reference\UI\09_Meshes_LOD2.jpg
|
||||||
|
Reference\UI\10_Meshes_LOD3.jpg
|
||||||
|
Reference\UI\11_Meshes_LOD4.jpg
|
||||||
|
Reference\UI\12_Meshes_LOD5.jpg
|
||||||
|
Reference\UI\13_Meshes_LOD6.jpg
|
||||||
|
Reference\UI\14_Meshes_LOD7.jpg
|
||||||
|
Reference\UI\15_Rigging.jpg
|
||||||
|
Reference\UI\16_Behaviour.jpg
|
||||||
|
Reference\UI\17_Definitions.jpg
|
||||||
|
|
||||||
#### MetaFusion UI 结构
|
#### MetaFusion UI 结构
|
||||||
|
|
||||||
|
@ -1,2 +1,89 @@
|
|||||||
#!/usr/bin/env python
|
#!/usr/bin/env python
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
import os
|
||||||
|
import sys
|
||||||
|
from maya import cmds
|
||||||
|
import maya.OpenMayaUI as omui
|
||||||
|
from PySide2 import QtWidgets, QtCore
|
||||||
|
from shiboken2 import wrapInstance
|
||||||
|
|
||||||
|
from . import config
|
||||||
|
from .ui import menu, toolshelf
|
||||||
|
from .utils import maya_utils
|
||||||
|
|
||||||
|
class MetaFusion(QtWidgets.QMainWindow):
|
||||||
|
def __init__(self, parent=None):
|
||||||
|
super(MetaFusion, self).__init__(parent)
|
||||||
|
|
||||||
|
# 设置窗口标题和基本属性
|
||||||
|
self.setWindowTitle("MetaFusion")
|
||||||
|
self.setMinimumSize(1200, 800)
|
||||||
|
|
||||||
|
# 加载样式表
|
||||||
|
style_file = os.path.join(os.path.dirname(__file__), "ui", "style.qss")
|
||||||
|
with open(style_file, "r", encoding="utf-8") as f:
|
||||||
|
self.setStyleSheet(f.read())
|
||||||
|
|
||||||
|
# 创建主窗口部件
|
||||||
|
self.main_widget = QtWidgets.QWidget()
|
||||||
|
self.setCentralWidget(self.main_widget)
|
||||||
|
|
||||||
|
# 创建主布局
|
||||||
|
self.main_layout = QtWidgets.QVBoxLayout(self.main_widget)
|
||||||
|
|
||||||
|
# 初始化UI组件
|
||||||
|
self._init_ui()
|
||||||
|
|
||||||
|
def _init_ui(self):
|
||||||
|
"""初始化UI组件"""
|
||||||
|
# 创建工具架
|
||||||
|
self.tool_shelf = toolshelf.ToolShelf(self)
|
||||||
|
self.main_layout.addWidget(self.tool_shelf)
|
||||||
|
|
||||||
|
# 创建标签页
|
||||||
|
self.tab_widget = QtWidgets.QTabWidget()
|
||||||
|
self.main_layout.addWidget(self.tab_widget)
|
||||||
|
|
||||||
|
# 添加各个功能页面
|
||||||
|
self._add_meshes_tab()
|
||||||
|
self._add_rigging_tab()
|
||||||
|
self._add_behaviour_tab()
|
||||||
|
self._add_definition_tab()
|
||||||
|
|
||||||
|
def _add_meshes_tab(self):
|
||||||
|
"""添加模型页面"""
|
||||||
|
from .ui.meshes import MeshesTab
|
||||||
|
meshes_widget = MeshesTab()
|
||||||
|
self.tab_widget.addTab(meshes_widget, "模型")
|
||||||
|
|
||||||
|
def _add_rigging_tab(self):
|
||||||
|
"""添加绑定页面"""
|
||||||
|
from .ui.rigging import RiggingTab
|
||||||
|
rigging_widget = RiggingTab()
|
||||||
|
self.tab_widget.addTab(rigging_widget, "绑定")
|
||||||
|
|
||||||
|
|
||||||
|
def _add_behaviour_tab(self):
|
||||||
|
"""添加行为页面"""
|
||||||
|
from .ui.behaviour import BehaviourTab
|
||||||
|
behaviour_widget = BehaviourTab()
|
||||||
|
self.tab_widget.addTab(behaviour_widget, "行为")
|
||||||
|
|
||||||
|
|
||||||
|
def _add_definition_tab(self):
|
||||||
|
"""添加定义页面"""
|
||||||
|
from .ui.definition import DefinitionTab
|
||||||
|
definition_widget = DefinitionTab()
|
||||||
|
self.tab_widget.addTab(definition_widget, "定义")
|
||||||
|
|
||||||
|
|
||||||
|
def show():
|
||||||
|
"""显示主窗口"""
|
||||||
|
# 获取Maya主窗口
|
||||||
|
maya_main_window = wrapInstance(int(omui.MQtUtil.mainWindow()), QtWidgets.QWidget)
|
||||||
|
|
||||||
|
# 创建并显示插件窗口
|
||||||
|
global meta_fusion_window
|
||||||
|
meta_fusion_window = MetaFusion(parent=maya_main_window)
|
||||||
|
meta_fusion_window.show()
|
||||||
|
@ -71,6 +71,47 @@ TOOL_ICON = str(os.path.join(ICONS_PATH, f"{TOOL_NAME}Logo.png").replace("\\", "
|
|||||||
TOOL_COMMAND_ICON = str(os.path.join(ICONS_PATH, "Command.png").replace("\\", "/"))
|
TOOL_COMMAND_ICON = str(os.path.join(ICONS_PATH, "Command.png").replace("\\", "/"))
|
||||||
TOOL_MOD_FILENAME = str(f"{TOOL_NAME}.mod")
|
TOOL_MOD_FILENAME = str(f"{TOOL_NAME}.mod")
|
||||||
|
|
||||||
|
# 基础路径配置
|
||||||
|
ROOT_PATH = os.path.dirname(os.path.dirname(__file__))
|
||||||
|
ASSETS_PATH = os.path.join(ROOT_PATH, "assets")
|
||||||
|
ICONS_PATH = os.path.join(ROOT_PATH, "icons")
|
||||||
|
PLUGINS_PATH = os.path.join(ROOT_PATH, "plugins")
|
||||||
|
|
||||||
|
# DNA相关路径
|
||||||
|
DNA_PATH = os.path.join(ASSETS_PATH, "dna")
|
||||||
|
MH2_PATH = os.path.join(ASSETS_PATH, "MH.2")
|
||||||
|
MH4_PATH = os.path.join(ASSETS_PATH, "MH.4")
|
||||||
|
|
||||||
|
# UI配置
|
||||||
|
UI_FONT_FAMILY = "Microsoft YaHei UI"
|
||||||
|
UI_FONT_SIZE = 9
|
||||||
|
UI_BUTTON_HEIGHT = 24
|
||||||
|
UI_LINE_EDIT_HEIGHT = 24
|
||||||
|
|
||||||
|
# 颜色配置
|
||||||
|
UI_COLORS = {
|
||||||
|
"primary": "#2D2D30",
|
||||||
|
"secondary": "#3E3E42",
|
||||||
|
"accent": "#007ACC",
|
||||||
|
"text": "#FFFFFF",
|
||||||
|
"text_disabled": "#656565",
|
||||||
|
"border": "#434346",
|
||||||
|
"button_hover": "#404045",
|
||||||
|
"button_pressed": "#007ACC"
|
||||||
|
}
|
||||||
|
|
||||||
|
# LOD配置
|
||||||
|
LOD_MESHES = {
|
||||||
|
"LOD0": ["*头部", "*牙齿", "*牙龈", "*左眼", "*右眼", "*虹膜", "*睫毛", "*眼睑", "*软骨", "*身体"],
|
||||||
|
"LOD1": ["头部", "牙齿", "牙龈", "左眼", "右眼", "虹膜", "睫毛", "眼睑", "软骨", "身体"],
|
||||||
|
"LOD2": ["头部", "牙齿", "牙龈", "左眼", "右眼", "虹膜", "睫毛", "眼睑", "身体"],
|
||||||
|
"LOD3": ["头部", "牙齿", "左眼", "右眼", "虹膜", "睫毛", "眼睑", "身体"],
|
||||||
|
"LOD4": ["头部", "牙齿", "左眼", "右眼", "虹膜"],
|
||||||
|
"LOD5": ["头部", "牙齿", "左眼", "右眼"],
|
||||||
|
"LOD6": ["头部", "牙齿", "左眼", "右眼"],
|
||||||
|
"LOD7": ["头部", "牙齿", "左眼", "右眼"]
|
||||||
|
}
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
variables_path = [
|
variables_path = [
|
||||||
TOOL_PATH,
|
TOOL_PATH,
|
||||||
|
38
scripts/ui/behaviour.py
Normal file
38
scripts/ui/behaviour.py
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
#!/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 BehaviourTab(QtWidgets.QWidget):
|
||||||
|
pass
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
pass
|
38
scripts/ui/definition.py
Normal file
38
scripts/ui/definition.py
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
#!/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 DefinitionTab(QtWidgets.QWidget):
|
||||||
|
pass
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
pass
|
39
scripts/ui/menu.py
Normal file
39
scripts/ui/menu.py
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
#!/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 Menu(QtWidgets.QWidget):
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
pass
|
39
scripts/ui/meshes.py
Normal file
39
scripts/ui/meshes.py
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
#!/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 MeshesTab(QtWidgets.QWidget):
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
pass
|
39
scripts/ui/rigging.py
Normal file
39
scripts/ui/rigging.py
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
#!/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):
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
pass
|
@ -1 +1,97 @@
|
|||||||
|
/* 全局样式 */
|
||||||
|
QWidget {
|
||||||
|
background-color: #2D2D30;
|
||||||
|
color: #FFFFFF;
|
||||||
|
font-family: "Microsoft YaHei UI";
|
||||||
|
font-size: 9pt;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 按钮样式 */
|
||||||
|
QPushButton {
|
||||||
|
background-color: #3E3E42;
|
||||||
|
border: 1px solid #434346;
|
||||||
|
border-radius: 3px;
|
||||||
|
padding: 5px 15px;
|
||||||
|
min-height: 24px;
|
||||||
|
}
|
||||||
|
|
||||||
|
QPushButton:hover {
|
||||||
|
background-color: #404045;
|
||||||
|
}
|
||||||
|
|
||||||
|
QPushButton:pressed {
|
||||||
|
background-color: #007ACC;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 输入框样式 */
|
||||||
|
QLineEdit {
|
||||||
|
background-color: #3E3E42;
|
||||||
|
border: 1px solid #434346;
|
||||||
|
border-radius: 3px;
|
||||||
|
padding: 2px 5px;
|
||||||
|
min-height: 24px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 下拉框样式 */
|
||||||
|
QComboBox {
|
||||||
|
background-color: #3E3E42;
|
||||||
|
border: 1px solid #434346;
|
||||||
|
border-radius: 3px;
|
||||||
|
padding: 2px 5px;
|
||||||
|
min-height: 24px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 标签页样式 */
|
||||||
|
QTabWidget::pane {
|
||||||
|
border: 1px solid #434346;
|
||||||
|
}
|
||||||
|
|
||||||
|
QTabBar::tab {
|
||||||
|
background-color: #2D2D30;
|
||||||
|
border: 1px solid #434346;
|
||||||
|
padding: 5px 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
QTabBar::tab:selected {
|
||||||
|
background-color: #007ACC;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 滚动条样式 */
|
||||||
|
QScrollBar:vertical {
|
||||||
|
background-color: #2D2D30;
|
||||||
|
width: 12px;
|
||||||
|
border-radius: 6px;
|
||||||
|
}
|
||||||
|
|
||||||
|
QScrollBar::handle:vertical {
|
||||||
|
background-color: #3E3E42;
|
||||||
|
border-radius: 6px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 菜单样式 */
|
||||||
|
QMenuBar {
|
||||||
|
background-color: #2D2D30;
|
||||||
|
border-bottom: 1px solid #434346;
|
||||||
|
}
|
||||||
|
|
||||||
|
QMenu {
|
||||||
|
background-color: #2D2D30;
|
||||||
|
border: 1px solid #434346;
|
||||||
|
}
|
||||||
|
|
||||||
|
QMenu::item:selected {
|
||||||
|
background-color: #007ACC;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 工具栏样式 */
|
||||||
|
QToolBar {
|
||||||
|
background-color: #2D2D30;
|
||||||
|
border-bottom: 1px solid #434346;
|
||||||
|
spacing: 3px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 状态栏样式 */
|
||||||
|
QStatusBar {
|
||||||
|
background-color: #2D2D30;
|
||||||
|
border-top: 1px solid #434346;
|
||||||
|
}
|
||||||
|
@ -1,2 +1,11 @@
|
|||||||
#!/usr/bin/env python
|
#!/usr/bin/env python
|
||||||
# -*- coding: utf-8 -*-
|
# -*- 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
|
||||||
|
Loading…
Reference in New Issue
Block a user