MzTranslator/plans/plan.md

79 lines
2.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# MzTranslator 架構設計
## 概述
使用 Maya Python API 建立一個 `.mz` 檔案格式的 Maya Translator 插件。
## .mz 檔案格式
- 本質是 ZIP 壓縮格式
- 內部包含 `data.ma` 文件Maya ASCII 格式)
## 系統架構
```mermaid
graph TB
subgraph Maya
A[Maya GUI] -->|另存為/開啟| B[mz_translator.py]
end
subgraph Core
B --> D[mz_writer]
B --> E[mz_reader]
end
subgraph FileSystem
D --> F[.mz]
E --> F
end
```
## 實現步驟
### 1. 文件結構
```
d:/workspace/MzTranslator/
├── mz_translator.py # 插件入口,包含 MPxFileTranslator 和插件註冊
└── mz_core/
├── __init__.py # 模組初始化
├── reader.py # 讀取模組
└── writer.py # 寫入模組
```
### 2. mz_translator.py
- 繼承 `maya.api.MPxFileTranslator`
- 包含 `initializePlugin()``uninitializePlugin()` 函數
- `writer(fileObject, options)`: 調用 mz_writer
- `reader(fileObject, options)`: 調用 mz_reader
- `haveWriteSupport()` / `haveReadSupport()`: 返回 True
- `fileType()` / `defaultExtension()`: 返回 "mz"
- `optionsScript()`: Export Options UI
### 3. MzTranslator/mz/core/mz_writer.py
- `write_to_mz(filePath, options)`: 將 Maya 場景寫入 .mz
- 內部調用 Maya API 寫入 temp data.ma
- 使用 zipfile 壓縮成 .mz
### 4. MzTranslator/mz/core/mz_reader.py
- `read_from_mz(filePath, buffer)`: 從 .mz 讀取
- 使用 zipfile 解壓縮
- 讀取到內存緩衝區
### 5. Export Options 對話框
- 版本號
- 壓縮等級
## 技術要點
1. **MPxFileTranslator 繼承**: 使用 `maya.app.audio.MPxFileTranslator`
2. **Stream I/O**: reader 使用 buffer/stream 讀取
3. **臨時文件管理**: 使用 `tempfile` 模組
4. **Error Handling**: 處理各種異常情況
## 預期行為
- **保存**: Maya 另存為 → 選擇 .mz → 導出到 temp data.ma → 壓縮成 .mz
- **開啟**: 選擇 .mz 文件 → 解壓讀取 data.ma → 加載到 Maya