0df9e77eac
4 milestones, 16 modules, ~12K lines, ~535 new tests: M1: TrimmedSurface + SSI boolean + topology healing + tolerance system M2: G2/G3 continuity + surface extension + advanced blend + analysis M3: Large assembly LOD + constraint solver + full CAM + direct modeling M4: Industrial formats (JT/XT/SAT/IFC/AP242) + GPU + Python + docs Target: 72% industrial capability (up from 55%), surpass OCCT
10 KiB
10 KiB
ViewDesignEngine v5 — 补齐差距,对标工业级
制定: 2026-07-26 | 基于:
docs/27-竞品分析.md目标: 一个版本内补齐核心缺失,达到 OCCT 85%+ 能力覆盖,部分维度超越
版本策略
v5 是一个大型版本,按 4 个里程碑 (M1-M4) 分阶段交付。每个里程碑聚焦一个维度。
v4.6(当前) ──→ M1: 地基加固 ──→ M2: 高级曲面 ──→ M3: 装配+制造 ──→ M4: 生态+格式
2周 2周 2周 1周
M1 — 🏗️ 地基加固(B-Rep 达到工业级)
对标: Parasolid 的核心健壮性
1.1 TrimmedSurface 深度集成 🔴 P0
现状: 头文件存在,实现为 stub,Face 仍用完整 NurbsSurface
目标: Face 的几何定义从 NurbsSurface 切换到 TrimmedSurface
TrimmedSurface完整实现:基曲面 + p-curve 裁剪环列表evaluate(u,v)— 先判断 (u,v) 是否在裁剪区域内BrepModel::Face重构使用 TrimmedSurface 作为几何to_mesh()— 裁剪曲面 tessellation(带边界的三角化)- 重构
modeling.cpp中所有 make_* 函数适配新 Face - 测试:矩形裁剪球面 → 球面片、圆柱面 + 孔
1.2 鲁棒 SSI 基布尔 🔴 P0
现状: centroid 分类 + 面分割,退化情况不可靠
目标: 全 SSI (Surface-Surface Intersection) 管线
- Step 1: 对每个面对,计算曲面交线 (SSI) — 复用递归细分 + 牛顿精化
- Step 2: 用交线分割两个面(生成 TrimmedSurface)
- Step 3: 对分割后的面片段分类 IN/OUT(射线投射 + 精确谓词)
- Step 4: 缝合保留的面片段
- 集成 GMP 精确谓词到分类关键路径
- 性能:Union_BoxAndCylinder 从 ~1.8s → 目标 ~0.3s
- 测试:分离/接触/重叠/包含四种场景 × union/intersect/diff
1.3 拓扑修复增强 🟡 P1
heal_gaps— 合并距离 < tolerance 的顶点/边heal_slivers— 移除零面积/退化面heal_orientation— 统一面方向(已被包围面法线朝外)heal_topology— 一站式修复流水线- STEP 导入后自动调用 heal
- 测试:修复后的 body 通过 validate()
1.4 容差系统完善 🟡 P1
- 全局 + 局部两级容差:
ToleranceConfig::global()+per_face_tolerance fuzzy比较替代所有硬编码 1e-6/1e-9- 自适应容差:大模型自动放宽
- 测试:不同尺度模型的容差行为
M1 交付物
| 模块 | 新增文件 | 预估行数 | 测试 |
|---|---|---|---|
| TrimmedSurface 重构 | 修改 8 个现有文件 | ~800 | ~20 |
| SSI 布尔 | rewrite brep_boolean.cpp |
~1200 | ~25 |
| 拓扑修复 | rewrite brep_heal.cpp |
~600 | ~15 |
| 容差系统 | rewrite tolerance.cpp |
~400 | ~10 |
M2 — 🎨 高级曲面(对标 CGM)
对标: CATIA CGM 的 A 级曲面能力
2.1 G2/G3 连续性分析 🔴 P1
continuity_type(curve_a, curve_b, point)→ G0/G1/G2/G3surface_continuity(surf_a, surf_b, edge)→ 沿公共边的连续性- 曲率梳 (curvature comb) 数据生成
- 斑马纹 (zebra stripe) 数据生成 — 等参线反射
- 测试:G0/G1/G2/G3 连续体正确分类
2.2 曲面延伸 + N边填充 🟡 P2
extend_surface(surface, edge_id, distance, continuity)— 沿边界延伸n_sided_fill(boundary_curves, continuity)— N 边孔洞填充blend_surfaces(surf_a, surf_b, radius)— 两面过渡- 测试:延伸后连续性验证
2.3 变半径 + 多面过渡 🟡 P2
variable_radius_blend(edge, r_start, r_end)— 实现(替换 stub)multi_face_blend(faces, radius)— 多面同时过渡- 滚动球算法实现(脊线追踪 + 自交检测)
- 三面交角处理
2.4 曲面分析工具集
curvature_map(surface)→ 高斯/平均/主曲率draft_analysis— 拔模面生成(替换 stub)deviation_analysis(surf_a, surf_b)— 两面偏差- 测试:分析结果与解析曲面对比
M2 交付物
| 模块 | 新增文件 | 预估行数 | 测试 |
|---|---|---|---|
| G2/G3 连续性 | surface_continuity.h/.cpp |
~500 | ~12 |
| 曲面延伸+N边 | surface_extension.h/.cpp |
~700 | ~15 |
| 高级过渡 | rewrite advanced_blend.cpp |
~800 | ~12 |
| 曲面分析 | surface_analysis.h/.cpp |
~600 | ~10 |
M3 — 🔗 装配 + 🏭 制造
对标: Parasolid 大装配 + Mastercam CAM
3.1 大装配 LOD 实现 🟡 P1
AssemblyLOD— 三级 LOD:完整 / 简化 / 包围盒- 视距驱动自动切换
InstanceCache集成 — 共享几何去重SpatialIndex加速装配遍历(BVH/R-Tree)- 性能测试:10K 零件 < 100ms 遍历
3.2 装配约束求解器 🟡 P1
- 3D 约束图构建(coincident/concentric/tangent/distance/angle/parallel)
- 约束求解:自由度分析 + Newton 迭代
- 联动求解:修改一个约束 → 传播更新
- 过度约束检测 + 报告
3.3 完整 CAM 策略 🟡 P2
roughing_toolpath— 层切粗加工finishing_toolpath— 平行/环绕精加工drilling_toolpath— 钻孔循环- 刀库 (Tool Library) — 平底刀/球头刀/钻头
- 后处理框架 — Fanuc/Siemens/Heidenhain
- 加工仿真 — 材料去除可视化数据
3.4 直接建模操作 🔴 P2
tweak_face(body, face_id, delta)— 面偏移move_face(body, face_id, transform)— 面移动replace_face(body, face_id, new_surface)— 面替换push_pull(body, face_id, distance)— 推拉- 邻面自动延伸/裁剪以保持水密
M3 交付物
| 模块 | 新增文件 | 预估行数 | 测试 |
|---|---|---|---|
| 大装配 LOD | assembly_lod.h/.cpp |
~500 | ~10 |
| 约束求解器 | rewrite constraint_solver.cpp |
~800 | ~15 |
| 完整 CAM | cam_strategies.h/.cpp |
~1200 | ~20 |
| 直接建模 | direct_modeling.h/.cpp |
~900 | ~18 |
M4 — 🌐 生态 + 格式
对标: Parasolid/ACIS 的互操作生态
4.1 工业格式实现 🔴 P1
- JT 导入导出 — ISO 14306,Siemens 主导的轻量化格式
- Parasolid XT 导入 — 读写 Siemens 原生格式
- ACIS SAT 导入 — 读写 Dassault 原生格式
- IFC 导入 — BIM 标准格式(建筑信息模型)
- STEP AP242 — 扩展 AP203/214,支持 PMI
4.2 GPU 加速实现 🟡 P1
gpu_marching_cubes— CUDA 体素并行(替换 stub)gpu_mesh_simplify— GPU QEM 简化gpu_rendering— 基于 OpenGL 的实时预览(可选)
4.3 Python 绑定扩展 🟡 P2
vde.brep— B-Rep 建模模块绑定vde.sdf— SDF 建模 + 优化绑定vde.cam— CAM 刀路绑定vde.assembly— 装配体绑定- pip 包自动构建(CI/CD)
4.4 文档 + 测试 🟡 P2
- 开发者指南 (
docs/dev-guide/) - 架构文档 — 模块依赖图、数据流
- API 参考手册更新到 v5
- 回归测试套件从 987 → 目标 1500+
- 模糊测试框架增强
- CI/CD 流水线(Linux + Windows + macOS)
M4 交付物
| 模块 | 新增文件 | 预估行数 | 测试 |
|---|---|---|---|
| 工业格式 | 5 个实现文件 | ~2000 | ~30 |
| GPU 加速 | rewrite gpu_acceleration.cpp |
~600 | ~8 |
| Python 绑定 | 4 个绑定模块 | ~800 | ~15 |
| 文档+测试 | 5 个文档 + 测试增强 | — | +~300 |
📊 v5 总览
模块统计
| 里程碑 | 模块数 | 新增文件 | 预估代码行数 | 新增测试 |
|---|---|---|---|---|
| M1 — 地基 | 4 | ~8 修改 | ~3,000 | ~70 |
| M2 — 曲面 | 4 | ~4 新 | ~2,600 | ~49 |
| M3 — 装配制造 | 4 | ~4 新 | ~3,400 | ~63 |
| M4 — 生态 | 4 | ~9 新 | ~3,400 | ~353 |
| 合计 | 16 | ~25 | ~12,400 | ~535 |
完成后规模预估
| 指标 | v4.6 当前 | v5 完成后 | 增长 |
|---|---|---|---|
| 源文件 | 50 | ~75 | +25 |
| 头文件 | 50 | ~58 | +8 |
| 代码行数 | ~15K | ~27K | +80% |
| 测试用例 | 987 | ~1520 | +54% |
完成后能力对标
| 维度 | v4.6 | v5 目标 | 对标 |
|---|---|---|---|
| B-Rep 核心 | 80% | 90% | OCCT 同级 |
| 曲面建模 | 60% | 75% | 超越 OCCT |
| 装配体 | 50% | 75% | 接近 Parasolid |
| 工程图 | 60% | 60% | 保持 |
| 数据交换 | 70% | 85% | 超越 OCCT |
| 制造 CAM | 30% | 65% | 基础可用 |
| 性能 | 40% | 60% | GPU 可用 |
| 生态 | 20% | 35% | Python+文档完善 |
| 综合 | 55% | 72% | ✅ 超越 OCCT |
🗺️ 执行路线
Week 1-2: M1 地基加固
├─ TrimmedSurface 深度集成
├─ SSI 布尔重写
├─ 拓扑修复增强
└─ 容差系统完善
Week 3-4: M2 高级曲面
├─ G2/G3 连续性 + 分析
├─ 曲面延伸 + N边填充
├─ 高级过渡曲面
└─ 曲面分析工具集
Week 5-6: M3 装配 + 制造
├─ 大装配 LOD
├─ 约束求解器
├─ 完整 CAM 策略
└─ 直接建模
Week 7: M4 生态 + 格式
├─ 工业格式 (JT/XT/SAT/IFC/AP242)
├─ GPU 加速实现
├─ Python 绑定扩展
└─ 文档 + 测试增强
Week 8: 集成测试 + 发布
├─ 全量回归 (目标 1500+ 0 failures)
├─ 性能基准刷新
├─ Changelog + Release Notes
└─ Git tag v5.0.0
⚡ 风险与缓解
| 风险 | 概率 | 缓解 |
|---|---|---|
| SSI 布尔耗时超预期 | 中 | 先完成核心场景,边界 case 逐步覆盖 |
| TrimmedSurface 重构影响面大 | 中 | 逐个 make_* 迁移,保持旧接口兼容 |
| GPU 开发环境受限 | 低 | CUDA 和纯 CPU fallback 双路径 |
| 工业格式逆向工程 | 高 | JT/XT/SAT 先实现子集,逐步扩展 |