MzTranslator/README.md

187 lines
5.8 KiB
Markdown

# MzTranslator
Maya `.mz` file format Translator plugin, developed using Maya Python API. This plugin allows Maya to read and write `.mz` files, which are ZIP-compressed archives containing Maya ASCII (`.ma`) files.
## File Format
`.mz` files are ZIP compressed archives that contain a `data.ma` file (Maya ASCII format). This format provides:
- Compression: Reduces file size compared to plain `.ma` files
- Single file: All scene data in one archive
## Directory Structure
```
d:/workspace/MzTranslator/
├── MzTranslate.mod # Maya module definition file
├── setup.py # Setup configuration (Cython build)
├── plug-ins/
│ └── mz_translator.py # Plugin entry point (MPxFileTranslator)
├── python/
│ └── mz_core/
│ ├── __init__.py # Module initialization & exports
│ ├── reader.py # Reader module (extract .mz to temp)
│ ├── reader.c # Reader C extension (compiled)
│ ├── writer.py # Writer module (export scene to .mz)
│ └── writer.c # Writer C extension (compiled)
├── plans/
│ └── plan.md # Project architecture plan
├── .vscode/
│ └── settings.json # VS Code settings
└── README.md # This documentation
```
## Project Components
### MzTranslate.mod
Maya module definition file that defines the module name and Python path.
### plug-ins/mz_translator.py
Main plugin entry point that:
- Implements `MzFileTranslator` class inheriting from `maya.api.OpenMayaMPx.MPxFileTranslator`
- Registers the plugin with Maya via `initializePlugin()` and `uninitializePlugin()`
- Provides file identification via `identifyFile()`
- Handles writing via `writer()` method
- Handles reading via `reader()` method
- Provides export options UI via `optionsScript()`
### python/mz_core/
#### __init__.py
Module initialization that exports:
- `read_scene_from_mz` - Read scene from .mz file
- `read_to_temp_file` - Extract .mz to temporary file
- `get_file_info` - Get .mz file information
- `write_scene_to_mz` - Write scene to .mz file
- `get_export_options` - Get export options
#### reader.py
Reader module that:
- `read_scene_from_mz()` - Reads .mz file, returns content or writes to buffer
- `read_to_temp_file()` - Extracts .mz to temporary directory
- `get_file_info()` - Returns file size and archive contents
#### writer.py
Writer module that:
- `write_scene_to_mz()` - Exports current Maya scene to .mz file
- `_export_to_ma()` - Exports scene as Maya ASCII format
- `get_export_options()` - Returns compression level options
## Installation
### Method 1: Direct Python Module Loading
Execute in Maya's Python Script Editor:
```python
import sys
# Add plugin path
plugin_path = 'd:/workspace/MzTranslator'
if plugin_path not in sys.path:
sys.path.insert(0, plugin_path)
# Load plugin
import plug-ins.mz_translator as mz_translator
import maya.cmds as cmds
cmds.loadPlugin(mz_translator.__file__)
```
### Method 2: Using PluginManager
1. Open Maya
2. Go to `Window > Settings/Preferences > Plugin Manager`
3. Click `Browse` to find `mz_translator.py` in the `plug-ins` folder
4. Check `Loaded` to load the plugin
### Method 3: Maya Module (Optional)
Copy `MzTranslate.mod` to Maya's modules directory and configure the path.
## Usage
### Save/Export
1. Select `File > Save As...` or `File > Export All...`
2. Select `MayaZip (*.mz)` from the file type dropdown
3. Choose save location and click `Save`
4. Configure compression level in the options dialog (0=none, 9=maximum)
### Open/Import
1. Select `File > Open...` or `File > Import...`
2. Select `MayaZip (*.mz)` from the file type dropdown
3. Select the `.mz` file and click `Open`
## Features
- **Read Support**: Extract and read `data.ma` from `.mz` files
- **Write Support**: Export Maya scenes to `.mz` files with compression
- **Export Options**: Configurable compression level (0-9)
- **File Identification**: Automatic detection of `.mz` format
- **Temporary File Management**: Automatic cleanup of temporary files
## Technical Details
### writer.py
- Uses `tempfile` to create temporary directory
- Uses Maya's `cmds.file()` to export as `.ma` format
- Uses `zipfile` to compress `data.ma` into `.mz`
- Supports configurable compression levels (0-9)
### reader.py
- Uses `zipfile` to read `.mz` files
- Extracts `data.ma` to temporary directory
- Uses Maya's `MFileIO` or `cmds.file()` to read the scene
- Auto cleanup temporary files via `SceneClosed` scriptJob
### mz_translator.py
- Inherits `maya.api.OpenMayaMPx.MPxFileTranslator`
- Implements all required virtual methods
- File translator name: "MayaZip"
- Extension: "mz"
- Provides export options UI dialog
## Requirements
- Maya 2017 or later
- Maya Python API
- Python standard library (zipfile, tempfile, os, etc.)
## Version Info
- Version: 1.0.0
- API: Maya Python API (OpenMayaMPx)
- Supported Maya versions: 2017+
## Troubleshooting
### Issue: Plugin fails to load
Verify plugin path is correct:
```python
import plug-ins.mz_translator as mz_translator
print(mz_translator.__file__) # Confirm path is correct
```
Also check for import errors in the mz_core module.
### Issue: Cannot recognize .mz files
Confirm `.mz` file is valid ZIP format (contains `data.ma`):
```python
import zipfile
with zipfile.ZipFile('your_file.mz', 'r') as zf:
print(zf.namelist()) # Should contain 'data.ma'
```
### Issue: Scene not updated after reading
Check if temporary files have permission issues, or try restarting Maya. The plugin registers a `SceneClosed` scriptJob for cleanup.
### Issue: Export options not appearing
The options dialog is provided via `optionsScript()` method. Some Maya versions may handle this differently.