需求规格说明书(v1.0 完整版)
目录
- 引言
- 功能需求
- 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 高级算法
- 非功能需求
- 版本规划
1. 引言
1.1 目的
本文档定义 ViewDesignEngine 几何算法引擎的完整功能需求与非功能需求,覆盖 v0.1.0 到 v2.0.0 的全部规划。
1.2 范围
对标 CGAL + OCCT + Manifold + Clipper2 + libigl 五个引擎的核心功能交集,提供从基础几何运算到工业级 B-Rep 建模的全栈几何计算能力。
1.3 对标基线
前置阅读:市场调研与竞品分析 | 功能差距分析
| 竞品 |
对标方向 |
差距项数 |
| 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 三角剖分 2D(Bowyer-Watson) |
CGAL 2D Triangulation |
✅ |
| FR-05.3 |
约束 Delaunay 三角剖分 2D(CDT) |
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 |
BVH(SAH 构建 + 射线/范围/KNN 查询) |
CGAL AABB Tree |
🔨 基础版 |
| FR-07.2 |
BVH 最近命中查询 |
CGAL |
🔨 P0 |
| FR-07.3 |
Octree(点云/网格) |
CGAL |
🔨 P0 |
| FR-07.4 |
KD-Tree(KNN/范围查询) |
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-11:B-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:许可证
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 |
