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)
8.4 KiB
1|# ViewDesignEngine — 高性能 CAD 计算几何引擎
2|
3|C++17 全栈计算几何引擎。从底层数学工具到 B-Rep 拓扑建模、SDF 隐式建模、可微分几何、工业格式互操作,一条龙覆盖。
4|
5|
6|
7|
8|
9|
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/: |
||||
| 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 | - 开发计划 — 版本规划 + Sprint 划分 | ||||
| 154 | - v3.1 计划 — 下一阶段路线图 | ||||
| 155 | - CHANGELOG — 版本历史 | ||||
| 156 | - 构建指南 | ||||
| 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 | - 📘 开发者指南 — 7 篇完整文档覆盖架构/API/构建/测试/贡献/插件 | ||||
| 194 | - 🏗️ 插件 SDK — 头文件 + CMake 模板 + 注册宏,5 分钟上手 | ||||
| 195 | - 🔒 安全分级 — L0 内置 → L1 签名 → L2 社区 → L3 沙箱 | ||||
| 196 | |||||
| 197 | ## 许可证 | ||||
| 198 | |||||
| 199 | Apache License 2.0 — 详见 LICENSE | ||||
| 200 |