88 lines
4.7 KiB
Markdown
88 lines
4.7 KiB
Markdown
|
|
# 系统架构设计
|
|||
|
|
|
|||
|
|
## 目录
|
|||
|
|
|
|||
|
|
1. [整体架构](#1-整体架构)
|
|||
|
|
2. [模块层次](#2-模块层次)
|
|||
|
|
3. [数据流](#3-数据流)
|
|||
|
|
4. [设计原则](#4-设计原则)
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 1. 整体架构
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
┌─────────────────────────────────────────────────────────┐
|
|||
|
|
│ 公开 API 层 │
|
|||
|
|
│ (C++ 头文件,稳定 ABI,Doxygen 文档) │
|
|||
|
|
├─────────────────────────────────────────────────────────┤
|
|||
|
|
│ ┌─────────┐ ┌──────────┐ ┌────────┐ ┌──────────────┐ │
|
|||
|
|
│ │ 几何 │ │ 曲线曲面 │ │ 网格 │ │ 空间索引 │ │
|
|||
|
|
│ │ 核心 │ │ 建模 │ │ 处理 │ │ │ │
|
|||
|
|
│ └────┬────┘ └────┬─────┘ └───┬────┘ └──────┬───────┘ │
|
|||
|
|
│ │ │ │ │ │
|
|||
|
|
│ ┌────┴───────────┴───────────┴──────────────┴───────┐ │
|
|||
|
|
│ │ CSG 布尔引擎 │ │
|
|||
|
|
│ └────────────────────────┬──────────────────────────┘ │
|
|||
|
|
│ ┌────────────────────────┴──────────────────────────┐ │
|
|||
|
|
│ │ 碰撞检测层 │ │
|
|||
|
|
│ └────────────────────────────────────────────────────┘ │
|
|||
|
|
├─────────────────────────────────────────────────────────┤
|
|||
|
|
│ 基础设施层 │
|
|||
|
|
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
|
|||
|
|
│ │ 数学库 │ │ 公差系统 │ │ I/O │ │ 内存管理 │ │
|
|||
|
|
│ │ (Eigen) │ │ │ │(OBJ/STL) │ │ │ │
|
|||
|
|
│ └──────────┘ └──────────┘ └──────────┘ └──────────┘ │
|
|||
|
|
└─────────────────────────────────────────────────────────┘
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 2. 模块层次
|
|||
|
|
|
|||
|
|
| 层级 | 模块 | 命名空间 | 职责 |
|
|||
|
|
|------|------|---------|------|
|
|||
|
|
| L0 基础设施 | foundation | `vde::foundation` | 数学库封装、精确谓词、内存管理、I/O |
|
|||
|
|
| L1 几何核心 | core | `vde::core` | 基本几何类型、变换、距离计算、凸包 |
|
|||
|
|
| L2 曲线曲面 | curves | `vde::curves` | Bezier/B-Spline/NURBS 曲线与曲面 |
|
|||
|
|
| L3 网格处理 | mesh | `vde::mesh` | 网格数据结构、剖分、简化、平滑 |
|
|||
|
|
| L4 空间索引 | spatial | `vde::spatial` | BVH、Octree、KD-Tree、R-Tree |
|
|||
|
|
| L5 布尔运算 | boolean | `vde::boolean` | 2D/3D CSG 布尔运算 |
|
|||
|
|
| L5 碰撞检测 | collision | `vde::collision` | GJK、SAT、射线相交 |
|
|||
|
|
|
|||
|
|
**依赖规则**:
|
|||
|
|
- 上层可依赖下层,下层不依赖上层
|
|||
|
|
- 同层模块间通过接口抽象解耦
|
|||
|
|
- L5 层(布尔运算/碰撞检测)依赖 L1-L4
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 3. 数据流
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
输入数据 (OBJ/STL/STEP)
|
|||
|
|
│
|
|||
|
|
▼
|
|||
|
|
[ I/O 解析 ] ──► 几何核心(基本实体)
|
|||
|
|
│
|
|||
|
|
▼
|
|||
|
|
[ 曲线曲面建模 ] ──► 离散化 ──► [ 网格处理 ]
|
|||
|
|
│ │
|
|||
|
|
▼ ▼
|
|||
|
|
[ CSG 布尔 ] ◄──────────── [ 空间索引 ]
|
|||
|
|
│
|
|||
|
|
▼
|
|||
|
|
输出数据 (OBJ/STL/B-Rep)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 4. 设计原则
|
|||
|
|
|
|||
|
|
1. **零开销抽象**:模板与编译期多态,不引入不必要的虚函数开销
|
|||
|
|
2. **数据驱动**:使用 SoA(数组结构体)布局优化缓存命中率
|
|||
|
|
3. **不可变优先**:几何实体默认不可变,变换操作返回新实体
|
|||
|
|
4. **RAII 资源管理**:所有资源由智能指针管理
|
|||
|
|
5. **异常安全**:提供基本保证以上,核心路径提供强保证
|
|||
|
|
6. **单一依赖**:仅依赖 Eigen,不引入 Boost 等重型库
|