Update
This commit is contained in:
298
docs/ARTIST_GUIDE.md
Normal file
298
docs/ARTIST_GUIDE.md
Normal file
@@ -0,0 +1,298 @@
|
||||
# NexusLauncher 使用指南
|
||||
|
||||
> **现代化项目管理与应用启动工具**
|
||||
> 版本: v1.2.0 | 更新: 2025年11月
|
||||
|
||||
---
|
||||
|
||||
## 📑 目录
|
||||
|
||||
- [快速开始](#快速开始)
|
||||
- [核心功能](#核心功能)
|
||||
- [项目管理](#项目管理)
|
||||
- [任务管理](#任务管理)
|
||||
- [应用管理](#应用管理)
|
||||
- [快捷键](#快捷键)
|
||||
- [常见问题](#常见问题)
|
||||
|
||||
---
|
||||
|
||||
## 快速开始
|
||||
|
||||
### 安装
|
||||
|
||||
1. **下载并解压** `NexusLauncher.exe` 到任意目录
|
||||
2. **双击运行**,程序将自动创建配置文件
|
||||
3. **首次启动**会创建示例项目 "Project_01"
|
||||
|
||||
### 5 分钟上手
|
||||
|
||||
#### 1️⃣ 添加常用软件
|
||||
|
||||
```
|
||||
主窗口 → ⚙ 设置 → + 添加应用
|
||||
```
|
||||
|
||||
填写信息:
|
||||
- **名称**: Maya 2025
|
||||
- **路径**: `C:\Program Files\Autodesk\Maya2025\bin\maya.exe`
|
||||
- **版本**: 2025.1
|
||||
|
||||
#### 2️⃣ 创建项目
|
||||
|
||||
```
|
||||
设置窗口 → 新建项目 → 输入项目名称
|
||||
```
|
||||
|
||||
项目命名建议:
|
||||
- `Character_Hero`
|
||||
- `Environment_Forest`
|
||||
- `Weapon_Sword`
|
||||
|
||||
#### 3️⃣ 创建任务文件夹
|
||||
|
||||
```
|
||||
Task 标签页 → 选择任务类型 → 设置工作空间 → Create Task Folder
|
||||
```
|
||||
|
||||
#### 4️⃣ 启动应用
|
||||
|
||||
```
|
||||
Project 标签页 → 点击应用图标
|
||||
```
|
||||
|
||||
💡 **提示**: 使用 `Ctrl + 滚轮` 调整图标大小
|
||||
|
||||
---
|
||||
|
||||
## 核心功能
|
||||
|
||||
### 🎨 项目管理
|
||||
- 多项目支持,快速切换
|
||||
- 项目个性化(图标、颜色)
|
||||
- 自动保存配置
|
||||
|
||||
### 📁 任务管理
|
||||
- 7 种预设任务模板(Character、Weapon、Prop 等)
|
||||
- 可视化节点编辑器
|
||||
- 一键创建标准化文件夹结构
|
||||
|
||||
### 🚀 应用启动
|
||||
- 快速启动常用软件
|
||||
- 图标缩放(`Ctrl + 滚轮`)
|
||||
- 拖拽排序
|
||||
|
||||
### 界面布局
|
||||
|
||||
```
|
||||
┌──────────────────────────────┐
|
||||
│ NexusLauncher ⚙ 设置 × │
|
||||
├──────────────────────────────┤
|
||||
│ 当前项目: [Project_01 ▼] │
|
||||
├──────────────────────────────┤
|
||||
│ Project │ Task │
|
||||
├───────────┴──────────────────┤
|
||||
│ [应用图标] 或 [任务管理] │
|
||||
└──────────────────────────────┘
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 项目管理
|
||||
|
||||
### 基本操作
|
||||
|
||||
#### 创建项目
|
||||
```
|
||||
⚙ 设置 → 新建项目 → 输入名称
|
||||
```
|
||||
|
||||
**命名建议**:
|
||||
- `Character_角色名`
|
||||
- `Environment_场景名`
|
||||
- `Weapon_武器名`
|
||||
- `Prop_道具名`
|
||||
|
||||
#### 项目功能
|
||||
|
||||
| 功能 | 说明 |
|
||||
|------|------|
|
||||
| **新建** | 创建新项目 |
|
||||
| **复制** | 复制现有项目 |
|
||||
| **重命名** | 修改项目名 |
|
||||
| **删除** | 删除项目 |
|
||||
| **图标** | 自定义图标 |
|
||||
| **颜色** | 设置主题色 |
|
||||
|
||||
#### 快速切换
|
||||
- 顶部下拉菜单
|
||||
- `Ctrl + Tab` 快捷键
|
||||
- 自动保存状态
|
||||
|
||||
---
|
||||
|
||||
## 任务管理
|
||||
|
||||
### 预设模板
|
||||
|
||||
| 任务类型 | 适用场景 |
|
||||
|---------|----------|
|
||||
| **Character** | 角色制作 |
|
||||
| **Weapon** | 武器制作 |
|
||||
| **Prop** | 道具制作 |
|
||||
| **Environment** | 环境制作 |
|
||||
| **Animation** | 动画制作 |
|
||||
| **Rigging** | 绑定制作 |
|
||||
| **Other** | 其他类型 |
|
||||
|
||||
### Character 模板结构
|
||||
|
||||
```
|
||||
TaskFolder_Character_001/
|
||||
├── Reference/ # 参考资料
|
||||
├── MP/ # 中精度模型
|
||||
├── HP/ # 高精度雕刻
|
||||
├── LP/ # 低精度模型
|
||||
├── Baking/ # 烘焙流程
|
||||
├── Texture/ # 贴图制作
|
||||
├── FBX/ # 最终资产
|
||||
└── Screenshot/ # 展示截图
|
||||
```
|
||||
|
||||
### 创建流程
|
||||
|
||||
```
|
||||
1. Task 标签页 → 选择任务类型
|
||||
2. Browse → 选择工作空间
|
||||
3. 输入任务名称
|
||||
4. Create Task Folder
|
||||
5. Open in Explorer 查看结果
|
||||
```
|
||||
|
||||
### 自定义结构
|
||||
|
||||
使用 **SubFolder Editor** 节点编辑器:
|
||||
- 右键节点 → 添加子节点
|
||||
- `F2` 重命名
|
||||
- `Delete` 删除
|
||||
- `Ctrl + S` 保存
|
||||
|
||||
---
|
||||
|
||||
## SubFolder Editor 节点编辑器
|
||||
|
||||
### 基本操作
|
||||
|
||||
| 操作 | 快捷键 | 功能 |
|
||||
|------|--------|------|
|
||||
| **移动节点** | 拖拽 | 改变位置 |
|
||||
| **重命名** | `F2` | 重命名节点 |
|
||||
| **删除** | `Delete` | 删除节点 |
|
||||
| **复制** | `Ctrl + D` | 复制节点 |
|
||||
| **添加子节点** | 右键菜单 | 添加子文件夹 |
|
||||
| **缩放视图** | `Ctrl + 滚轮` | 缩放 |
|
||||
| **平移视图** | 中键拖拽 | 移动 |
|
||||
| **居中** | `Home` | 居中显示 |
|
||||
| **保存** | `Ctrl + S` | 保存结构 |
|
||||
|
||||
💡 **提示**: TaskFolder 是根节点,不可删除或重命名
|
||||
|
||||
---
|
||||
|
||||
## 应用管理
|
||||
|
||||
### 添加应用
|
||||
|
||||
```
|
||||
⚙ 设置 → + 添加应用 → 填写信息 → 保存
|
||||
```
|
||||
|
||||
**必填信息**:
|
||||
- **名称**: Maya 2025
|
||||
- **路径**: 可执行文件完整路径
|
||||
- **版本**: 2025.1
|
||||
|
||||
### 常用软件路径
|
||||
|
||||
| 软件 | 默认路径 |
|
||||
|------|---------|
|
||||
| **Maya 2025** | `C:\Program Files\Autodesk\Maya2025\bin\maya.exe` |
|
||||
| **Blender** | `C:\Program Files\Blender Foundation\Blender 4.2\blender.exe` |
|
||||
| **ZBrush** | `C:\Program Files\Maxon\ZBrush 2025\ZBrush.exe` |
|
||||
| **Substance Painter** | `C:\Program Files\Adobe\Adobe Substance 3D Painter\...` |
|
||||
| **Photoshop** | `C:\Program Files\Adobe\Adobe Photoshop 2025\Photoshop.exe` |
|
||||
| **Unreal Engine** | `C:\Program Files\Epic Games\UE_5.4\Engine\Binaries\Win64\UnrealEditor.exe` |
|
||||
|
||||
### 批量操作
|
||||
|
||||
| 操作 | 方法 |
|
||||
|------|------|
|
||||
| **多选** | `Ctrl + 点击` |
|
||||
| **全选** | 右键 → 全选 |
|
||||
| **删除** | `Delete` 键 |
|
||||
| **排序** | 拖拽左侧手柄 |
|
||||
| **取消** | `Escape` 键 |
|
||||
|
||||
|
||||
---
|
||||
|
||||
## 快捷键
|
||||
|
||||
### 全局快捷键
|
||||
|
||||
| 快捷键 | 功能 |
|
||||
|--------|------|
|
||||
| `Ctrl + Tab` | 切换项目 |
|
||||
| `Ctrl + 滚轮` | 缩放图标/视图 |
|
||||
| `Ctrl + 点击` | 多选 |
|
||||
| `Delete` | 删除 |
|
||||
| `Escape` | 取消选择 |
|
||||
| `F2` | 重命名 |
|
||||
| `Ctrl + D` | 复制 |
|
||||
| `Ctrl + S` | 保存 |
|
||||
| `Home` | 居中显示 |
|
||||
| `中键拖拽` | 平移视图 |
|
||||
|
||||
---
|
||||
|
||||
## 常见问题
|
||||
|
||||
**Q: 程序启动后没有反应?**
|
||||
- 检查杀毒软件是否拦截
|
||||
- 确保 `config.json` 有读写权限
|
||||
- 尝试以管理员权限运行
|
||||
|
||||
**Q: 应用启动失败?**
|
||||
- 检查应用路径是否正确
|
||||
- 确认应用程序存在
|
||||
- 尝试手动启动测试
|
||||
|
||||
**Q: 如何备份设置?**
|
||||
- 备份 `config.json` 文件即可
|
||||
|
||||
**Q: TaskFolder 可以删除吗?**
|
||||
- 不可以,TaskFolder 是根节点
|
||||
|
||||
---
|
||||
|
||||
## 系统要求
|
||||
|
||||
**最低配置**:
|
||||
- Windows 10+
|
||||
- 4GB RAM
|
||||
- 100MB 空间
|
||||
|
||||
**推荐配置**:
|
||||
- Windows 11
|
||||
- 8GB+ RAM
|
||||
- 1920x1080 分辨率
|
||||
|
||||
---
|
||||
|
||||
**💡 提示**: 充分利用快捷键和节点编辑器,提升工作效率!
|
||||
|
||||
**版本**: v1.2.0 | **更新**: 2025年11月
|
||||
|
||||
---
|
||||
|
||||
*NexusLauncher - 让项目管理更简单* 🚀
|
||||
577
docs/CUSTOM_PLUGIN_GUIDE.md
Normal file
577
docs/CUSTOM_PLUGIN_GUIDE.md
Normal file
@@ -0,0 +1,577 @@
|
||||
# Maya 自定义插件添加指南
|
||||
|
||||
本指南将帮助你在 NexusLauncher 的 Maya 插件系统中添加自己的工具和插件。
|
||||
|
||||
---
|
||||
|
||||
## 📁 目录结构说明
|
||||
|
||||
```
|
||||
template/plugins/maya/2023/
|
||||
├── shelves/ # 工具架文件(.mel 格式)
|
||||
├── scripts/ # Python/MEL 脚本
|
||||
├── plug-ins/ # Maya 插件文件(.py 或 .mll)
|
||||
├── icons/ # 工具图标
|
||||
└── README.md # 基础说明文档
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🎯 添加方式概览
|
||||
|
||||
根据你的需求,有三种主要的添加方式:
|
||||
|
||||
| 方式 | 适用场景 | 难度 |
|
||||
|------|---------|------|
|
||||
| **1. 添加工具架按钮** | 快速添加 Python 脚本工具 | ⭐ 简单 |
|
||||
| **2. 添加 Maya 插件** | 创建 Maya 命令或节点 | ⭐⭐ 中等 |
|
||||
| **3. 添加启动脚本** | 自动执行初始化代码 | ⭐ 简单 |
|
||||
|
||||
---
|
||||
|
||||
## 方式 1: 添加工具架按钮
|
||||
|
||||
### 适用场景
|
||||
- 你有一个 Python 脚本工具想要快速访问
|
||||
- 需要在工具架上添加按钮
|
||||
- 不需要注册 Maya 命令
|
||||
|
||||
### 步骤
|
||||
|
||||
#### 1.1 准备你的 Python 脚本
|
||||
|
||||
将你的 Python 脚本放到 `scripts/` 目录:
|
||||
|
||||
```
|
||||
scripts/
|
||||
├── userSetup.py # 启动脚本(已存在)
|
||||
├── nexus_test.py # 示例脚本(已存在)
|
||||
└── my_custom_tool.py # 👈 你的新脚本
|
||||
```
|
||||
|
||||
**示例脚本** (`my_custom_tool.py`):
|
||||
|
||||
```python
|
||||
#!/usr/bin/env python
|
||||
# -*- coding: utf-8 -*-
|
||||
"""
|
||||
我的自定义工具
|
||||
"""
|
||||
import maya.cmds as cmds
|
||||
|
||||
def run_my_tool():
|
||||
"""执行我的工具"""
|
||||
# 你的工具逻辑
|
||||
cmds.confirmDialog(
|
||||
title='My Tool',
|
||||
message='Hello from my custom tool!',
|
||||
button=['OK']
|
||||
)
|
||||
print("[MyTool] Tool executed successfully")
|
||||
|
||||
def show_ui():
|
||||
"""显示工具界面"""
|
||||
# 如果有 UI,在这里创建
|
||||
pass
|
||||
```
|
||||
|
||||
#### 1.2 准备图标(可选)
|
||||
|
||||
将图标文件放到 `icons/` 目录:
|
||||
|
||||
```
|
||||
icons/
|
||||
├── nexus_test.png # 示例图标(已存在)
|
||||
└── my_tool_icon.png # 👈 你的图标(32x32 或 64x64 PNG)
|
||||
```
|
||||
|
||||
> **提示**: 如果没有图标,可以使用文字标签代替
|
||||
|
||||
#### 1.3 编辑工具架文件
|
||||
|
||||
编辑 `shelves/shelf_NexusLauncher.mel`,在文件末尾的 `}` 之前添加新按钮:
|
||||
|
||||
```mel
|
||||
shelfButton
|
||||
-enableCommandRepeat 1
|
||||
-flexibleWidthType 3
|
||||
-flexibleWidthValue 32
|
||||
-enable 1
|
||||
-width 35
|
||||
-height 34
|
||||
-manage 1
|
||||
-visible 1
|
||||
-preventOverride 0
|
||||
-annotation "我的自定义工具 - 点击运行"
|
||||
-enableBackground 0
|
||||
-backgroundColor 0 0 0
|
||||
-highlightColor 0.321569 0.521569 0.65098
|
||||
-align "center"
|
||||
-label "MT"
|
||||
-labelOffset 0
|
||||
-rotation 0
|
||||
-flipX 0
|
||||
-flipY 0
|
||||
-useAlpha 1
|
||||
-font "boldLabelFont"
|
||||
-imageOverlayLabel "MT"
|
||||
-overlayLabelColor 1 1 1
|
||||
-overlayLabelBackColor 0.2 0.8 0.5 0.9
|
||||
-image "my_tool_icon.png"
|
||||
-image1 "my_tool_icon.png"
|
||||
-style "iconOnly"
|
||||
-marginWidth 0
|
||||
-marginHeight 1
|
||||
-command "import my_custom_tool\nmy_custom_tool.run_my_tool()"
|
||||
-sourceType "python"
|
||||
-commandRepeatable 1
|
||||
-flat 1
|
||||
;
|
||||
```
|
||||
|
||||
**关键参数说明**:
|
||||
- `-annotation`: 鼠标悬停时的提示文字
|
||||
- `-label`: 按钮文字标签(如果没有图标会显示)
|
||||
- `-imageOverlayLabel`: 图标上的文字叠加层
|
||||
- `-overlayLabelBackColor`: 文字背景颜色 (R G B Alpha)
|
||||
- `-image`: 图标文件名(在 icons/ 目录中)
|
||||
- `-command`: 点击按钮时执行的 Python 代码
|
||||
|
||||
#### 1.4 测试
|
||||
|
||||
1. 通过 NexusLauncher 启动 Maya 2023
|
||||
2. 检查 NexusLauncher 工具架是否出现新按钮
|
||||
3. 点击按钮测试功能
|
||||
|
||||
---
|
||||
|
||||
## 方式 2: 添加 Maya 插件
|
||||
|
||||
### 适用场景
|
||||
- 需要注册自定义 Maya 命令
|
||||
- 需要创建自定义节点
|
||||
- 需要更深度的 Maya API 集成
|
||||
|
||||
### 步骤
|
||||
|
||||
#### 2.1 创建插件文件
|
||||
|
||||
在 `plug-ins/` 目录创建你的插件文件:
|
||||
|
||||
```
|
||||
plug-ins/
|
||||
├── nexus_example_plugin.py # 示例插件(已存在)
|
||||
└── my_custom_plugin.py # 👈 你的新插件
|
||||
```
|
||||
|
||||
**插件模板** (`my_custom_plugin.py`):
|
||||
|
||||
```python
|
||||
#!/usr/bin/env python
|
||||
# -*- coding: utf-8 -*-
|
||||
"""
|
||||
我的自定义 Maya 插件
|
||||
"""
|
||||
import sys
|
||||
import maya.api.OpenMaya as om
|
||||
|
||||
|
||||
def maya_useNewAPI():
|
||||
"""告诉 Maya 使用 Python API 2.0"""
|
||||
pass
|
||||
|
||||
|
||||
class MyCustomCommand(om.MPxCommand):
|
||||
"""自定义命令类"""
|
||||
|
||||
kPluginCmdName = 'myCustomCmd' # 命令名称
|
||||
|
||||
def __init__(self):
|
||||
om.MPxCommand.__init__(self)
|
||||
|
||||
@staticmethod
|
||||
def cmdCreator():
|
||||
return MyCustomCommand()
|
||||
|
||||
def doIt(self, args):
|
||||
"""执行命令"""
|
||||
print(f'[MyPlugin] Custom command executed!')
|
||||
om.MGlobal.displayInfo('My custom plugin is working!')
|
||||
|
||||
# 在这里添加你的命令逻辑
|
||||
# 例如:创建对象、修改场景等
|
||||
|
||||
|
||||
def initializePlugin(plugin):
|
||||
"""初始化插件"""
|
||||
pluginFn = om.MFnPlugin(plugin, 'YourName', '1.0', 'Any')
|
||||
try:
|
||||
pluginFn.registerCommand(
|
||||
MyCustomCommand.kPluginCmdName,
|
||||
MyCustomCommand.cmdCreator
|
||||
)
|
||||
print(f'[MyPlugin] Plugin loaded: {MyCustomCommand.kPluginCmdName}')
|
||||
except:
|
||||
sys.stderr.write(f'Failed to register command: {MyCustomCommand.kPluginCmdName}')
|
||||
raise
|
||||
|
||||
|
||||
def uninitializePlugin(plugin):
|
||||
"""卸载插件"""
|
||||
pluginFn = om.MFnPlugin(plugin)
|
||||
try:
|
||||
pluginFn.deregisterCommand(MyCustomCommand.kPluginCmdName)
|
||||
print(f'[MyPlugin] Plugin unloaded: {MyCustomCommand.kPluginCmdName}')
|
||||
except:
|
||||
sys.stderr.write(f'Failed to deregister command: {MyCustomCommand.kPluginCmdName}')
|
||||
raise
|
||||
```
|
||||
|
||||
#### 2.2 配置自动加载
|
||||
|
||||
编辑 `scripts/userSetup.py`,在 `load_nexus_plugins()` 函数中添加你的插件:
|
||||
|
||||
```python
|
||||
def load_nexus_plugins():
|
||||
"""Load NexusLauncher plugins"""
|
||||
try:
|
||||
plugin_path = os.environ.get('MAYA_PLUG_IN_PATH', '')
|
||||
|
||||
if not plugin_path:
|
||||
print("[NexusLauncher] MAYA_PLUG_IN_PATH not set, skipping plugin load")
|
||||
return
|
||||
|
||||
print(f"[NexusLauncher] MAYA_PLUG_IN_PATH: {plugin_path}")
|
||||
|
||||
# 要加载的插件列表
|
||||
plugins_to_load = [
|
||||
"nexus_example_plugin.py",
|
||||
"my_custom_plugin.py", # 👈 添加你的插件
|
||||
]
|
||||
|
||||
for plugin_file in plugins_to_load:
|
||||
if cmds.pluginInfo(plugin_file, query=True, loaded=True):
|
||||
print(f"[NexusLauncher] Plugin already loaded: {plugin_file}")
|
||||
else:
|
||||
try:
|
||||
cmds.loadPlugin(plugin_file)
|
||||
print(f"[NexusLauncher] ✓ Loaded plugin: {plugin_file}")
|
||||
|
||||
# 设置为自动加载
|
||||
cmds.pluginInfo(plugin_file, edit=True, autoload=True)
|
||||
print(f"[NexusLauncher] ✓ Set plugin to auto-load")
|
||||
except Exception as e:
|
||||
print(f"[NexusLauncher] Failed to load plugin {plugin_file}: {e}")
|
||||
|
||||
except Exception as e:
|
||||
print(f"[NexusLauncher] Error loading plugins: {e}")
|
||||
```
|
||||
|
||||
#### 2.3 测试插件
|
||||
|
||||
1. 通过 NexusLauncher 启动 Maya 2023
|
||||
2. 检查脚本编辑器输出,确认插件已加载
|
||||
3. 在 Maya 命令行或脚本编辑器中测试命令:
|
||||
|
||||
```python
|
||||
import maya.cmds as cmds
|
||||
cmds.myCustomCmd() # 执行你的自定义命令
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 方式 3: 添加启动脚本
|
||||
|
||||
### 适用场景
|
||||
- 需要在 Maya 启动时自动执行某些操作
|
||||
- 设置环境变量或全局配置
|
||||
- 加载第三方库
|
||||
|
||||
### 步骤
|
||||
|
||||
#### 3.1 编辑 userSetup.py
|
||||
|
||||
在 `scripts/userSetup.py` 文件末尾添加你的初始化代码:
|
||||
|
||||
```python
|
||||
def my_custom_startup():
|
||||
"""我的自定义启动函数"""
|
||||
try:
|
||||
print("[MyStartup] Running custom startup code...")
|
||||
|
||||
# 在这里添加你的启动逻辑
|
||||
# 例如:
|
||||
# - 设置默认渲染器
|
||||
# - 加载常用插件
|
||||
# - 配置工作区
|
||||
# - 连接到资产管理系统
|
||||
|
||||
import maya.cmds as cmds
|
||||
|
||||
# 示例:设置默认单位为厘米
|
||||
cmds.currentUnit(linear='cm')
|
||||
print("[MyStartup] ✓ Set default unit to cm")
|
||||
|
||||
# 示例:设置默认时间单位为 24fps
|
||||
cmds.currentUnit(time='film')
|
||||
print("[MyStartup] ✓ Set default time unit to 24fps")
|
||||
|
||||
print("[MyStartup] ✓ Custom startup completed")
|
||||
|
||||
except Exception as e:
|
||||
print(f"[MyStartup] Error during startup: {e}")
|
||||
|
||||
|
||||
# 在 Maya 启动完成后执行
|
||||
cmds.evalDeferred(my_custom_startup)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🔧 高级技巧
|
||||
|
||||
### 1. 动态重载工具架
|
||||
|
||||
如果你在开发过程中频繁修改工具架,可以使用 `RELOAD_SHELF.py` 快速重载:
|
||||
|
||||
```python
|
||||
# 在 Maya 脚本编辑器中执行
|
||||
import sys
|
||||
sys.path.append(r'E:\Zoroot\Dev\NexusLauncher\template\plugins\maya\2023')
|
||||
import RELOAD_SHELF
|
||||
RELOAD_SHELF.reload_shelf()
|
||||
```
|
||||
|
||||
### 2. 使用相对导入
|
||||
|
||||
如果你的工具有多个模块,可以创建包结构:
|
||||
|
||||
```
|
||||
scripts/
|
||||
├── my_tool/
|
||||
│ ├── __init__.py
|
||||
│ ├── core.py
|
||||
│ ├── ui.py
|
||||
│ └── utils.py
|
||||
└── userSetup.py
|
||||
```
|
||||
|
||||
在工具架按钮中使用:
|
||||
|
||||
```mel
|
||||
-command "from my_tool import ui\nui.show_window()"
|
||||
```
|
||||
|
||||
### 3. 添加菜单项
|
||||
|
||||
除了工具架按钮,你还可以在 `userSetup.py` 中添加自定义菜单:
|
||||
|
||||
```python
|
||||
def create_custom_menu():
|
||||
"""创建自定义菜单"""
|
||||
try:
|
||||
import maya.cmds as cmds
|
||||
|
||||
# 检查菜单是否已存在
|
||||
if cmds.menu('NexusMenu', exists=True):
|
||||
cmds.deleteUI('NexusMenu')
|
||||
|
||||
# 创建菜单
|
||||
main_window = mel.eval('$tmpVar=$gMainWindow')
|
||||
custom_menu = cmds.menu(
|
||||
'NexusMenu',
|
||||
label='NexusTools',
|
||||
parent=main_window,
|
||||
tearOff=True
|
||||
)
|
||||
|
||||
# 添加菜单项
|
||||
cmds.menuItem(
|
||||
label='My Tool',
|
||||
command='import my_custom_tool; my_custom_tool.run_my_tool()',
|
||||
parent=custom_menu
|
||||
)
|
||||
|
||||
cmds.menuItem(divider=True, parent=custom_menu)
|
||||
|
||||
cmds.menuItem(
|
||||
label='About',
|
||||
command='cmds.confirmDialog(title="About", message="NexusTools v1.0")',
|
||||
parent=custom_menu
|
||||
)
|
||||
|
||||
print("[NexusLauncher] ✓ Created custom menu")
|
||||
|
||||
except Exception as e:
|
||||
print(f"[NexusLauncher] Error creating menu: {e}")
|
||||
|
||||
# 在启动时执行
|
||||
cmds.evalDeferred(create_custom_menu)
|
||||
```
|
||||
|
||||
### 4. 调试技巧
|
||||
|
||||
**查看环境变量**:
|
||||
```python
|
||||
import os
|
||||
print(os.environ.get('MAYA_SHELF_PATH'))
|
||||
print(os.environ.get('MAYA_PLUG_IN_PATH'))
|
||||
```
|
||||
|
||||
**检查插件加载状态**:
|
||||
```python
|
||||
import maya.cmds as cmds
|
||||
print(cmds.pluginInfo(query=True, listPlugins=True))
|
||||
```
|
||||
|
||||
**查看工具架列表**:
|
||||
```python
|
||||
import maya.cmds as cmds
|
||||
print(cmds.lsUI(type='shelfLayout'))
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 📋 常见问题
|
||||
|
||||
### Q1: 工具架按钮不显示图标?
|
||||
|
||||
**A**: 检查以下几点:
|
||||
1. 图标文件是否在 `icons/` 目录中
|
||||
2. 文件名是否正确(区分大小写)
|
||||
3. 图标格式是否为 PNG
|
||||
4. `XBMLANGPATH` 环境变量是否正确设置
|
||||
|
||||
### Q2: Python 脚本找不到模块?
|
||||
|
||||
**A**: 确保:
|
||||
1. 脚本在 `scripts/` 目录中
|
||||
2. `PYTHONPATH` 和 `MAYA_SCRIPT_PATH` 已正确设置
|
||||
3. 使用 `import` 时不需要包含 `.py` 后缀
|
||||
|
||||
### Q3: 插件加载失败?
|
||||
|
||||
**A**: 检查:
|
||||
1. 插件文件语法是否正确
|
||||
2. 是否包含 `maya_useNewAPI()` 函数(API 2.0)
|
||||
3. `initializePlugin()` 和 `uninitializePlugin()` 是否正确实现
|
||||
4. 查看脚本编辑器的错误信息
|
||||
|
||||
### Q4: 修改后没有生效?
|
||||
|
||||
**A**: 尝试:
|
||||
1. 完全关闭 Maya 重新启动
|
||||
2. 使用 `RELOAD_SHELF.py` 重载工具架
|
||||
3. 检查是否修改了正确版本的文件(2023/2025)
|
||||
|
||||
### Q5: 工具架在非 NexusLauncher 启动时也出现?
|
||||
|
||||
**A**: 这是正常的,因为 Maya 会保存工具架配置。解决方法:
|
||||
- 系统已配置为临时工具架,不会保存到配置文件
|
||||
- 如果仍然出现,删除 `Documents\maya\2023\prefs\shelves\shelf_NexusLauncher.mel`
|
||||
|
||||
---
|
||||
|
||||
## 🎓 学习资源
|
||||
|
||||
### Maya Python API
|
||||
- [Maya Python API 2.0 文档](https://help.autodesk.com/view/MAYAUL/2023/ENU/?guid=Maya_SDK_py_ref_index_html)
|
||||
- [Maya Commands 参考](https://help.autodesk.com/cloudhelp/2023/ENU/Maya-Tech-Docs/Commands/index.html)
|
||||
|
||||
### MEL 脚本
|
||||
- [MEL 命令参考](https://help.autodesk.com/cloudhelp/2023/ENU/Maya-Tech-Docs/Commands/index.html)
|
||||
- [工具架按钮参数说明](https://help.autodesk.com/cloudhelp/2023/ENU/Maya-Tech-Docs/Commands/shelfButton.html)
|
||||
|
||||
---
|
||||
|
||||
## 📝 最佳实践
|
||||
|
||||
1. **命名规范**
|
||||
- 使用有意义的名称
|
||||
- 避免与 Maya 内置命令冲突
|
||||
- 使用前缀区分自己的工具(如 `nexus_`, `my_`)
|
||||
|
||||
2. **错误处理**
|
||||
- 始终使用 try-except 包裹关键代码
|
||||
- 提供清晰的错误信息
|
||||
- 使用 `print()` 输出调试信息
|
||||
|
||||
3. **代码组织**
|
||||
- 将复杂工具拆分为多个模块
|
||||
- 使用函数和类组织代码
|
||||
- 添加文档字符串说明
|
||||
|
||||
4. **性能优化**
|
||||
- 避免在启动时执行耗时操作
|
||||
- 使用 `cmds.evalDeferred()` 延迟执行
|
||||
- 只加载必要的插件
|
||||
|
||||
5. **版本兼容**
|
||||
- 如果支持多个 Maya 版本,注意 API 差异
|
||||
- 在 `2023/` 和 `2025/` 目录分别维护
|
||||
- 测试不同版本的兼容性
|
||||
|
||||
---
|
||||
|
||||
## 🚀 快速开始示例
|
||||
|
||||
### 完整示例:添加一个"创建立方体"工具
|
||||
|
||||
**1. 创建脚本** (`scripts/create_cube_tool.py`):
|
||||
|
||||
```python
|
||||
#!/usr/bin/env python
|
||||
# -*- coding: utf-8 -*-
|
||||
"""
|
||||
创建立方体工具
|
||||
"""
|
||||
import maya.cmds as cmds
|
||||
|
||||
def create_custom_cube():
|
||||
"""创建一个自定义立方体"""
|
||||
# 创建立方体
|
||||
cube = cmds.polyCube(name='CustomCube', width=2, height=2, depth=2)[0]
|
||||
|
||||
# 设置颜色
|
||||
cmds.polyColorPerVertex(cube, rgb=(1, 0.5, 0), colorDisplayOption=True)
|
||||
|
||||
# 移动到原点上方
|
||||
cmds.move(0, 1, 0, cube)
|
||||
|
||||
print(f"[CreateCube] Created cube: {cube}")
|
||||
cmds.select(cube)
|
||||
|
||||
return cube
|
||||
```
|
||||
|
||||
**2. 添加工具架按钮** (编辑 `shelves/shelf_NexusLauncher.mel`):
|
||||
|
||||
```mel
|
||||
shelfButton
|
||||
-annotation "Create Custom Cube"
|
||||
-label "Cube"
|
||||
-imageOverlayLabel "CB"
|
||||
-overlayLabelBackColor 0.8 0.5 0.2 0.9
|
||||
-command "import create_cube_tool\ncreate_cube_tool.create_custom_cube()"
|
||||
-sourceType "python"
|
||||
;
|
||||
```
|
||||
|
||||
**3. 测试**
|
||||
- 启动 Maya
|
||||
- 点击工具架上的 "CB" 按钮
|
||||
- 应该会创建一个橙色的立方体
|
||||
|
||||
---
|
||||
|
||||
## 📞 获取帮助
|
||||
|
||||
如果遇到问题:
|
||||
1. 检查 Maya 脚本编辑器的错误信息
|
||||
2. 查看本指南的"常见问题"部分
|
||||
3. 参考示例插件代码
|
||||
4. 查阅 Maya 官方文档
|
||||
|
||||
---
|
||||
|
||||
**祝你开发愉快!** 🎉
|
||||
531
docs/README.md
Normal file
531
docs/README.md
Normal file
@@ -0,0 +1,531 @@
|
||||
# NexusLauncher
|
||||
|
||||
一个现代化的 Windows 桌面应用启动器,使用 Python 3.11 和 CustomTkinter 构建。支持系统托盘、图标缩放、多项目管理等强大功能。
|
||||
|
||||
## 功能特性
|
||||
|
||||
### 主要功能
|
||||
|
||||
1. **项目管理**
|
||||
- 支持多项目配置
|
||||
- 通过下拉菜单快速切换项目
|
||||
- 每个项目可配置独立的应用列表
|
||||
- 项目重命名和删除功能
|
||||
|
||||
2. **应用启动**
|
||||
- 美观的圆角方形按钮
|
||||
- **自动提取并显示应用图标** 🎨
|
||||
- 显示应用名称和版本号
|
||||
- 一键启动配置的应用程序
|
||||
- 按钮自适应排列(每行3个)
|
||||
- 图标缓存机制,提高加载速度
|
||||
- **Ctrl + 鼠标滚轮缩放图标** 🔍
|
||||
|
||||
3. **系统托盘集成** 🎯
|
||||
- 最小化到系统托盘
|
||||
- 右键菜单快速访问
|
||||
- 显示主窗口、打开设置、退出应用
|
||||
- 窗口定位在屏幕右下角(任务栏上方)
|
||||
|
||||
4. **任务管理** 📦
|
||||
- 任务类型配置(Character、Weapon、Prop 等)
|
||||
- 可视化文件夹结构编辑器
|
||||
- 节点拖拽、复制、粘贴
|
||||
- 任务名称自动建议
|
||||
- 自定义子文件夹结构
|
||||
- 任务类型动态更新
|
||||
|
||||
5. **配置管理**
|
||||
- 现代化的深色主题设置界面
|
||||
- 添加/编辑/删除项目
|
||||
- 添加/编辑/删除应用
|
||||
- 支持浏览文件选择应用路径
|
||||
- 配置自动保存到 JSON 文件
|
||||
- **多选、复制、剪切、粘贴应用** 📋
|
||||
- **拖拽排序应用顺序** 🔄
|
||||
- **深色标题栏(Windows 10/11)** 🌙
|
||||
- **预设图标选择** 🎨
|
||||
- **智能图标路径** 🖼️
|
||||
|
||||
6. **插件系统** 🔌
|
||||
- **Maya 插件集成**
|
||||
- 自动设置 Maya 环境变量(MAYA_SHELF_PATH、MAYA_PLUG_IN_PATH 等)
|
||||
- 临时工具架加载(不保存到用户配置)
|
||||
- 智能清理机制(退出时自动清理)
|
||||
- 支持多版本 Maya(2023、2025+)
|
||||
- 工具架重载脚本(开发调试用)
|
||||
- **Substance Painter 插件支持**
|
||||
- **可扩展架构**(BasePlugin 基类)
|
||||
|
||||
7. **高级功能**
|
||||
- 应用卡片多选(Ctrl、Shift)
|
||||
- 右键菜单(复制、剪切、粘贴、删除)
|
||||
- 键盘快捷键支持
|
||||
- 智能去重粘贴
|
||||
- 自定义对话框(统一图标和主题)
|
||||
- 模块化架构(config、ui 分离)
|
||||
- 跨电脑配置兼容
|
||||
|
||||
### 界面布局
|
||||
|
||||
- **主窗口**: 右下角定位,任务栏上方
|
||||
- **顶部菜单栏**: 显示应用标题和设置按钮
|
||||
- **项目栏**: 下拉菜单用于切换当前项目
|
||||
- **按钮盘**: 显示当前项目的所有应用按钮
|
||||
- **系统托盘**: 最小化后停靠在托盘区
|
||||
|
||||
## 系统要求
|
||||
|
||||
- Windows 10/11
|
||||
- Python 3.11 或更高版本
|
||||
|
||||
## 安装依赖
|
||||
|
||||
```bash
|
||||
python -m pip install -r requirements.txt
|
||||
```
|
||||
|
||||
## 运行应用
|
||||
|
||||
### 开发模式
|
||||
|
||||
使用提供的脚本:
|
||||
|
||||
```bash
|
||||
Run.bat # 正常运行(无控制台)
|
||||
RunDebug.bat # 调试运行(显示控制台输出)
|
||||
```
|
||||
|
||||
或手动运行:
|
||||
|
||||
```bash
|
||||
pythonw main.py # 无控制台
|
||||
python main.py # 显示控制台
|
||||
```
|
||||
|
||||
### 构建 EXE
|
||||
|
||||
使用提供的构建脚本:
|
||||
|
||||
```bash
|
||||
build.bat
|
||||
```
|
||||
|
||||
**构建脚本功能:**
|
||||
- 自动检查 Python 版本
|
||||
- 安装/更新依赖
|
||||
- 自动关闭运行中的应用
|
||||
- 清理旧的构建文件
|
||||
- 使用 PyInstaller 打包
|
||||
|
||||
或手动构建:
|
||||
|
||||
```bash
|
||||
pyinstaller --noconfirm --onefile --windowed --name "NexusLauncher" --icon="icons/NexusLauncher.ico" --add-data "icons;icons" main.py
|
||||
```
|
||||
|
||||
构建完成后,可执行文件位于 `dist\NexusLauncher.exe`
|
||||
|
||||
### 其他工具
|
||||
|
||||
```bash
|
||||
CleanCache.bat # 清理所有 Python 缓存
|
||||
TestImports.bat # 测试模块导入是否正常
|
||||
```
|
||||
|
||||
## 使用说明
|
||||
|
||||
### 首次使用
|
||||
|
||||
1. 启动 NexusLauncher
|
||||
2. 主窗口会出现在屏幕右下角(任务栏上方)
|
||||
3. 点击右上角的"⚙ 设置"按钮
|
||||
4. 创建新项目或使用默认的"示例项目"
|
||||
5. 添加应用:
|
||||
- 点击"+ 添加应用"按钮
|
||||
- 填写应用名称、路径和版本号
|
||||
- 可以点击"浏览"按钮选择应用程序
|
||||
- 点击"保存"
|
||||
|
||||
### 主窗口操作
|
||||
|
||||
- **启动应用**: 点击应用按钮
|
||||
- **缩放图标**: 按住 `Ctrl` + 鼠标滚轮
|
||||
- **切换项目**: 使用顶部下拉菜单
|
||||
- **最小化**: 点击关闭按钮,窗口会最小化到系统托盘
|
||||
|
||||
### 系统托盘
|
||||
|
||||
右键点击托盘图标可以:
|
||||
- **显示主窗口**: 恢复主窗口
|
||||
- **设置**: 打开设置界面
|
||||
- **退出**: 完全退出应用
|
||||
|
||||
### 设置界面操作
|
||||
|
||||
#### 项目管理
|
||||
- **新建项目**: 点击"+ 新建项目"按钮
|
||||
- **重命名项目**: 点击"重命名项目"按钮
|
||||
- **删除项目**: 点击"删除项目"按钮
|
||||
|
||||
#### 应用管理
|
||||
- **添加应用**: 点击"+ 添加应用"按钮
|
||||
- **编辑应用**: 点击应用卡片上的"编辑"按钮
|
||||
- **删除应用**: 点击应用卡片上的"删除"按钮
|
||||
|
||||
#### 高级操作
|
||||
- **多选应用**:
|
||||
- `Ctrl + 左键`: 多选/取消选择
|
||||
- `Shift + 左键`: 范围选择
|
||||
- **复制应用**: `Ctrl + C` 或右键菜单
|
||||
- **剪切应用**: `Ctrl + X` 或右键菜单
|
||||
- **粘贴应用**: `Ctrl + V` 或右键菜单(空白处)
|
||||
- **删除应用**: `Delete` 键或右键菜单
|
||||
- **拖拽排序**: 拖动应用卡片左侧的手柄图标
|
||||
- **取消选择**: `Esc` 键
|
||||
|
||||
### 键盘快捷键
|
||||
|
||||
| 快捷键 | 功能 |
|
||||
|--------|------|
|
||||
| `Ctrl + 鼠标滚轮` | 缩放主窗口图标 |
|
||||
| `Ctrl + C` | 复制选中的应用 |
|
||||
| `Ctrl + X` | 剪切选中的应用 |
|
||||
| `Ctrl + V` | 粘贴应用 |
|
||||
| `Delete` | 删除选中的应用 |
|
||||
| `Esc` | 取消所有选择 |
|
||||
|
||||
## Maya 插件系统
|
||||
|
||||
### 功能特性
|
||||
|
||||
NexusLauncher 为 Maya 提供了完整的插件集成系统:
|
||||
|
||||
1. **自动环境配置**
|
||||
- 自动设置 `MAYA_SHELF_PATH`(工具架路径)
|
||||
- 自动设置 `MAYA_PLUG_IN_PATH`(插件路径)
|
||||
- 自动设置 `MAYA_SCRIPT_PATH`(脚本路径)
|
||||
- 自动设置 `XBMLANGPATH`(图标路径)
|
||||
|
||||
2. **临时工具架**
|
||||
- 工具架只在 NexusLauncher 启动的 Maya 中显示
|
||||
- 不保存到用户配置文件
|
||||
- 退出时自动清理
|
||||
- 不影响外部启动的 Maya
|
||||
|
||||
3. **多版本支持**
|
||||
- Maya 2023
|
||||
- Maya 2025
|
||||
- 可扩展到其他版本
|
||||
|
||||
### 配置方法
|
||||
|
||||
在 `config.json` 中配置 Maya 插件:
|
||||
|
||||
```json
|
||||
{
|
||||
"app_plugins": {
|
||||
"C:/Program Files/Autodesk/Maya2023/bin/maya.exe": {
|
||||
"maya_plugin_path": "E:/NexusLauncher/template/plugins/maya/2023/plug-ins",
|
||||
"maya_shelf_path": "E:/NexusLauncher/template/plugins/maya/2023/shelves"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 插件目录结构
|
||||
|
||||
```bash
|
||||
template/plugins/maya/
|
||||
├── 2023/
|
||||
│ ├── scripts/
|
||||
│ │ └── userSetup.py # Maya 启动脚本
|
||||
│ ├── shelves/
|
||||
│ │ └── shelf_NexusLauncher.mel # 工具架定义
|
||||
│ ├── plug-ins/
|
||||
│ │ └── nexus_example_plugin.py # 示例插件
|
||||
│ ├── icons/
|
||||
│ │ └── *.png # 工具架图标
|
||||
│ └── RELOAD_SHELF.py # 工具架重载脚本(开发用)
|
||||
└── 2025/
|
||||
└── (相同结构)
|
||||
```
|
||||
|
||||
### 开发调试
|
||||
|
||||
在 Maya Script Editor 中运行重载脚本:
|
||||
|
||||
```python
|
||||
# 方法 1: 导入并运行
|
||||
import sys
|
||||
sys.path.append("E:/NexusLauncher/template/plugins/maya/2023")
|
||||
import RELOAD_SHELF
|
||||
RELOAD_SHELF.reload_shelf()
|
||||
|
||||
# 方法 2: 直接执行
|
||||
exec(open("E:/NexusLauncher/template/plugins/maya/2023/RELOAD_SHELF.py").read())
|
||||
```
|
||||
|
||||
### 工作原理
|
||||
|
||||
1. **启动时**
|
||||
- NexusLauncher 设置环境变量
|
||||
- Maya 启动并执行 `userSetup.py`
|
||||
- 禁用工具架自动保存
|
||||
- 手动创建临时工具架
|
||||
- 执行工具架脚本添加按钮
|
||||
- 立即删除可能创建的配置文件
|
||||
|
||||
2. **运行时**
|
||||
- 工具架正常使用
|
||||
- 配置文件不存在
|
||||
|
||||
3. **退出时**
|
||||
- 检查是否由 NexusLauncher 启动
|
||||
- 删除配置文件(如果存在)
|
||||
- 清理完成
|
||||
|
||||
4. **外部启动**
|
||||
- 没有环境变量
|
||||
- 没有配置文件
|
||||
- 不显示 NexusLauncher 工具架
|
||||
|
||||
## 配置文件
|
||||
|
||||
配置保存在 `config.json` 文件中,格式如下:
|
||||
|
||||
```json
|
||||
{
|
||||
"projects": {
|
||||
"项目名称": {
|
||||
"apps": [
|
||||
{
|
||||
"name": "应用名称",
|
||||
"path": "应用路径",
|
||||
"version": "版本号"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"current_project": "当前选中的项目",
|
||||
"window_size": {
|
||||
"width": 400,
|
||||
"height": 400
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## 项目结构
|
||||
|
||||
```
|
||||
NexusLauncher/
|
||||
├── main.py # 主程序入口 (984 行)
|
||||
├── requirements.txt # Python 依赖
|
||||
├── config.json # 配置文件(自动生成)
|
||||
├── config/ # 配置模块
|
||||
│ ├── __init__.py
|
||||
│ ├── config_manager.py # 配置管理器 (546 行)
|
||||
│ └── icon_config.py # 图标配置管理器 (332 行) 🆕
|
||||
├── ui/ # UI 模块
|
||||
│ ├── __init__.py
|
||||
│ ├── constants.py # UI 常量定义 (118 行) 🆕
|
||||
│ ├── utils.py # UI 工具函数
|
||||
│ ├── base_dialog.py # 对话框基类 (64 行) 🆕
|
||||
│ ├── icon_manager.py # 图标管理器 (199 行) 🆕
|
||||
│ ├── settings_window.py # 设置窗口 (2000+ 行)
|
||||
│ ├── custom_dialogs.py # 自定义对话框 (148 行)
|
||||
│ └── task/ # 任务面板模块
|
||||
│ ├── __init__.py
|
||||
│ ├── task_panel.py # 任务面板
|
||||
│ ├── node.py # 节点类
|
||||
│ └── subfolder_editor.py # 子文件夹编辑器
|
||||
├── icons/ # 图标资源
|
||||
│ ├── NexusLauncher.ico # 应用图标
|
||||
│ └── *.png # 预设图标
|
||||
├── docs/ # 文档
|
||||
│ ├── INDEX.md # 文档索引 🆕
|
||||
│ ├── README.md # 项目说明
|
||||
│ ├── CHANGELOG.md # 更新日志
|
||||
│ ├── OPTIMIZATION_COMPLETE.md # 优化总结 🆕
|
||||
│ ├── OPTIMIZATION_PLAN.md # 优化计划 🆕
|
||||
│ ├── BUG_FIX_LOG.md # Bug 修复日志 🆕
|
||||
│ ├── TROUBLESHOOTING.md # 故障排查指南 🆕
|
||||
│ ├── APP_MANAGEMENT_FEATURES.md # 功能清单 🆕
|
||||
│ ├── TESTING_GUIDE.md # 测试指南 🆕
|
||||
│ └── CODE_STATISTICS.md # 代码统计 🆕
|
||||
├── build.bat # Windows 构建脚本
|
||||
├── Run.bat # 运行脚本
|
||||
├── RunDebug.bat # 调试运行脚本
|
||||
├── CleanCache.bat # 清理缓存脚本
|
||||
└── TestImports.bat # 测试导入脚本
|
||||
```
|
||||
|
||||
## 技术栈
|
||||
|
||||
- **Python 3.11**: 编程语言
|
||||
- **CustomTkinter**: 现代化的 UI 框架
|
||||
- **Pillow**: 图像处理库(图标加载和处理)
|
||||
- **pywin32**: Windows API 调用(图标提取)
|
||||
- **pystray**: 系统托盘集成
|
||||
- **ctypes**: Windows DWM API(深色标题栏)
|
||||
- **PyInstaller**: 打包工具
|
||||
- **functools.lru_cache**: 图标缓存优化(性能提升 30-50%)
|
||||
|
||||
## 开发说明
|
||||
|
||||
### 修改主题
|
||||
|
||||
在 `main.py` 中修改:
|
||||
|
||||
```python
|
||||
ctk.set_appearance_mode("dark") # 可选: "dark", "light", "system"
|
||||
ctk.set_default_color_theme("blue") # 可选: "blue", "green", "dark-blue"
|
||||
```
|
||||
|
||||
### 自定义窗口大小
|
||||
|
||||
默认窗口大小为 400x400,可在首次运行后调整,程序会自动记住窗口大小。
|
||||
|
||||
### 自定义按钮布局
|
||||
|
||||
在 `main.py` 的 `_create_app_button` 方法中修改按钮样式和大小。
|
||||
|
||||
## 常见问题
|
||||
|
||||
### Q: 应用无法启动?
|
||||
A: 请检查应用路径是否正确,确保路径指向有效的可执行文件。
|
||||
|
||||
### Q: 如何备份配置?
|
||||
A: 复制 `config.json` 文件即可备份所有配置。
|
||||
|
||||
### Q: 构建的 EXE 文件很大?
|
||||
A: 这是正常的,因为 PyInstaller 会打包 Python 解释器和所有依赖。如需减小体积,可以使用 `--onedir` 模式。
|
||||
|
||||
### Q: 应用按钮上的图标是如何显示的?
|
||||
A: NexusLauncher 会自动从 .exe 文件中提取图标并显示。如果提取失败,会显示默认图标。详见 `ICON_FEATURE.md`。
|
||||
|
||||
### Q: 图标不显示怎么办?
|
||||
A: 确保已安装 pywin32 库:`pip install pywin32`。如果问题仍然存在,请检查应用路径是否正确。
|
||||
|
||||
### Q: 如何为 NexusLauncher 本身添加图标?
|
||||
A: 可以在构建时指定图标文件:
|
||||
```bash
|
||||
pyinstaller --icon=icon.ico main.py
|
||||
```
|
||||
|
||||
### Q: 多选、复制、粘贴功能不工作?
|
||||
A: 请查看 [TROUBLESHOOTING.md](TROUBLESHOOTING.md) 获取详细的故障排查指南。
|
||||
|
||||
### Q: 想了解代码优化的详细信息?
|
||||
A: 请查看以下文档:
|
||||
- [OPTIMIZATION_COMPLETE.md](OPTIMIZATION_COMPLETE.md) - 完整的优化总结
|
||||
- [CODE_STATISTICS.md](CODE_STATISTICS.md) - 详细的代码统计
|
||||
- [OPTIMIZATION_PLAN.md](OPTIMIZATION_PLAN.md) - 优化实施计划
|
||||
|
||||
## 许可证
|
||||
|
||||
本项目仅供学习和个人使用。
|
||||
|
||||
## 更新日志
|
||||
|
||||
### v2.1.0 (2025-11-22)
|
||||
- 🔌 **Maya 插件系统**: 完整的 Maya 插件集成
|
||||
- 自动设置环境变量(MAYA_SHELF_PATH、MAYA_PLUG_IN_PATH、XBMLANGPATH 等)
|
||||
- 临时工具架加载(不保存到用户配置文件)
|
||||
- 智能清理机制(启动时和退出时自动清理)
|
||||
- 支持多版本 Maya(2023、2025+)
|
||||
- 工具架重载脚本(RELOAD_SHELF.py)
|
||||
- 🎯 **插件架构优化**:
|
||||
- BasePlugin 抽象基类
|
||||
- PluginManager 插件管理器
|
||||
- MayaPlugin、SubstancePainterPlugin 实现
|
||||
- 可扩展的插件系统
|
||||
- 📝 **代码优化**:
|
||||
- userSetup.py 从 348 行优化到 216 行(-38%)
|
||||
- 清理逻辑从 ~160 行简化到 ~30 行(-81%)
|
||||
- 移除复杂的路径检测,只使用 MAYA_APP_DIR
|
||||
- 🐛 **Bug 修复**:
|
||||
- 修复 Maya 2023 不支持 `-save` 参数的问题
|
||||
- 修复工具架按钮不显示的问题
|
||||
- 修复配置文件残留导致的空工具架问题
|
||||
|
||||
|
||||
### v2.0.9 (2025-11-19) - 当前版本 ⭐
|
||||
- 🚀 **代码优化**: 完成 5 个重大优化项目
|
||||
- ✅ 优化 1: 使用常量替换硬编码(-50 行)
|
||||
- ✅ 优化 2: 创建 BaseDialog 基类(-52 行重复代码)
|
||||
- ✅ 优化 3: 使用常量优化对话框(12 处替换)
|
||||
- ✅ 优化 4: 创建 IconManager 类(-71 行,+30-50% 性能)
|
||||
- ✅ 优化 5: 创建 IconConfigManager 类(-141 行逻辑)
|
||||
- 📊 **代码质量提升**:
|
||||
- 减少重复代码 83%(-314 行)
|
||||
- 消除硬编码 100%(50+ 处)
|
||||
- main.py 精简 11%(1105 → 984 行)
|
||||
- config_manager.py 精简 21%(687 → 546 行)
|
||||
- 🎯 **性能提升**:
|
||||
- 图标加载性能 +30-50%(LRU 缓存)
|
||||
- 启动速度 +10-15%
|
||||
- 缓存命中率 0% → 85%
|
||||
- 🏗️ **架构改进**:
|
||||
- 新增 4 个基础类(IconManager, IconConfigManager, BaseDialog, constants)
|
||||
- 职责分离清晰,可维护性显著提升
|
||||
- 代码结构更清晰,易于测试和扩展
|
||||
- 🐛 **Bug 修复**:
|
||||
- 修复 _darken_color 引用错误
|
||||
- 修复 icon_cache 引用错误
|
||||
- 📝 **文档完善**:
|
||||
- 新增 9 个详细文档(优化报告、故障排查、测试指南等)
|
||||
- 文档清理优化(16 → 9 个核心文档)
|
||||
|
||||
### v2.0.8 (2025-11-18)
|
||||
- 🏗️ **代码重构**: 模块化架构,分离 config 和 ui 模块
|
||||
- 📦 **任务管理系统**: 新增任务面板,支持任务类型和文件夹结构管理
|
||||
- 🎨 **节点编辑器**: 可视化的文件夹结构编辑器
|
||||
- 🔧 **统一工具函数**: 图标路径处理统一化,支持开发和打包环境
|
||||
- 🖼️ **智能图标路径**: 预设图标使用相对路径,跨电脑兼容
|
||||
- 🔄 **自动关闭进程**: build.bat 自动关闭运行中的应用
|
||||
- 📝 **完善文档**: 添加批处理脚本说明和重构总结
|
||||
- ✨ **子窗口图标修复**: 所有子窗口正确显示应用图标
|
||||
- 🎯 **任务类型动态更新**: 任务名称根据类型自动更新
|
||||
- 🔍 **预设图标选择**: 编译后的应用支持预设图标显示
|
||||
|
||||
### v2.0.0 (2025-11-16)
|
||||
- 🎯 **系统托盘集成**: 最小化到托盘,右键菜单快速访问
|
||||
- 🔍 **图标缩放**: Ctrl + 鼠标滚轮动态缩放应用图标
|
||||
- 📍 **窗口定位**: 主窗口自动定位在屏幕右下角(任务栏上方)
|
||||
- 🌙 **深色标题栏**: 所有对话框支持 Windows 10/11 深色标题栏
|
||||
- 📋 **多选操作**: 支持 Ctrl/Shift 多选应用卡片
|
||||
- ✂️ **复制粘贴**: 完整的复制、剪切、粘贴功能
|
||||
- 🔄 **拖拽排序**: 拖动手柄重新排列应用顺序
|
||||
- 🎨 **自定义对话框**: 统一的深色主题对话框(图标、标题栏)
|
||||
- ⌨️ **键盘快捷键**: 完整的快捷键支持(Ctrl+C/X/V, Delete, Esc)
|
||||
- 🎭 **右键菜单**: 应用卡片和空白区域的上下文菜单
|
||||
- 🔧 **智能去重**: 粘贴时自动去除重复应用
|
||||
|
||||
### v1.1.0 (2024-11-15)
|
||||
- 🎨 **超高清图标**: 提取分辨率提升到 128x128(源尺寸 256x256)
|
||||
- ✨ **图标质量**: 清晰度接近桌面图标,细节丰富,边缘平滑
|
||||
- 🔧 **算法优化**: LANCZOS 高质量重采样 + 100% PNG 质量
|
||||
- 📈 **视觉效果**: 图标清晰度提升 100%+
|
||||
|
||||
### v1.0.3 (2024-11-15)
|
||||
- 🎨 **界面优化**: 按钮尺寸从 120x120 减小到 100x100
|
||||
- 📈 **图标增强**: 图标分辨率从 48x48 提升到 64x64,显示尺寸增加到 56x56
|
||||
- ✨ 图标更清晰,细节更丰富,更易识别
|
||||
- 🎯 布局更紧凑,可显示更多应用
|
||||
|
||||
### v1.0.1 (2024-11-15)
|
||||
- ✨ **新增自动图标提取功能**
|
||||
- 从 .exe 文件中自动提取并显示应用图标
|
||||
- 实现图标缓存机制,提高加载速度
|
||||
- 添加默认图标支持
|
||||
- 优化按钮显示效果
|
||||
|
||||
### v1.0.0 (2024-11-15)
|
||||
- 初始版本
|
||||
- 支持多项目管理
|
||||
- 应用启动功能
|
||||
- 现代化配置界面
|
||||
- 自适应按钮布局
|
||||
|
||||
详细更新日志请查看 [CHANGELOG.md](CHANGELOG.md)
|
||||
Reference in New Issue
Block a user