需求规格说明书(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 |

FR-15:差异化功能(VDE 独有/首创)
竞品分析详见:核心竞争力与差异化功能
| 编号 |
需求 |
竞品状态 |
状态 |
| 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 原生绑定(pybind11,pip 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-16:Python 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 |