Files
ViewDesignEngine/docs/dev-guide/architecture.md
T

241 lines
15 KiB
Markdown
Raw Normal View History

# 架构概览
## 1. 整体架构
ViewDesignEngine 采用分层架构,从底层数学基础设施到高层领域建模,层层递进。v6.0 引入了插件系统,支持第三方扩展。
```
┌─────────────────────────────────────────────────────────────────┐
│ 应用层 (Application) │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌────────────────┐ │
│ │ C++ API │ │ Python绑定│ │ C API │ │ 插件系统 (v6) │ │
│ │ (头文件) │ │(pybind11) │ │ (vde_capi)│ │ PluginManager │ │
│ └─────┬─────┘ └─────┬────┘ └─────┬────┘ └───────┬────────┘ │
│ │ │ │ │ │
├────────┴──────────────┴─────────────┴───────────────┴────────────┤
│ 领域建模层 (Domain) │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────────────┐ │
│ │ B-Rep │ │ SDF │ │ Sketch │ │ CAM │ │
│ │ 实体建模 │ │ 隐式建模 │ │ 草图约束 │ │ 加工策略 │ │
│ └─────┬─────┘ └─────┬────┘ └─────┬────┘ └────────┬─────────┘ │
│ │ │ │ │ │
├────────┴──────────────┴─────────────┴───────────────┴────────────┤
│ 几何处理层 (Geometry) │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────────────┐ │
│ │ Curves │ │ Mesh │ │ Boolean │ │ Collision │ │
│ │ 曲线曲面 │ │ 网格处理 │ │ 布尔运算 │ │ 碰撞检测 │ │
│ └─────┬─────┘ └─────┬────┘ └─────┬────┘ └────────┬─────────┘ │
│ │ │ │ │ │
│ └──────────────┴──────┬──────┴───────────────┘ │
│ │ │
├──────────────────────────────┴────────────────────────────────────┤
│ 空间索引层 (Spatial) │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────────────┐ │
│ │ BVH │ │ Octree │ │ KD-Tree │ │ R-Tree │ │
│ └──────────┘ └──────────┘ └──────────┘ └──────────────────┘ │
├───────────────────────────────────────────────────────────────────┤
│ 基础设施层 (Foundation) │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────────────┐ │
│ │ Eigen封装│ │ 公差系统 │ │ I/O │ │ 精确谓词 │ │
│ │ 数学库 │ │Tolerance │ │格式读写 │ │ exact_predicates│ │
│ └──────────┘ └──────────┘ └──────────┘ └──────────────────┘ │
└───────────────────────────────────────────────────────────────────┘
```
## 2. 模块依赖图
```
┌─────────────────────┐
│ vde (聚合) │
└──────────┬──────────┘
┌───────────────────┼───────────────────┐
│ │ │
┌──────┴──────┐ ┌──────┴──────┐ ┌──────┴──────┐
│ vde_capi │ │ vde_brep │ │ vde_plugin │
│ (C 接口) │ │ (B-Rep) │ │ (插件系统) │
└──────┬──────┘ └──────┬──────┘ └──────┬──────┘
│ │ │
┌──────┼──────────┬──────┼──────────┐ │
│ │ │ │ │ │
▼ ▼ ▼ ▼ ▼ │
┌──────┐┌──────┐┌──────┐┌──────┐┌─────────┐ │
│vde_ ││vde_ ││vde_ ││vde_ ││vde_ │ │
│sdf ││sketch││mesh ││curves││collision│ │
└──┬───┘└──┬───┘└──┬───┘└──┬───┘└────┬────┘ │
│ │ │ │ │ │
└───────┴───────┼───────┴─────────┘ │
│ │
┌────┴────┐ ┌─────┴──────┐
│vde_core │ │vde_spatial │
└────┬────┘ └─────┬──────┘
│ │
┌────┴──────────────────────────┘
┌────┴──────────┐
│vde_foundation │
└───────┬───────┘
┌─────┴─────┐
│Eigen3 (外部)│
└───────────┘
vde_boolean 依赖: vde_mesh + vde_spatial + vde_core
vde_collision 依赖: vde_core + vde_spatial
vde_gpu (可选): vde_mesh + CUDA::cudart
vde_plugin 依赖: vde_foundation (独立于其他模块)
```
## 3. 数据流
### 3.1 典型几何处理管线
```
输入 (STEP/IGES/OBJ/STL)
┌──────────────┐
│ Format I/O │ foundation::import_step / import_iges / load_obj / load_stl
│ 格式解析 │
└──────┬───────┘
┌──────────────┐
│ 几何核心 │ core::Point3D, core::AABB3D, core::transform
│ 类型系统 │
└──────┬───────┘
├─────────────────────────────────────┐
▼ ▼
┌──────────────┐ ┌──────────────┐
│ 曲线曲面建模 │ │ 网格处理 │
│ curves │ │ mesh │
│ Bezier/NURBS │ │ Delaunay/MC │
└──────┬───────┘ └──────┬───────┘
│ │
├──────────────┬──────────────────────┘
▼ ▼
┌──────────────┐┌──────────────┐
│ 空间索引 ││ 布尔运算 │
│ spatial ││ boolean │
│ BVH/Octree ││ CSG │
└──────┬───────┘└──────┬───────┘
│ │
▼ ▼
┌──────────────┐┌──────────────┐
│ 碰撞检测 ││ B-Rep 建模 │
│ collision ││ brep │
│ GJK/SAT ││ 抽壳/倒圆 │
└──────┬───────┘└──────┬───────┘
│ │
└───────┬───────┘
┌──────────────┐
│ Format I/O │ foundation::export_step / export_gltf / export_stl
│ 格式导出 │
└──────┬───────┘
输出 (STEP/glTF/STL/OBJ)
```
### 3.2 插件系统数据流 (v6.0)
```
┌─────────────────────────────────────────────────────┐
│ PluginManager │
│ │
│ load_plugin_dir("/usr/lib/vde/plugins") │
│ │ │
│ ▼ │
│ ┌─────────────────────────────────────┐ │
│ │ 扫描 .so/.dylib/.dll 文件 │ │
│ │ dlopen → dlsym(create_plugin) │ │
│ │ → PluginInterface* │ │
│ └──────────────┬──────────────────────┘ │
│ │ │
│ ▼ │
│ ┌─────────────────────────────────────┐ │
│ │ PluginRegistry (name → Plugin*) │ │
│ │ io_exporters / io_importers │ │
│ │ geometry_filters │ │
│ │ custom_tools │ │
│ └─────────────────────────────────────┘ │
│ │
│ 调用: manager.get_plugin("io.export.gltf") │
│ → PluginInterface::execute(...) │
└─────────────────────────────────────────────────────┘
```
### 3.3 可微分几何管线 (SDF)
```
参数化形状 (SdfNode)
┌──────────────────┐
│ SDF 求值 │ sdf::evaluate(node, point)
│ (CSG 树遍历) │
└────────┬─────────┘
┌──────────────────┐
│ 自动微分 │ sdf::gradient(node, point)
│ (正向/反向模式) │
└────────┬─────────┘
┌──────────────────┐
│ 梯度优化 │ sdf::optimize::fit_to_point_cloud
│ (Adam/SGD) │
└────────┬─────────┘
┌──────────────────┐
│ SDF → Mesh │ sdf::marching_cubes → HalfedgeMesh
│ (Marching Cubes) │
└────────┬─────────┘
┌──────────────────┐
│ 导出 GLB │ foundation::export_gltf_binary
└──────────────────┘
```
## 4. 线程模型
- **单线程默认**: 所有 API 默认线程安全,内部无全局可变状态
- **OpenMP 并行**: 在 B-Rep 布尔、网格处理等热点路径启用 (`VDE_USE_OPENMP=ON`)
- **CUDA 加速**: 独立 GPU 库 `vde_gpu`,不阻塞 CPU 路径
- **插件线程安全**: 插件需自行保证线程安全,PluginManager 提供读写锁
## 5. 内存模型
```
┌─────────────────────────────────────────┐
│ 内存分配策略 │
│ │
│ ┌──────────────┐ ┌─────────────────┐ │
│ │ ObjectPool │ │ std::unique_ptr │ │
│ │ (mesh顶点/面) │ │ (B-Rep 实体) │ │
│ │ 连续内存块 │ │ RAII 所有权 │ │
│ └──────────────┘ └─────────────────┘ │
│ │
│ ┌──────────────┐ ┌─────────────────┐ │
│ │ SoA 布局 │ │ 小对象栈分配 │ │
│ │ (AoS→SoA) │ │ (Point3D/AABB) │ │
│ │ 缓存友好 │ │ 零堆开销 │ │
│ └──────────────┘ └─────────────────┘ │
└─────────────────────────────────────────┘
```
## 6. 版本演进
| 版本 | 关键里程碑 | 日期 |
|------|-----------|------|
| v0.1 - v0.9 | 核心模块建立 | 2026-07-23 |
| v1.0 | 首个稳定版本 | 2026-07-24 |
| v2.0 | B-Rep 完善 + STEP | 2026-07-24 |
| v3.0 - v3.5 | SDF/IGES/装配/CAM | 2026-07-24 |
| v4.x | 工业强化 (GDT/PMI/特征识别) | 计划中 |
| v5.x | 性能优化 + 反向工程 | 计划中 |
| v6.0 | 插件系统 + 开发者生态 | 计划中 |