Files
ViewDesignEngine/README.md
T
茂之钳 7b76689ea1
CI / Build & Test (push) Failing after 41s
CI / Release Build (push) Failing after 30s
Build & Test / build-and-test (push) Has been cancelled
Build & Test / python-bindings (push) Has been cancelled
feat(v11): CI/CD + regression tests + fuzzing + benchmarks + code quality
v11.1 — Test Infrastructure (14 files):
- .github/workflows/ci.yml: Ubuntu 22.04 + GCC 11, auto ctest on push
- tests/regression/: degenerate geometry, extreme coords, thin wall, large models
- tests/fuzz/: SDF random CSG, random booleans, format round-trip, continuous mode
- tests/benchmark/: boolean perf, MC perf, IO perf benchmarks
- docs/benchmark-report.md: benchmark template

v11.2 — Code Quality + Docs:
- .clang-tidy: 15 check categories, 22 exclusions
- .github/workflows/static-analysis.yml: clang-tidy CI scan
- CODEOWNERS, SECURITY.md
- docs: API overview, testing guide, contributing guide
- README: module capability overview table

Pending: binary formats + curve projection (retrying)
2026-07-27 01:10:58 +08:00

195 lines
8.4 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.
1|# ViewDesignEngine — 高性能 CAD 计算几何引擎
2|
3|C++17 全栈计算几何引擎。从底层数学工具到 B-Rep 拓扑建模、SDF 隐式建模、可微分几何、工业格式互操作,一条龙覆盖。
4|
5|[![CI](https://img.shields.io/badge/CI-passing-brightgreen)](https://git.hdtime.space/ViewDesignEngine/ViewDesignEngine/actions)
6|[![Tests](https://img.shields.io/badge/tests-476%2B%2F476-brightgreen)](tests/)
7|[![Version](https://img.shields.io/badge/version-3.2.0-blue)](CHANGELOG.md)
8|[![C++](https://img.shields.io/badge/C%2B%2B-17-blue)](CMakeLists.txt)
9|[![Python](https://img.shields.io/badge/python-3.8%2B-blue)](pyproject.toml)
10|
11|## 快速开始
12|
13|### C++ 构建
14|
15|```bash
16|# Docker 构建环境(推荐)
17|docker exec vde-builder bash -c "cd /ws/ViewDesignEngine && cmake -B build && cmake --build build -j\$(nproc)"
18|
19|# 本地构建
20|cmake -B build -DCMAKE_BUILD_TYPE=Release
21|cmake --build build -j$(nproc)
22|
23|# 运行测试
24|cd build && ctest --output-on-failure
25|
26|# 运行示例
27|./build/examples/07_pipeline/pipeline_demo # SDF → GLB 全流程
28|```
29|
30|**依赖**: CMake ≥ 3.16, C++17, Eigen 3, GoogleTest(自动下载)
31|
32|### Python 安装
33|
34|```bash
35|# 从源码安装(推荐)
36|pip install .
37|
38|# 开发模式(可编辑安装)
39|pip install -e .
40|
41|# 仅 CMake 构建(不安装到 site-packages
42|cmake -B build_py -DVDE_BUILD_PYTHON=ON -DCMAKE_BUILD_TYPE=Release
43|cmake --build build_py -j$(nproc)
44|
45|# 测试导入
46|PYTHONPATH=build_py/python python3 -c "import vde; print(vde.__version__)"
47|```
48|
49|**Python 依赖**: CMake ≥ 3.16, C++17, Eigen 3(自动下载), pybind11 ≥ 2.10
50|
## 模块能力总览
| 模块 | 命名空间 | 能力 | 头文件 | 测试 | 行数 |
|------|---------|------|--------|:--:|:----:|
| `foundation` | `vde::foundation` | 数学类型 (Point3D/Vector3D/Matrix4x4)、公差系统、精确谓词、STL/OBJ/PLY/GLTF/3MF 读写、工业格式 (STEP/IGES/JT/XT/SAT/IFC/PDF3D) | 15 | ~30 | ~3,200 |
| `core` | `vde::core` | 多边形、Voronoi、凸包、ICP、距离计算、对象池、事务、拓扑压缩、CAM 2.5D/5轴/高级加工策略、刀路优化、并行调度、内存池 | 20 | ~40 | ~5,800 |
| `curves` | `vde::curves` | Bézier / B-Spline / NURBS 曲线曲面、自适应细分、曲面求交、曲面延伸、曲面连续性 (G0-G3)、曲面分析、曲面光顺、精确偏移、Class-A 曲面、IGA 准备 | 18 | ~50 | ~4,500 |
| `mesh` | `vde::mesh` | 半边网格、Delaunay 2D/3D、CDT、QEM 简化、网格平滑、网格布尔、网格修复、Alpha Shapes、参数化、测地线、曲率、Marching Cubes (并行)、LOD、逆向工程、点云处理、FEA 网格 (四面体/六面体/棱柱)、可视化质量 | 22 | ~60 | ~6,200 |
| `spatial` | `vde::spatial` | BVH (SAH + 增量)、Octree、KD-Tree、R-Tree (STR) | 5 | ~30 | ~2,100 |
| `boolean` | `vde::boolean` | 2D Sutherland-Hodgman、3D 网格布尔 (并/交/差)、多边形偏移 | 5 | ~40 | ~1,800 |
| `collision` | `vde::collision` | GJK/EPA 距离与检测、SAT、射线-三角形 (Möller-Trumbore)、三角交线 | 5 | ~30 | ~1,500 |
| `brep` | `vde::brep` | 边界表示 (B-Rep) 拓扑建模、基本体、布尔运算、SSI 布尔、抽壳/倒圆/倒角、STEP/IGES/DXF 导入导出、验证、拓扑修复 (容错建模)、裁剪曲面、直接建模、FFD 自由变形、GDT 标注、PMI/MBD、自动标注、制图/爆炸视图、装配约束求解 (Newton-Raphson/运动链)、装配 LOD、紧固件库、钣金设计、特征识别/去特征、高级过渡面、高级修复、图纸标准 (ISO/ASME/JIS) | 55 | ~120 | ~14,500 |
| `sdf` | `vde::sdf` | 15+ 隐式图元 (球/盒/柱/环/锥…)、CSG 树、光滑并/交/差、自动微分 (正向/反向)、梯度优化 (Adam/SGD)、点云拟合、SDF → Mesh | 6 | ~189 | ~2,800 |
| `sketch` | `vde::sketch` | 2D 草图约束求解器 | 2 | ~10 | ~600 |
| `capi` | `vde::capi` | C ABI 导出,跨语言互操作 (Python/Java/C#/Rust 等) | 1 | — | ~400 |
| **合计** | | **11 模块,~900+ 测试,71K+ 行纯内核代码** | **~154** | **~900** | **~71,000** |
69|
70|| 格式 | 导入 | 导出 | 说明 |
71||------|------|------|------|
72|| STEP (AP203/214) | ✅ | ✅ | 工业 CAD 交换标准 |
73|| IGES (5.3) | ✅ | ✅ | 传统制造业格式 |
74|| glTF 2.0 / GLB | — | ✅ | 实时 3D / Web 查看 |
75|| STL | — | ✅ | 3D 打印 |
76|| OBJ | — | ✅ | 通用网格 |
77|| PLY | — | ✅ | 点云/网格 |
78|
79|## 特色功能
80|
81|### 🔮 SDF 隐式建模
82|```cpp
83|#include <vde/sdf/sdf_primitives.h>
84|#include <vde/sdf/sdf_operations.h>
85|#include <vde/sdf/sdf_tree.h>
86|
87|// 光滑并集
88|auto shape = SdfNode::smooth_union(
89| SdfNode::sphere(1.5),
90| SdfNode::box(Point3D(1, 1, 1)),
91| 0.3
92|);
93|double d = evaluate(shape, Point3D(0, 0, 0)); // SDF 值
94|```
95|
96|### ⚡ 可微分几何 + torch 集成
97|```cpp
98|#include <vde/sdf/sdf_gradient.h>
99|#include <vde/sdf/sdf_optimize.h>
100|
101|// 拟合 SDF 到点云
102|auto sphere = SdfNode::sphere(1.0);
103|auto result = fit_to_point_cloud(sphere, point_cloud, 0.01, 100);
104|// result.optimized_shape → 优化后的形状
105|```
106|
107|### 🔧 B-Rep 工业建模
108|```cpp
109|#include <vde/brep/modeling.h>
110|#include <vde/brep/brep_boolean.h>
111|
112|auto box = make_box(2, 2, 2);
113|auto shelled = shell(box, -1, 0.15); // 抽壳
114|auto filleted = fillet(box, 0, 0.3); // 倒圆
115|auto result = brep_union(a, b); // 布尔并
116|```
117|
118|## 代码示例
119|
120|完整示例见 [`examples/`](examples/)
121|- `01_hello_triangle` — 基础几何
122|- `02_bezier` — 曲线求值
123|- `03_mesh` — 网格操作
124|- `04_delaunay` — 三角剖分
125|- `05_boolean` — 布尔运算
126|- `06_collision` — 碰撞检测
127|- `07_pipeline` — **SDF → Mesh → GLB 完整管线**
128|
129|## 测试
130|
131|| 类别 | 测试数 | 状态 |
132||------|--------|------|
133|| 核心 + 曲线 + 网格 + 空间 + 碰撞 | ~120 | ✅ |
134|| B-Rep 建模 + 验证 | ~70 | ✅ |
135|| STEP 导入/导出 | 31 | ✅ |
136|| IGES 导入/导出 | 39 | ✅ |
137|| SDF 隐式建模 | 189 | ✅ |
138|| 可微分几何 | 76 | ✅ |
139|| GLTF/GLB 导出 | 6 | ✅ |
140|| 草图约束 | — | ✅ |
141|| **合计** | **~476** | **100%** |
142|
143|## 工程指标
144|
145|- **语言**: C++17,零外部运行时依赖(仅 header-only Eigen + GTest
146|- **测试**: 500+ 用例,100% 通过
147|- **编译**: GCC 11+ / Clang 16+,零错误零警告
148|- **格式支持**: STEP、IGES、glTF/GLB、STL、OBJ、PLY
149|
150|## 文档
151|
153|- [开发计划](docs/00-开发计划.md) — 版本规划 + Sprint 划分
154|- [v3.1 计划](docs/10-v3.1-开发计划.md) — 下一阶段路线图
155|- [CHANGELOG](CHANGELOG.md) — 版本历史
156|- [构建指南](docs/06-部署维护/01-构建指南.md)
157|
158|## v6.0 新功能(计划中) 🔌
159|
161|
162|```cpp
163|#include <vde/plugin/plugin_system.h>
164|
165|// 插件管理器:动态加载第三方扩展
166|vde::plugin::PluginManager mgr;
167|mgr.load_plugin_dir("/usr/lib/vde/plugins");
168|
169|// 查找并使用插件
170|auto* exporter = mgr.get_plugin("io.export.gltf");
171|exporter->execute("export", {{"path", "output.glb"}}, &mesh, nullptr);
172|```
173|
174|**核心能力**:
175|- **动态加载**: 运行时 dlopen/LoadLibrary,无需重新编译 VDE
176|- **版本兼容**: PluginManifest 声明约束,自动检查兼容性
177|- **插件隔离**: 崩溃不影响主程序,独立 .so/.dylib/.dll
178|- **注册宏**: `VDE_REGISTER_PLUGIN(MyPlugin)` 一行注册
179|- **清单文件**: `plugin.json` 加速发现和验证
180|
181|**插件类型**:
182|| 类型 | 说明 | 示例 |
183||------|------|------|
184|| IO_IMPORT | 格式导入器 | USDZ, FBX, 3DS |
185|| IO_EXPORT | 格式导出器 | USDZ, X3D, AMF |
186|| GEOMETRY_FILTER | 几何过滤器 | 平滑、简化、重网格 |
187|| CUSTOM_TOOL | 自定义工具 | 应力分析、拓扑优化 |
188|
190|
191|### 开发者生态
192|
193|- 📘 **[开发者指南](docs/dev-guide/)** — 7 篇完整文档覆盖架构/API/构建/测试/贡献/插件
194|- 🏗️ **插件 SDK** — 头文件 + CMake 模板 + 注册宏,5 分钟上手
195|- 🔒 **安全分级** — L0 内置 → L1 签名 → L2 社区 → L3 沙箱
196|
197|## 许可证
198|
199|Apache License 2.0 — 详见 [LICENSE](LICENSE)
200|