Files
ViewDesignEngine/docs/02-概要设计/01-系统架构设计.md
T

88 lines
4.7 KiB
Markdown
Raw Normal View History

# 系统架构设计
## 目录
1. [整体架构](#1-整体架构)
2. [模块层次](#2-模块层次)
3. [数据流](#3-数据流)
4. [设计原则](#4-设计原则)
---
## 1. 整体架构
```
┌─────────────────────────────────────────────────────────┐
│ 公开 API 层 │
C++ 头文件,稳定 ABIDoxygen 文档) │
├─────────────────────────────────────────────────────────┤
│ ┌─────────┐ ┌──────────┐ ┌────────┐ ┌──────────────┐ │
│ │ 几何 │ │ 曲线曲面 │ │ 网格 │ │ 空间索引 │ │
│ │ 核心 │ │ 建模 │ │ 处理 │ │ │ │
│ └────┬────┘ └────┬─────┘ └───┬────┘ └──────┬───────┘ │
│ │ │ │ │ │
│ ┌────┴───────────┴───────────┴──────────────┴───────┐ │
│ │ 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 等重型库