docs: learn from ACIS — tolerant modeling, direct modeling, auto-heal
Build & Test / build-and-test (push) Waiting to run
Build & Test / python-bindings (push) Blocked by required conditions
CI / Build & Test (push) Failing after 37s
CI / Release Build (push) Failing after 30s

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:
茂之钳
2026-07-27 19:23:44 +08:00
parent 15eda3e74a
commit a8a46952e2
+273
View File
@@ -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 行。**