v0.1.0: 初始工程骨架 — 7模块 40头文件 32源文件 17文档 Apache-2.0

This commit is contained in:
ViewDesignEngine
2026-07-23 05:27:51 +00:00
commit 02d0520aa5
133 changed files with 5350 additions and 0 deletions
@@ -0,0 +1,282 @@
# 市场调研与竞品分析
## 目录
1. [主流几何引擎概览](#1-主流几何引擎概览)
- 1.1 CGAL
- 1.2 Open CASCADE (OCCT)
- 1.3 libigl
- 1.4 Clipper2
- 1.5 Manifold
- 1.6 GEOS
- 1.7 其他重要竞品
2. [功能矩阵对比](#2-功能矩阵对比)
3. [市场空白与定位](#3-市场空白与定位)
4. [对标策略](#4-对标策略)
5. [结论](#5-结论)
---
## 1. 主流几何引擎概览
### 1.1 CGAL — 计算几何算法库
| 维度 | 详情 |
|------|------|
| **定位** | 学术界黄金标准,最全面的计算几何算法库 |
| **语言** | C++(核心)+ Python 绑定 |
| **许可证** | GPLv3+ / 商业双许可 |
| **历史** | 1996 年至今,28 年 |
| **规模** | 160+ 个 Package,数百万行代码 |
| **依赖** | Boost, GMP/MPFR |
| **维护方** | GeometryFactory(法国)+ 学术社区 |
**核心模块**
- 2D/3D 几何内核(笛卡尔坐标、齐次坐标、球面坐标)
- 2D 排列(Arrangement)、多边形布尔运算
- 3D 多面体、Nef 多面体(精确布尔)
- 网格生成(2D/3D Delaunay、曲面网格)
- 网格处理(简化、重网格化、孔洞填充)
- AABB Tree / KD-Tree 空间索引
- NURBS 曲线曲面
- 凸包、Voronoi 图、Alpha Shapes
- 点集处理(配准、重建、分类)
**优势**:算法最全、精确计算(GMP)、学术严谨
**劣势**:GPL 许可证限制商业闭源;API 模板重、编译极慢;学习曲线陡峭
---
### 1.2 Open CASCADE Technology (OCCT)
| 维度 | 详情 |
|------|------|
| **定位** | 工业级 CAD 建模内核,全球唯一开源工业 CAD 内核 |
| **语言** | C++ |
| **许可证** | LGPL 2.1 |
| **历史** | 1990 年代至今,30+ 年 |
| **规模** | 数千万行代码 |
| **维护方** | Open Cascade SAS(法国) |
**核心模块**
- **基础类**:数学工具、内存管理、异常处理
- **建模数据**:几何体(点/线/面/体)、拓扑(B-Rep)
- **建模算法**:布尔运算、倒角、抽壳、扫掠、放样
- **可视化**OpenGL 渲染
- **数据交换**STEP, IGES, STL, VRML, glTF, OBJ, XDE
- **应用框架**:文档管理、撤销/重做
**优势**:完整 B-Rep 支持、工业级健壮性、STEP/IGES 数据交换、LGPL 友好
**劣势**:极其庞大(数百万行)、API 老旧(非现代 C++)、编译困难
---
### 1.3 libigl — 轻量几何处理库
| 维度 | 详情 |
|------|------|
| **定位** | 学术研究用轻量网格处理库 |
| **语言** | C++(以 Header-only 为主)+ Python 绑定 |
| **许可证** | MPL 2.0(商业友好) |
| **历史** | 2013 年至今 |
| **维护方** | Alec Jacobson(多伦多大学)+ 社区 |
**核心功能**
- 网格读写(OBJ, STL, PLY, OFF 等)
- 网格布尔运算(依赖 CGAL 或 Cork)
- 网格简化、平滑、参数化
- 离散微分几何(曲率、测地线、Laplacian)
- 变形(ARAP、双调和、LBS
- 体素化、Marching Cubes
- 四面体化(依赖 TetGen
- 可视化(基于 ImGui
**优势**:代码简洁、Header-only、教程丰富、MPL 许可证
**劣势**:功能深度不足、强依赖外部库、不适用工业级精度
---
### 1.4 Clipper2 — 2D 多边形裁剪
| 维度 | 详情 |
|------|------|
| **定位** | 2D 多边形布尔运算的事实标准 |
| **语言** | C++, C#, Delphi, Python 绑定 |
| **许可证** | Boost Software License |
| **算法** | Vatti 扫描线算法 |
**核心功能**
- 多边形布尔运算(并集、交集、差集、异或)
- 多边形偏移(膨胀/腐蚀)
- 支持任意多边形(含孔洞、自交)
- 整数坐标(64-bit),无浮点精度问题
**优势**:极快、极其健壮、许可证最自由
**劣势**:仅 2D、无 3D 能力
---
### 1.5 Manifold — 3D 网格布尔
| 维度 | 详情 |
|------|------|
| **定位** | 最快的 3D 网格布尔运算库 |
| **语言** | C++C 绑定),WASM/JS/Python 绑定 |
| **许可证** | Apache 2.0 |
| **算法** | 基于精确算术 + 鲁棒拓扑 |
**核心功能**
- 网格布尔运算(并集、交集、差集)
- 网格修复(水密化)
- 体素化
- 极高性能(比 CGAL/Cork 快 10-100 倍)
**优势**:极快、鲁棒、Apache 2.0 许可证
**劣势**:功能单一(仅网格布尔)、无曲线曲面
---
### 1.6 GEOS — 开源几何引擎
| 维度 | 详情 |
|------|------|
| **定位** | GIS 领域的 2D 几何引擎 |
| **语言** | C++(核心)+ C API |
| **许可证** | LGPL |
| **应用** | PostGIS、QGIS、Shapely 的底层引擎 |
**核心功能**
- OGC 简单要素标准实现
- 2D 空间谓词(包含、相交、相切等)
- 空间操作(缓冲区、并集、交集、凸包)
- WKT/WKB 格式
- 空间索引(STRtree
**优势**GIS 标准、生态成熟、久经考验
**劣势**:仅 2D、无 CAD 建模能力
---
### 1.7 其他重要竞品
| 库 | 定位 | 许可证 | 关键功能 |
|----|------|--------|---------|
| **Eigen** | C++ 线性代数 | MPL 2.0 | 矩阵/向量运算、几何变换、数值求解 |
| **Cork** | 网格布尔 | LGPL | 3D 网格布尔运算 |
| **Carve** | CSG 引擎 | GPLv2 | 快速 CSG 布尔运算 |
| **TetGen** | 四面体网格生成 | AGPLv3 | 约束 Delaunay 四面体化 |
| **Triangle** | 2D 三角剖分 | 自由(非商业) | 约束 Delaunay 三角剖分 |
| **PCL** | 点云处理 | BSD | 点云滤波、配准、分割、重建 |
| **VTK** | 可视化 | BSD | 科学可视化、网格处理 |
---
## 2. 功能矩阵对比
| 功能领域 | CGAL | OCCT | libigl | Clipper2 | Manifold | GEOS | **VDE 目标** |
|---------|------|------|--------|----------|----------|------|------------|
| 基本几何类型 | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ | ✅ |
| 2D 布尔运算 | ✅ | ✅ | ❌ | ✅🏆 | ❌ | ✅ | ✅ |
| 3D 网格布尔 | ✅ | ✅ | 🔗CGAL | ❌ | ✅🏆 | ❌ | ✅ |
| B-Rep 布尔 | ❌ | ✅🏆 | ❌ | ❌ | ❌ | ❌ | 🔜 |
| NURBS 曲线 | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ✅ |
| NURBS 曲面 | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ✅ |
| 网格简化 | ✅ | ❌ | ✅ | ❌ | ❌ | ❌ | ✅ |
| 网格平滑 | ✅ | ❌ | ✅ | ❌ | ❌ | ❌ | ✅ |
| Delaunay 2D | ✅🏆 | ✅ | 🔗 | ❌ | ❌ | ✅ | ✅ |
| 凸包 2D/3D | ✅ | ✅ | ❌ | ❌ | ❌ | ✅ | ✅ |
| BVH 空间索引 | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ |
| GJK 碰撞检测 | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ |
| 射线相交 | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ | ✅ |
| STEP 导入 | ❌ | ✅🏆 | ❌ | ❌ | ❌ | ❌ | 🔜 |
| 精确谓词 | ✅🏆 | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ |
| 现代 C++ (17+) | ❌ | ❌ | ✅ | ✅ | ✅ | ❌ | ✅🏆 |
| 许可证 | GPL/商 | LGPL | MPL | Boost | Apache | LGPL | **Apache 2.0** |
> 图例:✅ 支持 🔗 依赖外部 🔜 规划中 ❌ 不支持 🏆 最强
---
## 3. 市场空白与定位
### 3.1 现有引擎的痛点
| 痛点 | 说明 |
|------|------|
| **CGAL 许可证** | GPLv3 限制商业闭源使用,商业许可昂贵(€10k+) |
| **CGAL 编译** | Boost 依赖 + 模板膨胀 → 编译时间以分钟计 |
| **OCCT 体积** | 数百万行代码,学习周期以月计 |
| **OCCT API** | 非现代 C++API 设计陈旧 |
| **libigl 深度** | 功能浅,依赖链复杂,缺乏自身核心算法 |
| **各库割裂** | 需要曲线 + 需要网格布尔 + 需要碰撞检测 → 分别引入三个库 |
### 3.2 差异化定位
```
┌─ 工业深度 ─┐
│ OCCT │
│ │
算法广度 ←── CGAL ──→ │ ★ VDE ★ │ ←── 现代 C++
│ │ Apache 2.0
│ Manifold │
└────────────┘
Clipper2 | libigl
```
VDE 的核心特征:
1. **Apache 2.0 许可证** — 商业友好,无 GPL 传染
2. **现代 C++17** — 清晰 API,零 Boost 依赖(仅 Eigen
3. **一站式覆盖** — CAD 建模 + 网格处理 + 碰撞检测在同一库中
4. **编译友好** — 数分钟级全量编译,非小时级
5. **中等规模** — 目标 10-20 万行,不像 CGAL/OCCT 百万行级别
### 3.3 目标用户
- 自研 CAD/CAM 软件,需要底层几何内核但不想被 GPL 限制
- 机器人/自动驾驶仿真,需要碰撞检测 + 网格处理
- 3D 打印切片软件,需要网格布尔 + 修复
- 游戏引擎编辑器,需要几何操作
---
## 4. 对标策略
### 4.1 V1.0 目标(当前)
对标 **CGAL 核心 Package + Clipper2 + Manifold 三者交集**
| 功能 | 对标库 | 当前状态 |
|------|--------|---------|
| 基本几何 + 变换 | CGAL Kernel | ✅ 已实现 |
| 精确谓词 | CGAL Exact Predicates | ✅ 基础版 |
| 2D Delaunay | CGAL 2D Triangulation | ✅ 已实现 |
| 2D 布尔 | Clipper2 | ✅ S-H 裁剪 |
| BVH 空间索引 | CGAL AABB Tree | ✅ SAH 构建 |
| GJK 碰撞检测 | — | ✅ 已实现 |
| NURBS 曲线 | CGAL NURBS | ✅ 已实现 |
| 半边网格 | CGAL Polyhedron | ✅ 已实现 |
### 4.2 V1.5 规划
| 功能 | 对标库 | 实现方法 |
|------|--------|---------|
| 网格布尔 | Manifold | 自研精确拓扑算法 |
| QEM 网格简化 | CGAL Surface Mesh Simplification | 自研 |
| 3D Delaunay | CGAL 3D Triangulation | 自研 |
| Laplacian 平滑 | libigl | 自研 |
### 4.3 V2.0 愿景
| 功能 | 对标库 |
|------|--------|
| B-Rep 布尔 | OCCT Modeling Algorithms |
| 倒角/抽壳 | OCCT |
| STEP 导入 | OCCT Data Exchange |
| 参数化 | libigl |
| 四面体化 | TetGen |
---
## 5. 结论
当前 CAD 几何引擎市场呈现"两极分化":一端是 CGAL(学术全面但 GPL)和 OCCT(工业强大但笨重),另一端是各垂直工具(Clipper2、Manifold 等)。**缺少一个 Apache 2.0 许可证、现代 C++、一站式覆盖 CAD+Mesh+Collision 的中等规模几何引擎**——这正是 ViewDesignEngine 的市场定位。