docs: learn from ACIS — tolerant modeling, direct modeling, auto-heal
ACIS strengths: Tolerant Modeling (inventor), Direct Modeling (SpaceClaim), auto-heal pipeline, SAT/SAB format Actionable items (11 total, ~3000 lines): P0: auto_heal_pipeline, 7-class degenerate taxonomy, multi-point voting P1: fill_hole, pull_up_to_face, precision tracker P2: TolerantEdge, tolerance conflict detection, .vde native format P3: tangent_pull, 3-level strategy fallback
This commit is contained in:
@@ -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 行。**
|
||||
Reference in New Issue
Block a user