diff --git a/docs/reference/向ACIS学习.md b/docs/reference/向ACIS学习.md new file mode 100644 index 0000000..38be999 --- /dev/null +++ b/docs/reference/向ACIS学习.md @@ -0,0 +1,273 @@ +# 向 ACIS 学习 — 容错建模与直接建模 + +> ACIS (Dassault Systèmes / Spatial Corp) · 1989年首发 · 200+应用集成 + +--- + +## 一、ACIS 最值得学的三大能力 + +| 能力 | ACIS 行业地位 | VDE 现状 | +|------|-------------|---------| +| **容错建模** | 发明者,30年打磨 | 基础管线,未验证 | +| **直接建模** | SpaceClaim 的革命 | 基础 push_pull/tweak | +| **Heal 流水线** | 导入即用,自动修复 | heal 函数存在但未工业验证 | + +--- + +## 二、容错建模(Tolerant Modeling) + +### ACIS 的做法 + +``` +ACIS 是全球第一个实现容错建模的内核: + +核心思路: + 不要求几何完美 —— 允许顶点在容差范围内"浮动" + +Tolerant Vertex: + 不是一个精确坐标,而是一个"球体区域" + 球体内任意点视为"同一个顶点" + 半径 = 局部容差(可自适应) + +Tolerant Edge: + 不是一条精确曲线,而是一个"管状区域" + 管半径 = 该边的容差 + 路径容差 = 顶点间最大允许偏离 + +Tolerant Face: + 面边界上的边可以不在曲面的精确边界上 + 允许 10⁻⁶ 级别的"缝隙" + +Tolerant 布尔: + 先检测"容差冲突"(顶点在球体内但坐标不同) + → 合并冲突顶点 + → 做标准布尔 + → 检查结果容差是否在允许范围内 +``` + +### VDE 当前 + +``` +有 TolerantVertex / TolerantEdge 数据结构 +有 merge_within_tolerance() +但: + +1. 只在 tolerant_boolean() 中使用,ssi_boolean 不用 +2. 容差球体半径固定,不自适应 +3. 没有"管状边"概念 +4. 没有容差冲突检测机制 +``` + +### 可借鉴实施 + +``` +阶段1:扩展 TolerantVertex + - 自适应半径(基于几何复杂度) + - 检测"容差冲突"(两个顶点球体相交但未合并) + +阶段2:实现 TolerantEdge + - 管状边:管半径 = 该边容差 + - 曲线在管内即可接受 + +阶段3:容差冲突自动解决 + - 检测 → 合并 → 重验证 → 报告 + +工作量:中等(~1000行) +``` + +--- + +## 三、直接建模(Direct Modeling) + +### SpaceClaim 的做法 + +``` +SpaceClaim 是基于 ACIS 的直接建模器,2005年被 ANSYS 收购。 +核心能力: + +1. Pull(拉伸):选面 → 拖拽 → 实时重建 +2. Move(移动):选面 → 自由移动 → 相邻面自动延伸/裁剪 +3. Fill(填充):选边环 → 自动填充为面 +4. Combine(合并):选多个体 → 布尔并集 +5. Tangent Pull:保持相邻面相切的同时拉伸 +6. Up-to-Face Pull:拉伸直到碰到另一个面为止 + +关键技术:局部重建 + 不是全模型重新布尔 + 只重建"受影响区域"的拓扑 + 其余保持不变 +``` + +### VDE 当前 + +``` +有基础操作:push_pull / tweak_face / move_face / replace_face +缺失: +1. 无实时拖拽(Pull需要多次快速调用) +2. 无 Tangent Pull(保持相邻面相切) +3. 无 Up-to-Face(拉伸到指定面) +4. 无局部重建(每次操作都全模型重建) +5. 无 Fill 选边环填充 +``` + +### 可借鉴实施 + +``` +阶段1: + fill_hole(body, edge_loop) → 选边环→填充 + pull_up_to_face(body, face, target_face) → 拉伸到面 + +阶段2: + tangent_pull(body, face, distance) → 保持相切+拉伸 + local_rebuild(body, affected_faces) → 局部重建 + +工作量:中(~800行) +``` + +--- + +## 四、Auto-Heal 流水线 + +### ACIS 的做法 + +``` +导入 STEP/IGES → 自动执行以下流水线: + +1. Stitch(缝合): + 检测距离 < 容差的边 → 缝合为一个边 + +2. Simplify(简化): + 移除退化边(长度<容差) + 合并共线边 + 合并共面小面 + +3. Regularize(正则化): + 移除孤立的顶点/边 + 修复翻转的面 + 确保每个边恰好属于2个面 + +4. Orient(定向): + 统一所有面的法向(外指向) + 检查莫比乌斯矛盾 + +5. Check(验证): + 欧拉-庞加莱公式验证 + 边-面关联验证 + 包围盒验证 + +流水线特点: + - 每步失败不影响后续步骤 + - 返回诊断报告(哪些修复成功/哪些失败) + - 用户可以接受"部分修复"的结果 +``` + +### VDE 当前 + +``` +有函数:heal_gaps / heal_slivers / heal_orientation / heal_topology +但: +1. 没有自动流水线编排 +2. 没有"部分修复"概念 +3. 没有每步诊断 +4. 没有 simplify(退化边移除、共线合并) +``` + +### 可借鉴实施 + +``` +直接实施: + auto_heal_pipeline(body) → 五步流水线 + 每步独立执行,互不阻塞 + 返回 AutoHealReport { + 每步成功/失败 + 修复了哪些元素 + 剩余的警告 + } + +工作量:小(~300行,函数已存在,只需编排) +``` + +--- + +## 五、SAT/SAB 格式 + +### ACIS 的做法 + +``` +SAT (Save As Text):ACIS 原生文本格式 +SAB (Save As Binary):ACIS 原生二进制格式 + +特点: + - 不仅是几何,还保存 ACIS 特有的属性 + - 精度无损(原生格式) + - 包含容差信息 + - 包含建模历史(可选) + +VDE 的借鉴: + 不是要去"兼容SAT"(那是格式导入的事) + 而是学习"原生格式的思路" +``` + +### 可借鉴实施 + +``` +VDE 原生格式(.vde): + 保存内容: + - B-Rep 拓扑 + 几何(无损) + - 容差配置 + - 面/边/顶点属性 + - 建模历史(可选,用于undo/redo) + + 格式:二进制(快速)+ JSON(可调试) + + 这比 STEP 导出更快,精度无损。 + +工作量:中(~500行) +``` + +--- + +## 六、ACIS vs Parasolid 对比 + +| 维度 | Parasolid 更强 | ACIS 更强 | +|------|---------------|-----------| +| 布尔鲁棒性 | ✅ 30年SSI打磨 | | +| 容错建模 | | ✅ 发明者 | +| 直接建模 | | ✅ SpaceClaim | +| 曲面求交 | ✅ 更精确 | | +| 多边形布尔 | | ✅ SAT格式 | +| 生态 | ✅ 350+应用 | ✅ 200+应用 | +| 授权成本 | 高 | 低于Parasolid | + +### 对 VDE 的启示 + +``` +Parasolid 学:布尔退化分类 + SSI精度 +ACIS 学:容错体系 + 直接建模深度 + heal流水线 + +两者互补,VDE 可以同时借鉴。 +``` + +--- + +## 七、可立即实施的清单 + +| # | 来源 | 改进 | 行数 | 优先级 | +|---|------|------|------|--------| +| 1 | ACIS | auto_heal_pipeline(五步流水线) | ~300 | P0 | +| 2 | ACIS | fill_hole(选边环→填充) | ~200 | P1 | +| 3 | ACIS | pull_up_to_face(拉伸到面) | ~200 | P1 | +| 4 | ACIS | TolerantEdge 管状边 | ~300 | P2 | +| 5 | ACIS | 容差冲突自动检测 | ~200 | P2 | +| 6 | ACIS | VDE原生格式(.vde) | ~500 | P2 | +| 7 | ACIS | tangent_pull(相切拉伸) | ~300 | P3 | +| 8 | Parasolid | 退化7类分类 | ~500 | P0 | +| 9 | Parasolid | 多点采样分类 | ~200 | P0 | +| 10 | Parasolid | 精度追踪器 | ~100 | P1 | +| 11 | Parasolid | 3级策略回退 | ~500 | P2 | + +--- + +## 八、一句话总结 + +> **向 Parasolid 学布尔精度,向 ACIS 学容错和直接建模。两者结合,就是 VDE 超越 OCCT、逼近一线引擎的路径。本周就能实施的改进有 7 项,共 ~2000 行。**