- Added BalloonTool workspace tool to facilitate the extraction of balloon meshes in the 3D viewport. - Implemented ActivateBalloonTool operator to activate the Balloon Lasso Tool. - Refactored BalloonLasso operator into ExtractBalloon for better clarity and functionality. - Enhanced properties for balloon extraction, including mode, thickness, resolution, and material reuse options. - Updated SnapFormSettings to include new balloon-related properties. - Improved material and image handling for balloon extraction, ensuring compatibility and reusability. - Added tests to validate the registration and functionality of the new balloon tools and properties.
121 lines
4.1 KiB
Markdown
121 lines
4.1 KiB
Markdown
# 程序设计、开发与许可证
|
||
|
||
## 程序设计
|
||
|
||
SnapForm 分为 Blender 交互层、BlendJob Runtime 和 Job Server 计算层。
|
||
|
||
```mermaid
|
||
flowchart LR
|
||
UI["菜单 / Panel"] --> Operator["Feature Operator"]
|
||
Operator --> Runtime["JobRuntime"]
|
||
Runtime --> Job["Server Job"]
|
||
Job --> Files["Job Directory"]
|
||
Files --> Response["Operator Response"]
|
||
Response --> Scene["Blender Scene"]
|
||
```
|
||
|
||
Blender 交互层管理 UI、RNA 状态、任务参数和结果导入。Runtime 管理 Environment、Server、队列、进度与取消。Server Job 组合媒体、模型、几何和输出模块。完整运行设计见 [Job Server](server.md)。
|
||
|
||
### 代码组织
|
||
|
||
| 位置 | 内容 |
|
||
| --- | --- |
|
||
| `__init__.py` | Blender 类型、菜单与 Runtime 注册 |
|
||
| `menu.py`、`panel.py` | 用户入口 |
|
||
| `preferences.py`、`properties.py` | 扩展配置与 Scene 状态 |
|
||
| `runtime.py` | JobRuntime 配置 |
|
||
| `operators/` | Blender 功能与结果导入 |
|
||
| `server/jobs/` | Server 工作流 |
|
||
| `server/models/` | ONNX 模型适配 |
|
||
| `server/geometry/` | 纯数据几何处理 |
|
||
| `server/outputs/` | 文件序列化 |
|
||
| `server/media/` | 媒体输入 |
|
||
| `assets/O_SnapForm.blend` | Geometry Nodes 与材质资产 |
|
||
|
||
Depth Plane、Surface、Background 和 Balloon 按功能组织。一个功能的入口、请求和 Blender 回写放在一起;跨功能的图片、材质和参数处理放在 `operators/common.py`、`operators/image.py` 与 `operators/material.py`。
|
||
|
||
Server 的模型模块返回 Prediction,几何模块处理数组与网格,输出模块写文件。Blender 数据只在 Operator Response 的主线程阶段创建。
|
||
|
||
## 项目结构
|
||
|
||
```text
|
||
.
|
||
├── README.md
|
||
├── docs/
|
||
├── pack.py
|
||
├── sync_models.py
|
||
├── src/snapform/
|
||
│ ├── blender_manifest.toml
|
||
│ ├── runtime.py
|
||
│ ├── menu.py
|
||
│ ├── panel.py
|
||
│ ├── preferences.py
|
||
│ ├── properties.py
|
||
│ ├── operators/
|
||
│ ├── server/
|
||
│ ├── assets/
|
||
│ └── wheels/
|
||
├── tests/
|
||
└── tools/
|
||
```
|
||
|
||
## 开发命令
|
||
|
||
在项目根目录使用 Git Bash:
|
||
|
||
```bash
|
||
uv sync
|
||
uv run pytest
|
||
uv run pytest tests/test_addon.py tests/test_manifest.py tests/test_pack.py -v
|
||
uv run python pack.py
|
||
```
|
||
|
||
`pack.py` 为 Windows x64、macOS Apple Silicon 与 Linux x64 构建扩展 ZIP 到 `dist/`。依赖、wheel 或 Manifest 改变后,应同步检查 `pyproject.toml`、`uv.lock`、`blender_manifest.toml` 与打包测试。
|
||
|
||
CI 分为三条流程:
|
||
|
||
- `test.yml`:在 push、Pull Request 与手动触发时运行测试
|
||
- `build.yml`:响应 `v*` tag,测试后构建并上传 Release
|
||
- `docs.yml`:文档变化后构建并部署站点
|
||
|
||
## 文档
|
||
|
||
本地预览和严格构建:
|
||
|
||
```bash
|
||
uv run --only-group docs mkdocs serve
|
||
uv run --only-group docs mkdocs build
|
||
```
|
||
|
||
版本化发布可使用 Mike:
|
||
|
||
```bash
|
||
uv run --only-group docs mike deploy <version> -p
|
||
uv run --only-group docs mike set-default <version> -p
|
||
```
|
||
|
||
自动部署将 MkDocs 站点发布到专用 Cloudflare Worker。仓库需要配置 `CLOUDFLARE_ACCOUNT_ID`、`CLOUDFLARE_API_TOKEN` 和 `CLOUDFLARE_WORKER_NAME`。Worker 路由对应 `docs.omoolab.xyz/snapform/*`。
|
||
|
||
## 资产构建与验证
|
||
|
||
`tools/` 中的资产脚本依赖 `bpy`,应由 Blender 执行:
|
||
|
||
```bash
|
||
BLENDER_BIN="/c/Program Files/Blender Foundation/Blender 4.5/blender.exe"
|
||
|
||
"$BLENDER_BIN" --background --python tools/build_geometry_nodes_asset.py
|
||
"$BLENDER_BIN" --background --python tools/validate_depth_plane_asset.py
|
||
"$BLENDER_BIN" --background --python tools/validate_geometry_nodes_asset.py
|
||
"$BLENDER_BIN" --background --python tools/validate_moge_depth_plane.py
|
||
"$BLENDER_BIN" --background --python tools/validate_moge_surface.py
|
||
```
|
||
|
||
修改节点组、材质组或资产接口后,运行对应验证脚本和完整测试。Python、文档或打包逻辑变化无需重建 `.blend` 资产。
|
||
|
||
## 上游与许可证
|
||
|
||
- Depth Anything 3 代码采用 Apache 2.0
|
||
- BEN2 ONNX 模型采用其仓库声明的 Apache 2.0 License
|
||
- SnapForm Extension 代码采用 GPL-3.0-or-later
|
||
- 模型权重许可证由所选 Hugging Face 模型仓库决定
|