Files
ViewDesignEngine/docs/01-需求分析/02-需求规格说明书.md
T
ViewDesignEngine 9f2536498b
CI / Build & Test (push) Failing after 35s
CI / Release Build (push) Failing after 25s
feat: P0 全部实现 + 差异化功能分析
P0 实现(11/11 完成,0 stub 残留):
- mesh: QEM 简化、Laplacian 平滑、质量评估、修复、3D 布尔
- spatial: Octree、KD-Tree、R-Tree 完整实现
- collision: GJK 距离+EPA 穿透深度、SAT、Tri-Tri 相交
- boolean: Vatti 2D 布尔扫描线算法
- core: 3D 凸包 QuickHull
- spatial/BVH: 最近命中查询(AABB slab + Möller-Trumbore)

文档新增:
- 05-核心竞争力与差异化功能(14 项独有功能)
- SRS 扩展到 16 类 FR、100+ 条目
- 杀手功能:约束求解器/SDF隐式建模/可微分几何/惰性管线/Python绑定
2026-07-23 06:19:19 +00:00

326 lines
13 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 需求规格说明书(v1.0 完整版)
## 目录
1. [引言](#1-引言)
2. [功能需求](#2-功能需求)
- FR-01 基本几何类型
- FR-02 几何变换
- FR-03 曲线建模
- FR-04 曲面建模
- FR-05 网格处理
- FR-06 布尔运算
- FR-07 空间索引
- FR-08 碰撞检测
- FR-09 几何计算
- FR-10 公差与精度
- FR-11 B-Rep 实体建模
- FR-12 离散化与重建
- FR-13 数据交换
- FR-14 高级算法
3. [非功能需求](#3-非功能需求)
4. [版本规划](#4-版本规划)
---
## 1. 引言
### 1.1 目的
本文档定义 ViewDesignEngine 几何算法引擎的完整功能需求与非功能需求,覆盖 v0.1.0 到 v2.0.0 的全部规划。
### 1.2 范围
对标 CGAL + OCCT + Manifold + Clipper2 + libigl 五个引擎的核心功能交集,提供从基础几何运算到工业级 B-Rep 建模的全栈几何计算能力。
### 1.3 对标基线
> 前置阅读:[市场调研与竞品分析](01-市场调研与竞品分析.md) | [功能差距分析](04-功能差距分析.md)
| 竞品 | 对标方向 | 差距项数 |
|------|---------|---------|
| Clipper2 | 2D 布尔精度与速度 | 2 |
| Manifold | 3D 网格布尔速度与鲁棒性 | 2 |
| libigl | 网格处理完整度 | 5 |
| OCCT | B-Rep 建模能力 | 7 |
| CGAL | 算法广度 | 8 |
### 1.4 术语
| 术语 | 定义 |
|------|------|
| CSG | 构造实体几何(Constructive Solid Geometry |
| NURBS | 非均匀有理 B 样条 |
| BVH | 包围体层次结构 |
| GJK/EPA | GJK 碰撞检测 + EPA 穿透深度 |
| QEM | 二次误差度量(网格简化) |
| B-Rep | 边界表示法 |
| CDT | 约束 Delaunay 三角剖分 |
| Vatti | Vatti 扫描线算法(2D 布尔黄金标准) |
---
## 2. 功能需求
> 标记说明:✅ 已实现 🔨 实现中 📋 已规划 🔜 远期目标
### FR-01:基本几何类型
| 编号 | 需求 | 对标 | 状态 |
|------|------|------|------|
| FR-01.1 | Point2D / Point3D | CGAL Kernel | ✅ |
| FR-01.2 | Vector2D / Vector3D(点积/叉积/归一化) | CGAL Kernel | ✅ |
| FR-01.3 | Line / Ray / Segment | CGAL Kernel | ✅ |
| FR-01.4 | Plane(法向量 + 有符号距离) | CGAL Kernel | ✅ |
| FR-01.5 | Triangle(面积/法向量/重心坐标/点包含) | CGAL Kernel | ✅ |
| FR-01.6 | Polygon2D(面积/点包含/CCW 判断) | CGAL Kernel | ✅ |
| FR-01.7 | AABB(轴对齐包围盒) | CGAL Kernel | ✅ |
| FR-01.8 | OBB(定向包围盒) | CGAL Optimal Bounding Box | 🔜 P4 |
### FR-02:几何变换
| 编号 | 需求 | 对标 | 状态 |
|------|------|------|------|
| FR-02.1 | 平移/旋转/缩放(3D | CGAL Kernel | ✅ |
| FR-02.2 | 4×4 齐次变换矩阵 | Eigen | ✅ |
| FR-02.3 | 组合变换链 | CGAL | ✅ |
| FR-02.4 | 反射/镜像变换 | CGAL | 📋 P1 |
### FR-03:曲线建模
| 编号 | 需求 | 对标 | 状态 |
|------|------|------|------|
| FR-03.1 | Bezier 曲线(任意阶) | CGAL | ✅ |
| FR-03.2 | B-Spline 曲线 | CGAL | ✅ |
| FR-03.3 | NURBS 曲线(Cox-de Boor 求值) | CGAL NURBS | ✅ |
| FR-03.4 | 曲线一阶/二阶导数 | CGAL | 🔨 部分实现 |
| FR-03.5 | 曲线分割与拼接 | CGAL | 📋 P2 |
| FR-03.6 | 曲线升阶 | CGAL | 📋 P2 |
| FR-03.7 | 曲线弧长参数化 | CGAL | 📋 P2 |
| FR-03.8 | 曲线-曲线求交 | CGAL | 📋 P2 |
| FR-03.9 | 曲线投影(点到曲线最近点) | CGAL | 📋 P2 |
### FR-04:曲面建模
| 编号 | 需求 | 对标 | 状态 |
|------|------|------|------|
| FR-04.1 | Bezier 曲面 | CGAL | ✅ |
| FR-04.2 | B-Spline 曲面 | CGAL | ✅ |
| FR-04.3 | NURBS 曲面(张量积) | CGAL / OCCT | 🔨 部分实现 |
| FR-04.4 | 曲面求值与求导 | CGAL | 🔨 |
| FR-04.5 | 曲面法向量计算 | CGAL | ✅ |
| FR-04.6 | 曲面离散化(三角网格化) | CGAL | ✅ |
| FR-04.7 | 曲面修剪(Trimmed Surface | OCCT | 📋 P2 |
| FR-04.8 | 曲面-曲面求交 | OCCT | 📋 P2 |
| FR-04.9 | 直纹面(Ruled Surface | OCCT | 📋 P2 |
| FR-04.10 | 旋转面(Surface of Revolution | OCCT | 📋 P2 |
### FR-05:网格处理
| 编号 | 需求 | 对标 | 状态 |
|------|------|------|------|
| FR-05.1 | 半边数据结构(Half-Edge | CGAL Polyhedron | ✅ |
| FR-05.2 | Delaunay 三角剖分 2DBowyer-Watson | CGAL 2D Triangulation | ✅ |
| FR-05.3 | 约束 Delaunay 三角剖分 2DCDT | CGAL / Triangle | 📋 P1 |
| FR-05.4 | 3D Delaunay 四面体剖分 | CGAL 3D Triangulation | 📋 P1 |
| FR-05.5 | **网格简化(QEM** | CGAL / libigl | 🔨 P0 |
| FR-05.6 | **网格平滑(Laplacian / Taubin** | libigl | 🔨 P0 |
| FR-05.7 | **网格质量评估** | CGAL | 🔨 P0 |
| FR-05.8 | **网格修复(水密化/孔洞填充/去除非流形)** | Manifold / CGAL | 🔨 P0 |
| FR-05.9 | 网格细分(Loop / Catmull-Clark | libigl | 📋 P2 |
| FR-05.10 | 网格重网格化(Isotropic Remeshing | CGAL | 📋 P2 |
| FR-05.11 | 网格参数化(Tutte / LSCM | libigl | 📋 P2 |
| FR-05.12 | 测地线距离 | libigl / CGAL | 📋 P1 |
| FR-05.13 | 离散曲率(高斯曲率/平均曲率) | libigl | 📋 P1 |
| FR-05.14 | 网格法向量(面/顶点/角) | CGAL | ✅ |
### FR-06:布尔运算
| 编号 | 需求 | 对标 | 状态 |
|------|------|------|------|
| FR-06.1 | **2D 多边形布尔(Vatti 算法)** | Clipper2 | 🔨 P0 |
| FR-06.2 | 2D 多边形偏移(膨胀/腐蚀) | Clipper2 | 📋 P1 |
| FR-06.3 | **3D 网格布尔(并/交/差)** | Manifold / CGAL | 🔨 P0 |
| FR-06.4 | B-Rep 实体布尔 | OCCT | 📋 P2 |
| FR-06.5 | Nef 多面体精确布尔 | CGAL | 🔜 P4 |
### FR-07:空间索引
| 编号 | 需求 | 对标 | 状态 |
|------|------|------|------|
| FR-07.1 | BVHSAH 构建 + 射线/范围/KNN 查询) | CGAL AABB Tree | 🔨 基础版 |
| FR-07.2 | **BVH 最近命中查询** | CGAL | 🔨 P0 |
| FR-07.3 | Octree(点云/网格) | CGAL | 🔨 P0 |
| FR-07.4 | KD-TreeKNN/范围查询) | CGAL | 🔨 P0 |
| FR-07.5 | R-Tree(空间对象索引) | GEOS / CGAL | 🔨 P1 |
| FR-07.6 | 空间索引抽象接口 | — | ✅ |
### FR-08:碰撞检测
| 编号 | 需求 | 对标 | 状态 |
|------|------|------|------|
| FR-08.1 | GJK 相交判断 | — | ✅ |
| FR-08.2 | **GJK 最小距离计算** | — | 🔨 P0 |
| FR-08.3 | **EPA 穿透深度(碰撞点+法向量+深度)** | — | 🔨 P0 |
| FR-08.4 | SAT 多面体碰撞 | — | 🔨 P1 |
| FR-08.5 | 射线-三角形相交(Möller-Trumbore | — | ✅ |
| FR-08.6 | 射线-网格相交(利用 BVH | — | 📋 P1 |
| FR-08.7 | 三角形-三角形相交 | — | 🔨 P1 |
| FR-08.8 | AABB-AABB / OBB-OBB 相交 | — | 📋 P1 |
| FR-08.9 | 连续碰撞检测(CCD | — | 📋 P2 |
### FR-09:几何计算
| 编号 | 需求 | 对标 | 状态 |
|------|------|------|------|
| FR-09.1 | 距离计算(点-点/线/面/三角形/线段) | CGAL | ✅ |
| FR-09.2 | 最近点查询 | CGAL | ✅ |
| FR-09.3 | 2D 凸包(Graham Scan | CGAL | ✅ |
| FR-09.4 | **3D 凸包(QuickHull** | CGAL | 🔨 P0 |
| FR-09.5 | 2D Voronoi 图 | CGAL | 📋 P1 |
| FR-09.6 | 3D Voronoi 图 | CGAL | 📋 P2 |
| FR-09.7 | 面积计算(多边形/曲面) | CGAL | ✅ |
| FR-09.8 | 体积计算(多面体) | CGAL | 📋 P1 |
| FR-09.9 | 主成分分析(PCA | CGAL | 📋 P2 |
### FR-10:公差与精度
| 编号 | 需求 | 对标 | 状态 |
|------|------|------|------|
| FR-10.1 | 可配置全局/局部公差 | CGAL | ✅ |
| FR-10.2 | 精确谓词(orient_2d/3d, in_circle | CGAL Exact | ✅ 基础版 |
| FR-10.3 | Shewchuk 自适应精度完整实现 | CGAL | 🔨 简化版 |
| FR-10.4 | 几何吸附(snapping | — | 📋 P1 |
### FR-11B-Rep 实体建模
| 编号 | 需求 | 对标 | 状态 |
|------|------|------|------|
| FR-11.1 | B-Rep 数据结构(体/壳/面/环/边/顶点) | OCCT | 📋 P2 |
| FR-11.2 | 拉伸体(Extrude | OCCT | 📋 P2 |
| FR-11.3 | 旋转体(Revolve | OCCT | 📋 P2 |
| FR-11.4 | 扫掠体(Sweep | OCCT | 📋 P2 |
| FR-11.5 | 放样体(Loft | OCCT | 📋 P2 |
| FR-11.6 | 倒角(Fillet / Chamfer | OCCT | 📋 P2 |
| FR-11.7 | 抽壳(Shell / Hollow | OCCT | 📋 P2 |
| FR-11.8 | 曲面偏移(Offset | OCCT | 📋 P2 |
| FR-11.9 | 基本体生成(盒/球/柱/锥/环) | OCCT | 📋 P2 |
### FR-12:离散化与重建
| 编号 | 需求 | 对标 | 状态 |
|------|------|------|------|
| FR-12.1 | Marching Cubes(等值面提取) | libigl | 📋 P1 |
| FR-12.2 | 体素化(网格→体素 / 体素→网格) | libigl | 📋 P1 |
| FR-12.3 | Alpha Shapes(点云→网格) | CGAL | 📋 P2 |
| FR-12.4 | 曲面重建(Poisson 重建) | CGAL | 📋 P2 |
### FR-13:数据交换
| 编号 | 需求 | 对标 | 状态 |
|------|------|------|------|
| FR-13.1 | OBJ 读写 | CGAL / libigl | ✅ |
| FR-13.2 | STL 读写(文本+二进制) | CGAL | ✅ |
| FR-13.3 | PLY 读写 | libigl | 📋 P3 |
| FR-13.4 | OFF 读写 | CGAL | 📋 P3 |
| FR-13.5 | STEP 导入/导出 | OCCT | 🔜 P3 |
| FR-13.6 | IGES 导入/导出 | OCCT | 🔜 P3 |
| FR-13.7 | glTF 导出 | OCCT | 📋 P3 |
### FR-14:高级算法
| 编号 | 需求 | 对标 | 状态 |
|------|------|------|------|
| FR-14.1 | Nef 多面体(精确布尔) | CGAL | 🔜 P4 |
| FR-14.2 | 点云配准(ICP | CGAL / PCL | 🔜 P4 |
| FR-14.3 | 最优包围盒(OBB 最小体积) | CGAL | 🔜 P4 |
---
## 3. 非功能需求
### NFR-01:性能
| 指标 | 输入规模 | 目标 | 对标 |
|------|---------|------|------|
| 2D 布尔(Vatti | 10⁴ 顶点 | ≤ 0.1s | Clipper2 |
| 3D 网格布尔 | 10⁵ 三角面 | ≤ 1s | Manifold |
| 网格简化 | 10⁵→10⁴ 面 | ≤ 2s | CGAL |
| BVH 射线查询 | 10⁶ 面 | ≤ 0.1ms/次 | CGAL |
| Delaunay 2D | 10⁶ 点 | ≤ 10s | CGAL |
| 3D Delaunay | 10⁵ 点 | ≤ 5s | CGAL |
| GJK 碰撞 | 凸体 | ≤ 30 次迭代 | — |
### NFR-02:可靠性
- 核心算法单元测试覆盖率 ≥ 90%
- 2D/3D 布尔运算通过标准测试集
- 所有公开 API 有边界条件测试
### NFR-03:可移植性
- Linux GCC 9+ / Clang 12+
- Windows MSVC 2019+
- macOS Clang 12+
### NFR-04:可扩展性
- 模块化架构,仅 Eigen 一个必需依赖
- 空间索引后端可替换
- C API 支持跨语言绑定
### NFR-05:许可证
- Apache 2.0,商业友好
---
## 4. 版本规划
| 版本 | 包含功能 | 优先级覆盖 |
|------|---------|-----------|
| **v0.1.0** | 基础几何 + 曲线曲面 + 基础网格 + 基础 BVH + GJK | ✅ 已完成 |
| **v0.3.0** | P0 全部 11 项(Vatti/网格布尔/QEM/3D凸包/Octree等) | P0 |
| **v0.5.0** | P1 全部 12 项(Voronoi/3DDelaunay/MarchingCubes/曲率等) | P1 |
| **v1.0.0** | P2 全部 10 项(B-Rep/倒角/抽壳/扫掠/放样/参数化等) | P2 |
| **v1.5.0** | P3 全部 5 项(STEP/IGES/PLY/glTF 等) | P3 |
| **v2.0.0** | P4 全部 3 项(Nef/ICP/OBB | P4 |
![版本路线](v0.1.0 → v0.3.0 → v0.5.0 → v1.0.0 → v2.0.0)
```
现在 追上Clipper2 追上Manifold 追上OCCT 追上CGAL高级
+Manifold +libigl 建模层 功能
```
### FR-15:差异化功能(VDE 独有/首创)
> 竞品分析详见:[核心竞争力与差异化功能](05-核心竞争力与差异化功能.md)
| 编号 | 需求 | 竞品状态 | 状态 |
|------|------|---------|------|
| FR-15.1 | **2D 草图约束求解器**(几何约束图 + 牛顿迭代) | ❌ 仅商业 CAD 有(DCM/PTC),开源为零 | 🔜 P4 |
| FR-15.2 | **SDF 隐式建模**(基本体/布尔/变形/光滑混合→网格) | ❌ 无 | 🔜 P3 |
| FR-15.3 | **可微分几何**(距离/碰撞/布尔对参数的梯度) | ❌ 无 | 🔜 P4 |
| FR-15.4 | **惰性求值几何管线**(计算图+缓存+并行) | ❌ 无此架构 | 🔜 P2 |
| FR-15.5 | **Python 原生绑定**pybind11pip install 即用) | 🔸 CGAL 有笨重 SWIG 绑定 | 🔜 P1 |
| FR-15.6 | **二进制序列化格式**(版本化、比 OBJ 快 10x) | ❌ 全部依赖文本格式 | 🔜 P1 |
| FR-15.7 | **内置性能分析/基准框架** | ❌ 无 | 🔜 P1 |
| FR-15.8 | **WebAssembly 编译目标** | 🔸 Manifold 支持 | 🔜 P2 |
| FR-15.9 | **自动 LOD 链生成** | 🔸 libigl 有简化无自动链 | 🔜 P2 |
| FR-15.10 | **增量计算框架**(脏标记/缓存/最小重算) | 🔸 OCCT OCAF 有但笨重 | 🔜 P2 |
| FR-15.11 | **GPU 加速 BVH 遍历**CUDA/Vulkan 后端) | ❌ 无开源引擎支持 | 🔜 P3 |
| FR-15.12 | **实时碰撞检测模式**(持续监测+回调) | ❌ 全部为查询式 | 🔜 P3 |
| FR-15.13 | **几何操作宏录制/回放** | ❌ 无 | 🔜 P3 |
### FR-16Python API(等效 C++ 功能)
> Python 绑定不是简单的 wrapper——需要为 Python 用户设计 Pythonic API。
| 编号 | 需求 | 状态 |
|------|------|------|
| FR-16.1 | `vde.Point`, `vde.Vector`, `vde.Mesh` 等 Python 类 | 🔜 P1 |
| FR-16.2 | numpy 数组互操作(零拷贝) | 🔜 P1 |
| FR-16.3 | Jupyter Notebook 内联可视化 | 🔜 P1 |
| FR-16.4 | 与 trimesh / open3d 互转 | 🔜 P2 |