diff --git a/docs/30-严谨差距分析.md b/docs/30-严谨差距分析.md new file mode 100644 index 0000000..15a9e41 --- /dev/null +++ b/docs/30-严谨差距分析.md @@ -0,0 +1,242 @@ +# ViewDesignEngine vs 成熟几何引擎 — 严谨差距分析 + +> 编制: 2026-07-27 | 原则: 不做百分比估算,逐项对比实际能力 + +## 方法论 + +- **参照系**: Parasolid V35(公开文档)、Open CASCADE 7.8(开源可见)、ACIS R30(公开文档) +- **判定标准**: ✅ 完整实现 | ⚠️ 部分实现/未经充分验证 | ❌ 缺失 +- **不做加权评分**,如实列出每项差距 + +--- + +## 一、B-Rep 拓扑与建模 + +### 1.1 拓扑数据结构 + +| 能力 | Parasolid | ACIS | OCCT | VDE | 说明 | +|------|-----------|------|------|-----|------| +| Vertex/Edge/Loop/Face/Shell/Body 层次 | ✅ | ✅ | ✅ | ✅ | | +| 拓扑与几何分离 | ✅ | ✅ | ✅ | ✅ | | +| 非流形拓扑 | ✅ | ❌ | ❌ | ❌ | 线框+面片混合模型 | +| 多体零件 | ✅ | ✅ | ✅ | ⚠️ | VDE有Body但未充分测试多体交互 | +| 区域(Region)/体 | ✅ | ✅ | ✅ | ⚠️ | 封闭壳识别为体 | + +### 1.2 几何表示 + +| 能力 | Parasolid | ACIS | OCCT | VDE | 说明 | +|------|-----------|------|------|-----|------| +| NURBS 曲线(C0/C1/C2) | ✅ | ✅ | ✅ | ✅ | | +| NURBS 曲面(C0/C1/C2) | ✅ | ✅ | ✅ | ✅ | | +| 解析曲线(直线/圆/椭圆) | ✅ | ✅ | ✅ | ✅ | | +| 解析曲面(平面/圆柱/圆锥/球/环) | ✅ | ✅ | ✅ | ✅ | | +| **Trimmed Surface(裁剪曲面)** | ✅ | ✅ | ✅ | ✅ | v5实现 | +| **p-curve(参数空间曲线)** | ✅ | ✅ | ✅ | ⚠️ | VDE支持但未在所有路径验证 | +| 曲线在曲面上的投影 | ✅ | ✅ | ✅ | ❌ | 布尔/修复需要 | +| 曲面延伸(多种方式) | ✅ | ✅ | ✅ | ✅ | v5 | +| 曲面过渡(blend) | ✅ | ✅ | ⚠️ | ✅ | v5滚动球 | +| **Offset曲面(等距)** | ✅ | ✅ | ✅ | ⚠️ | v5 stub级别 | + +### 1.3 欧拉操作 + +| 操作 | Parasolid | ACIS | OCCT | VDE | +|------|-----------|------|------|-----| +| MEV(边分点) | ✅ | ✅ | ✅ | ✅ | +| KEV(点删边) | ✅ | ✅ | ✅ | ✅ | +| MEF(面分边) | ✅ | ✅ | ✅ | ✅ | +| KEF(边删面) | ✅ | ✅ | ✅ | ✅ | +| KEMR(删内环边) | ✅ | ✅ | ✅ | ✅ | +| MEKR(内环建边) | ✅ | ✅ | ✅ | ✅ | +| **完整欧拉操作集(10+)** | ✅ | ✅ | ✅ | ❌ | 仅有6个基础操作 | + +### 差距小结 + +| # | 差距 | 严重性 | 工作量 | +|---|------|--------|--------| +| 1 | 非流形拓扑 | 低(专业需求) | 大 | +| 2 | 曲线在曲面上投影 | **高**(布尔/修复依赖) | 中 | +| 3 | Offset曲面完整性 | 中(模具设计需要) | 中 | +| 4 | 完整欧拉操作集 | 低(高层API可替代) | 小 | + +--- + +## 二、布尔运算 + +### 2.1 布尔核心 + +| 能力 | Parasolid | ACIS | OCCT | VDE | 说明 | +|------|-----------|------|------|-----|------| +| Union/Intersection/Difference | ✅ | ✅ | ✅ | ✅ | | +| 面-面求交(SSI) | ✅ | ✅ | ✅ | ✅ | v5 SSI | +| 容差感知布尔 | ✅ | ✅ | ⚠️ | ✅ | v10 tolerant | +| 退化情况处理 | ✅ | ✅ | ⚠️ | ⚠️ | 共面/共线/切触,v10增强但未充分测试 | +| **非流形布尔** | ✅ | ❌ | ❌ | ❌ | | +| 布尔后自动修复 | ✅ | ✅ | ❌ | ✅ | heal pipeline | + +### 2.2 布尔可靠性 + +| 场景 | Parasolid | OCCT | VDE | +|------|-----------|------|-----| +| 两个分离体 union | ✅ | ✅ | ✅ | +| 重合面 union | ✅ | ⚠️ | ⚠️ | +| 切触(tangent) union | ✅ | ❌ | ⚠️ | +| 共面 difference | ✅ | ❌ | ⚠️ | +| 薄壁件布尔 | ✅ | ❌ | ❌ | +| 大数量(1000+)面布尔 | ✅ | ⚠️ | ❌ 未测试 | +| 自交体布尔 | ✅ | ❌ | ❌ | + +### 差距小结 + +| # | 差距 | 严重性 | 工作量 | +|---|------|--------|--------| +| 1 | 切触/共面 100%可靠性 | **致命** | 大(需大量测试) | +| 2 | 薄壁件布尔 | **高** | 中 | +| 3 | 大面数布尔性能 | 中 | 中 | +| 4 | 自交体布尔 | 低 | 大 | +| 5 | 非流形布尔 | 低 | 大 | + +--- + +## 三、数据交换 + +### 3.1 导入能力 + +| 格式 | Parasolid | ACIS | OCCT | VDE | 健壮性对比 | +|------|-----------|------|------|-----|-----------| +| STEP AP203/214 | ✅ | ✅ | ✅ | ✅ | OCCT>VDE(解析器成熟度) | +| STEP AP242 | ✅ | ✅ | ❌ | ✅ | | +| IGES 5.3 | ✅ | ✅ | ✅ | ✅ | | +| Parasolid XT | ✅原生 | ✅ | ❌ | ⚠️ | VDE仅文本格式 | +| ACIS SAT | ✅ | ✅原生 | ❌ | ⚠️ | VDE仅文本格式 | +| JT | ✅ | ✅ | ❌ | ⚠️ | VDE基础实现 | +| IFC | ✅ | ✅ | ✅ | ⚠️ | VDE基础实体 | +| **破损文件恢复** | ✅ | ✅ | ⚠️ | ⚠️ | v10增强但未达到Parasolid水平 | +| **非标STEP实体** | ✅ | ✅ | ⚠️ | ⚠️ | v10非标映射 | + +### 3.2 导出能力 + +| 格式 | Parasolid | ACIS | OCCT | VDE | +|------|-----------|------|------|-----| +| XT(二进制) | ✅ | ✅ | ❌ | ❌ | +| SAT(二进制) | ✅ | ✅ | ❌ | ❌ | +| JT(含PMI) | ✅ | ✅ | ❌ | ❌ | + +### 差距小结 + +| # | 差距 | 严重性 | +|---|------|--------| +| 1 | XT/SAT/JT 二进制格式 | **致命**(工业互操作必须) | +| 2 | 破损STEP恢复不完善 | **高** | +| 3 | IFC 深度覆盖(所有建筑实体) | 低(BIM专项) | + +--- + +## 四、曲面质量与分析 + +### 4.1 连续性 + +| 能力 | Parasolid | CGM(CATIA) | OCCT | VDE | +|------|-----------|------------|------|-----| +| G0 位置连续 | ✅ | ✅ | ✅ | ✅ | +| G1 切线连续 | ✅ | ✅ | ✅ | ✅ | +| G2 曲率连续 | ✅ | ✅ | ⚠️ | ✅ | +| G3 曲率变化率连续 | ✅ | ✅ | ❌ | ✅ v5 | +| **G3+ 带约束过渡** | ✅ | ✅ | ❌ | ⚠️ v10 基础 | +| **曲面能量最小化光顺** | ✅ | ✅ | ❌ | ⚠️ v10 基础 | + +### 4.2 分析工具 + +| 能力 | Parasolid | CGM | OCCT | VDE | +|------|-----------|-----|------|-----| +| 高斯曲率 | ✅ | ✅ | ✅ | ✅ | +| 平均曲率 | ✅ | ✅ | ✅ | ✅ | +| 斑马纹 | ✅ | ✅ | ❌ | ✅ | +| 高光线 | ✅ | ✅ | ❌ | ✅ | +| 反射线 | ✅ | ✅ | ❌ | ✅ | +| 等照度 | ✅ | ✅ | ❌ | ✅ | +| 曲率梳 | ✅ | ✅ | ❌ | ✅ | +| **曲面诊断自动修复** | ✅ | ✅ | ❌ | ⚠️ | + +### 差距小结 + +| # | 差距 | 严重性 | +|---|------|--------| +| 1 | G3+约束过渡不够成熟 | 中(汽车/消费品需要) | +| 2 | 曲面光顺精度 vs CGM | 中 | +| 3 | 诊断自动修复 | 中 | + +--- + +## 五、性能与鲁棒性 — 最大的真实差距 + +### 5.1 测试与验证 + +| 指标 | Parasolid | ACIS | OCCT | VDE | +|------|-----------|------|------|-----| +| 测试用例数 | ~50,000 | ~30,000 | ~10,000 | ~1,000 | +| 模糊测试 | ✅ 持续运行 | ✅ | ⚠️ | ⚠️ 基础 | +| 回归测试 | ✅ 每次提交 | ✅ | ✅ | ❌ 无CI | +| 真实用户bug积累 | 35年×数千客户 | 35年 | 20年 | 0 | +| 边界case库 | 数十万模型 | 数十万 | 数万 | 0 | + +### 5.2 已知差距(可能导致崩溃的场景) + +1. **自交几何体处理** — STEP导入的破损模型,Parasolid能恢复,VDE可能崩溃 +2. **退化几何** — 零长度边、零面积面、重合顶点,Parasolid自动清理 +3. **数值溢出** — 极大/极小坐标值(1e-15 ~ 1e15),Parasolid有保护 +4. **极端纵横比** — 1:10000的面,Parasolid正常,VDE未测试 +5. **内存耗尽恢复** — Parasolid有graceful degradation,VDE会OOM + +### 差距小结 — 致命 + +| # | 差距 | 严重性 | +|---|------|--------| +| 1 | **没有真实场景测试** | **致命** | +| 2 | **边界case崩溃风险** | **致命** | +| 3 | 无CI/CD自动化测试 | 高 | +| 4 | 无模糊测试持续运行 | 高 | + +--- + +## 六、VDE 实际强于竞品的维度 + +| 能力 | VDE | 说明 | +|------|-----|------| +| **Apache 2.0** | ✅ | OCCT的LGPL限制商用修改,VDE完全自由 | +| **现代C++17** | ✅ | Parasolid/ACIS背负C遗产,API老旧 | +| **零运行时依赖** | ✅ | 仅header-only Eigen,OCCT需十几个系统库 | +| **代码量精简** | ✅ | 76K vs OCCT 5M,维护成本极低 | +| **内置CAM** | ✅ | 商业引擎不内置CAM | +| **SDF+可微分几何** | ✅ | 竞品无此能力 | +| **中文优先** | ✅ | 文档/注释/社区中文 | + +--- + +## 七、诚实总结 + +### 功能覆盖 + +VDE 在 B-Rep 拓扑、NURBS 曲面、格式交换的**功能种类**上,已不输商业引擎太多。大厂有的功能,VDE 基本都有对应的实现。 + +### 真正的差距 — 三个字:**没测过** + +| Parasolid | VDE | +|-----------|-----| +| 50,000 个测试,每天跑 | ~1,000 个测试,手动跑 | +| 35 年 × 数千客户的 bug 报告 | 0 个真实用户 | +| 数十万边界 case 模型库 | 0 | +| CI 每次提交全量回归 | 无 CI | +| 专门的模糊测试团队 | 基础模糊测试框架 | +| 航空航天/汽车认证 | 无 | + +**VDE 可以写出来 Parasolid 90% 的功能,但写不出 Parasolid 35 年的 bug 修复。** + +### 下一步 + +功能差距已经不是主要矛盾。真正需要的是: + +1. **测试基础设施建设** — CI/CD、自动化回归、模糊测试 +2. **边界 case 库** — 收集/生成退化模型 +3. **真实场景验证** — 对接实际应用,暴露问题 +4. **二进制格式** — XT/SAT/JT 二进制读写 +5. **代码审查和静态分析** — Coverity/clang-tidy 全量扫描