本节摘要:SOURCE 2.3:B-rep 回答「是什么」,CSG 回答「怎么做」;混合建模融合二者优势。
实体建模的第一课,是理解 B-rep 与 CSG 在"世界观"上的区别:
用一句话记:B-rep 是照片,CSG 是菜谱。照片反映最终长相,菜谱反映制作过程;要改"菜量"时看菜谱更直观,要改"摆盘"时看照片更直接。
B-rep 的核心是拓扑分层结构:体(Solid)→ 壳(Shell)→ 面(Face)→ 环(Loop)→ 边(Edge)→ 顶点(Vertex)。每一层的几何(坐标、方程)与拓扑(连接关系)分离存储:
| 拓扑层 | 含义 | 示例 |
|---|---|---|
| Solid | 封闭的壳 | 一个螺栓头 |
| Shell | 有向面的集合 | 外表面 |
| Face | 有界曲面片 | 六角头的一个侧面 |
| Loop | 面的外/内边界环 | 通孔的边线 |
| Edge | 有界曲线 | 棱线 |
| Vertex | 点 | 角点 |
这种层次结构让"局部编辑"成为可能:改一个面的圆角,只需替换该面及其邻接边,其余拓扑不动。这也是特征操作能够增量更新、快速再生的原因。
CSG 的核心运算是布尔并(Union)、交(Intersection)、差(Difference)。直观理解:
| 范式 | 典型操作 | 编辑方式 |
|---|---|---|
| B-rep | 倒角、抽壳 | 改面/特征 |
| CSG | 并集、差集 | 改布尔树 |
| 混合 | 特征+布尔 | 历史树+直接编辑 |

SOURCE 指出实体须满足封闭、有向、二流形等数学条件,否则下游 CAM 无法生成有效刀路。三个条件逐一解释:
# 用 Python 伪代码实现"流形边"检查的核心思想 def check_manifold_edges(boundary): """统计每条边被多少个面共享;超过 2 即为非流形""" edge_face_count = {} for face in boundary.faces: for edge in face.loop.edges: edge_face_count[edge] = edge_face_count.get(edge, 0) + 1 bad = [e for e, n in edge_face_count.items() if n != 2] return bad # 非空 => 非流形,需要修复(如删除冗余面/分裂顶点) violations = check_manifold_edges(cad_body) print("非流形边数量:", len(violations))
现实中的工业 CAD 几乎全部采用混合建模:主流的特征建模(参数化历史树)处理常规零件,直接建模(直接编辑几何)处理导入的"哑实体"与紧急修改。
这种混合能力带来灵活性,也带来陷阱:无参数模型一旦进入布尔/直接编辑,特征树就与几何脱钩,后续修改必须依赖新特征,历史变得不可预测。因此大型企业规范普遍要求:外来模型先"重建特征"再入库。
实体模型是 CAD 数据链的"真金":它同时支撑 CAD 的内部编辑、CAE 的网格划分、CAM 的刀路生成、以及 STEP/IGES 的数据交换。实体模型一旦不合法,整条链路都会瘫痪——这就是为什么所有 CAD 系统都内置模型检查器(检查封闭性、最小边长度、退化面等),并在交付前强制体检。
⚠️ 常见坑:非流形边(三以上面共边)导致网格划分失败。
💡 关键直觉:实体 = 拓扑正确 + 几何合法。