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

13 KiB
Raw Blame History

需求规格说明书(v1.0 完整版)

目录

  1. 引言
  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. 非功能需求
  4. 版本规划

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 三角剖分 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 独有/首创)

竞品分析详见:核心竞争力与差异化功能

编号 需求 竞品状态 状态
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