三维CAD关键技术问题探讨(四) —— 边界表示法 B-Rep 基本原理
第04章 边界表示法 B-Rep 基本原理
摘要:边界表示法(Boundary Representation,B-Rep)是现代三维几何内核的事实标准表示方案。本文从点集拓扑、代数拓扑与实体造型理论出发,系统阐述 B-Rep 的数学基础、拓扑实体层次、几何支撑机制、欧拉操作体系、合法性条件及其在主流内核中的实现差异。在此基础上,提出 B-Rep 的五元组形式化模型、拓扑—几何双层语义、欧拉操作代数、合法性验证金字塔、容差 B-Rep 扩展模型与复杂度度量方法。上述工具旨在为后续拓扑实体、布尔运算、容差建模、参数化重算与数据交换章节提供统一的理论语言。
关键词:边界表示;B-Rep;拓扑实体;欧拉操作;几何支撑;容差建模;实体造型;CAD 内核
文章目录
4.1 引言:为什么需要 B-Rep
在三维 CAD、CAE 与 CAM 系统中,几何内核承担实体表示、布尔运算、求交、网格划分、质量属性计算与数据交换等底层任务。几何内核的表示方案历经线框、曲面、CSG 与 B-Rep 等阶段,最终形成以 B-Rep 为核心、CSG 为高层语义补充的工业格局。
B-Rep 的基本命题可概括为:
一个正则三维实体由其边界唯一确定;因此,表示实体只需表示其边界。
这一命题的数学依据来自点集拓扑中的 Jordan–Brouwer 分离定理:在 R 3 \mathbb{R}^3 R3 中,一个闭合、紧致、嵌入的二维流形曲面将空间分为内部与外部两个连通分量,实体即内部区域连同其边界。由此,三维实体表示问题可降维为二维边界表示问题:记录哪些面、每条面由哪些边围成、每条边由哪些顶点界定,以及这些面、边、顶点之间的邻接关系。
B-Rep 的工程价值在于表达力与局部性:
- 表达力:B-Rep 可直接表示解析曲面、NURBS 曲面、修剪曲面与自由曲面边界,适合复杂工业零件。
- 局部性:修改一个面、添加一个孔或倒角,只影响局部拓扑邻域,适合交互式建模。
- 可计算性:B-Rep 支持精确质量属性、隐藏线消除、网格划分与布尔运算。
但 B-Rep 也带来复杂性:数据结构层次深、合法性维护困难、浮点误差敏感、容差语义复杂。这些代价催生了欧拉操作、鲁棒谓词、容差建模与形状修复等研究。
本章的创新组织如下:
- 提出 B-Rep 五元组形式化模型;
- 提出拓扑—几何双层语义与信息分离原理;
- 提出欧拉操作代数视角;
- 提出 B-Rep 合法性验证金字塔;
- 提出容差 B-Rep 扩展模型;
- 提出 B-Rep 复杂度度量方法。
4.2 历史演进与学术脉络
B-Rep 的历史与实体造型理论同步发展。
1970 年代,剑桥大学 Ian Braid 在博士论文中系统化 B-Rep 的工程实现,开发了 BUILD-1 系统。其核心贡献是把顶点、边、面等拓扑实体组织为可计算数据结构,并用欧拉操作保证修改后的拓扑合法性。BUILD-1 后发展为 BUILD-2,其思想被 Charles Lang 带入 ShapeData 公司,演化为 Romulus,再进一步发展为 Parasolid。
同期,美国罗切斯特大学 Requicha 与 Voelcker 在 PADL 系统中发展 CSG,形成与 B-Rep 并行的另一流派。1970 年代末至 1980 年代,业界逐渐认识到 CSG 与 B-Rep 互补:CSG 适合表达构造语义,B-Rep 适合表达边界几何与局部操作。现代内核普遍同时支持二者,并在其间转换。
数据结构方面,B-Rep 经历多种变体:
- 翼边结构:Baumgart 1975 年提出,每条边记录四个邻面邻边,查询灵活但更新复杂。
- 半边结构:Weiler 1986 年提出,将每条边拆为两个有向半边,简化面内遍历。
- 辐射边结构:ACIS 采用,支持非流形与任意维度。
- 双向连通边表:计算几何经典结构,面向平面细分。
1990 年代,STEP 标准将 B-Rep 拓扑层次与几何表示标准化,使 B-Rep 成为跨系统交换的标准表示。此后,OpenCASCADE、Parasolid、CGM、Granite、ACIS 等内核均以 B-Rep 为底层,差异主要体现在数据结构细节、容差策略与算法打磨程度。
4.3 B-Rep 的形式化定义与核心概念
4.3.1 B-Rep 五元组模型
为统一描述不同内核的 B-Rep 实现,本文提出如下五元组模型:
B = ⟨ T , G , Φ , τ , C ⟩ \mathcal{B} = \langle \mathcal{T}, \mathcal{G}, \Phi, \tau, \mathcal{C} \rangle B=⟨T,G,Φ,τ,C⟩
其中:
- T \mathcal{T} T:拓扑实体集合,包括体、壳、面、环、边、顶点;
- G \mathcal{G} G:几何支撑集合,包括点、曲线、曲面;
- Φ : T → G \Phi: \mathcal{T} \to \mathcal{G} Φ:T→G:拓扑到几何的关联映射;
- τ : V ∪ E ∪ F → R ≥ 0 \tau: V \cup E \cup F \to \mathbb{R}_{\ge 0} τ:V∪E∪F→R≥0:容差赋值函数;
- C \mathcal{C} C:合法性约束集合,包括闭合性、流形性、方向一致性、欧拉不变量与几何一致性。
该模型把“连接关系”“几何度量”“关联映射”“容差语义”“合法性约束”分离,便于比较不同内核的设计取舍。
4.3.2 拓扑实体层次
B-Rep 将实体边界组织为六层拓扑实体:
| 层次 | 实体 | 维度 | 含义 |
|---|---|---|---|
| 1 | 体 Solid | 3D | 三维实体,由一个或多个壳围成 |
| 2 | 壳 Shell | 2D 组合 | 一组相连的面,闭合时围成区域 |
| 3 | 面 Face | 2D | 曲面片,由外环与内环界定 |
| 4 | 环 Wire/Loop | 1D 组合 | 面上首尾相接的边序列 |
| 5 | 边 Edge | 1D | 曲线段,由两个顶点界定 |
| 6 | 顶点 Vertex | 0D | 三维点 |
包含关系为:
体 ⊃ 壳 ⊃ 面 ⊃ 环 ⊃ 边 ⊃ 顶点 \text{体} \supset \text{壳} \supset \text{面} \supset \text{环} \supset \text{边} \supset \text{顶点} 体⊃壳⊃面⊃环⊃边⊃顶点
每层实体都关联几何支撑:
- 顶点 → \to → 点;
- 边 → \to → 曲线;
- 面 → \to → 曲面。
4.3.3 拓扑—几何双层语义
B-Rep 的核心设计原则是拓扑与几何分离:
- 拓扑层回答“谁与谁相邻”“谁包含谁”“方向如何”;
- 几何层回答“形状是什么”“位置在哪里”“曲率如何”。
形式化地,拓扑层提供邻接关系:
A ⊆ T × T \mathcal{A} \subseteq \mathcal{T} \times \mathcal{T} A⊆T×T
几何层提供度量映射:
Φ : T → G \Phi: \mathcal{T} \to \mathcal{G} Φ:T→G
这种分离带来三个优势:
- 同一拓扑可挂不同几何,便于几何替换与近似;
- 算法可分别处理连接与形状,降低耦合;
- 合法性检查可分层进行。
4.3.4 方向与朝向
B-Rep 需要明确面与边的方向。
- 面的方向由曲面自然法向与 orientation 标志共同决定;
- 边的方向由曲线参数方向与 orientation 决定;
- 环中边的方向需与环走向一致。
相邻面共享边时,该边在两面中的方向应相反,以保证法向一致。内核通常用 orientation 标志、半边 mate 关系或 coedge 结构维护方向一致性。
4.3.5 修剪曲面与参数域
面的几何支撑通常是完整曲面 S ( u , v ) S(u,v) S(u,v),但面只占曲面的一部分,由环定义修剪区域。环在曲面参数域上表示为 p-curve,即三维曲线在参数空间的像。
面内点判定可降为参数域判定:
p ∈ F ⟺ ( u 0 , v 0 ) ∈ D F p \in F \Longleftrightarrow (u_0,v_0) \in D_F p∈F⟺(u0,v0)∈DF
其中 D F D_F DF 是由外环与内环定义的参数域。
4.3.6 正则性、流形性与合法性
B-Rep 通常假设:
- 正则性:无悬垂低维部分,实体为正则闭集;
- 流形性:每点邻域同胚于圆盘或半圆盘;
- 闭合性:每条边恰被两个面共享,或作为壳边界被一个面共享两次;
- 方向一致性:相邻面法向不矛盾;
- 欧拉不变量:满足欧拉—庞加莱公式;
- 几何一致性:在容差范围内边落在面上、顶点落在边上。
非流形结构需要特殊数据结构支持,如 ACIS 的辐射边。
4.4 技术原理:边界如何确定整体
4.4.1 Jordan–Brouwer 分离定理
设 S ⊂ R 3 S \subset \mathbb{R}^3 S⊂R3 是闭合、紧致、嵌入的二维流形,则 R 3 ∖ S \mathbb{R}^3 \setminus S R3∖S 恰有两个连通分量:一个有界内部,一个无界外部,且 S S S 是二者公共边界。由此:
实体 = 内部 ∪ S \text{实体} = \text{内部} \cup S 实体=内部∪S
表示 S S S 即表示实体。这是 B-Rep 的根本数学依据。
4.4.2 欧拉操作与拓扑一致性
B-Rep 修改通过欧拉操作完成。欧拉操作是保持欧拉—庞加莱公式不变的拓扑修改原语。经典操作包括:
| 操作 | 含义 | 拓扑变化 |
|---|---|---|
| MVFS | Make Vertex Face Shell | 创建孤立顶点、面、壳 |
| MEV | Make Edge Vertex | 加边与顶点 |
| MEF | Make Edge Face | 加边分裂面 |
| KEV | Kill Edge Vertex | 删边与顶点 |
| KEF | Kill Edge Face | 删边合并面 |
| KFMRGH | Kill Face Make Ring Genus Hole | 删面、加环、加亏格 |
任何合法 B-Rep 修改都可分解为欧拉操作序列。由此可提出欧拉操作代数视角:
- 状态空间 S \mathcal{S} S:所有合法 B-Rep 状态;
- 操作集 O \mathcal{O} O:欧拉操作生成元;
- 不变量:
I ( V , E , F , L , S , G ) = V − E + F − L − 2 ( S − G ) = 0 I(V,E,F,L,S,G) = V - E + F - L - 2(S - G) = 0 I(V,E,F,L,S,G)=V−E+F−L−2(S−G)=0
欧拉操作是保持 I = 0 I=0 I=0 的变换生成元。该视角把 B-Rep 修改视为代数作用,便于形式化验证。
4.4.3 点的内外判定
点在体内判定通常用射线法。从点 p p p 出发沿方向 d d d 作射线:
r ( t ) = p + t d , t > 0 r(t) = p + t d, \quad t > 0 r(t)=p+td,t>0
统计射线与所有面的非退化交点数 n n n。若 n n n 为奇数,则 p p p 在体内;若为偶数,则 p p p 在体外。该方法将三维内外判定降为二维面—射线求交。
4.4.4 壳、空腔与多壳体
一个体可有多个壳:
- 外壳定义外边界,法向朝外;
- 内壳定义空腔,法向朝内。
点在体内判定需同时考虑所有壳:在外壳内且在所有内壳外。这使 B-Rep 能表达带空腔的复杂零件。
4.4.5 容差与近似
浮点运算下,“边恰好躺在面上”难以精确成立。B-Rep 引入容差:
d ( e , f ) ≤ τ ( e ) + τ ( f ) ⟹ e 视为在 f 上 d(e,f) \le \tau(e) + \tau(f) \Longrightarrow e \text{ 视为在 } f \text{ 上} d(e,f)≤τ(e)+τ(f)⟹e 视为在 f 上
本文提出容差 B-Rep 扩展模型:
B ϵ = ⟨ T , G , Φ , τ , C ϵ ⟩ \mathcal{B}_\epsilon = \langle \mathcal{T}, \mathcal{G}, \Phi, \tau, \mathcal{C}_\epsilon \rangle Bϵ=⟨T,G,Φ,τ,Cϵ⟩
其中 C ϵ \mathcal{C}_\epsilon Cϵ 为容差约束集。容差语义可分为:
- 表示容差:边、顶点、面的几何偏差;
- 运算容差:求交、分类、缝合阈值;
- 交换容差:STEP/IGES 导入导出语义;
- 修复容差:Shape Healing 与缝合容差。
4.5 数学理论与公式推导
4.5.1 欧拉—庞加莱公式
对闭合多面体:
V − E + F − L = 2 ( S − G ) V - E + F - L = 2(S - G) V−E+F−L=2(S−G)
其中:
- V V V:顶点数;
- E E E:边数;
- F F F:面数;
- L L L:环数;
- S S S:壳数;
- G G G:亏格。
简单闭合多面体退化为:
V − E + F = 2 V - E + F = 2 V−E+F=2
立方体 ( V = 8 , E = 12 , F = 6 ) (V=8, E=12, F=6) (V=8,E=12,F=6):
8 − 12 + 6 = 2 8 - 12 + 6 = 2 8−12+6=2
带一个通孔的环面体 ( G = 1 ) (G=1) (G=1):
V − E + F = 0 V - E + F = 0 V−E+F=0
4.5.2 正则集与正则布尔
B-Rep 表示正则集:
r ( A ) = cl ( int ( A ) ) r(A) = \operatorname{cl}(\operatorname{int}(A)) r(A)=cl(int(A))
正则布尔运算:
A ∪ ∗ B = r ( A ∪ B ) A \cup^* B = r(A \cup B) A∪∗B=r(A∪B)
A ∩ ∗ B = r ( A ∩ B ) A \cap^* B = r(A \cap B) A∩∗B=r(A∩B)
A ∖ ∗ B = r ( A ∖ B ) A \setminus^* B = r(A \setminus B) A∖∗B=r(A∖B)
所有 B-Rep 内核都返回正则集,但实现正则化方式不同。
4.5.3 参数域判定
设面 F F F 关联曲面 S ( u , v ) S(u,v) S(u,v),点 p p p 映射到参数 ( u 0 , v 0 ) (u_0,v_0) (u0,v0)。对每个外环 L i L_i Li 用射线计数法判断 ( u 0 , v 0 ) (u_0,v_0) (u0,v0) 是否在 L i L_i Li 内;对每个内环判断是否在外。则:
p ∈ F ⟺ ( u 0 , v 0 ) ∈ ⋂ i In ( L i out ) ∩ ⋂ j Out ( L j in ) p \in F \Longleftrightarrow (u_0,v_0) \in \bigcap_i \operatorname{In}(L_i^{\text{out}}) \cap \bigcap_j \operatorname{Out}(L_j^{\text{in}}) p∈F⟺(u0,v0)∈i⋂In(Liout)∩j⋂Out(Ljin)
4.5.4 质量属性与散度定理
体积:
V = ∭ Ω 1 d V = ∬ ∂ Ω x 3 n x d S V = \iiint_\Omega 1 \, dV = \iint_{\partial \Omega} \frac{x}{3} n_x \, dS V=∭Ω1dV=∬∂Ω3xnxdS
由散度定理把体积分转为边界曲面积分。B-Rep 可逐面积分,精确计算体积、质心与惯性张量,无需体素化。
4.5.5 B-Rep 复杂度度量
本文提出 B-Rep 复杂度度量:
C BRep = α V + β E + γ F + δ L + η S + θ G C_{\text{BRep}} = \alpha V + \beta E + \gamma F + \delta L + \eta S + \theta G CBRep=αV+βE+γF+δL+ηS+θG
若考虑曲线曲面控制点,可扩展为:
C BRep ∗ = C BRep + ∑ c ∈ C n c + ∑ s ∈ S n s C_{\text{BRep}}^* = C_{\text{BRep}} + \sum_{c \in \mathcal{C}} n_c + \sum_{s \in \mathcal{S}} n_s CBRep∗=CBRep+c∈C∑nc+s∈S∑ns
该度量可用于比较不同内核的数据规模与算法开销。
4.6 数据结构与算法
4.6.1 经典层次结构
class Solid:
shells: List[Shell]
class Shell:
faces: List[Face]
orientation: Orientation # 外壳朝外 / 内壳朝内
class Face:
surface: Surface # 几何支撑
wires: List[Wire] # 外环 + 内环
orientation: bool # 法向是否与曲面自然法向一致
class Wire:
edges: List[OrientedEdge] # 首尾相接
class OrientedEdge:
edge: Edge
direction: bool # 正向/反向
class Edge:
curve: Curve # 几何支撑
firstVertex: Vertex
lastVertex: Vertex
tolerance: float
class Vertex:
point: Point
tolerance: float
4.6.2 半边、翼边、辐射边与 DCEL
| 结构 | 代表 | 特点 | 非流形 |
|---|---|---|---|
| 翼边 | Baumgart | 边记录四邻边邻面 | 弱 |
| 半边 | Weiler | 边拆为两个有向半边 | 部分 |
| 辐射边 | ACIS | 边关联任意多面 | 强 |
| DCEL | 计算几何 | 面向平面细分 | 弱 |
4.6.3 创建立方体伪代码
def make_box(width, height, depth):
# 1. 创建 8 个顶点
vertices = [Vertex((x, y, z)) for x in [0, width]
for y in [0, height] for z in [0, depth]]
# 2. 创建 12 条边
edges = [
Edge(vertices[0], vertices[1], Line),
Edge(vertices[1], vertices[3], Line),
# ... 其余边
]
# 3. 创建 6 个面
faces = [
Face(Plane_z0, Wire([edges[0], edges[1], edges[2], edges[3]])),
Face(Plane_zd, Wire([...])),
# ... 其余面
]
# 4. 创建壳与体
shell = Shell(faces)
solid = Solid([shell])
# 5. 验证欧拉公式
assert len(vertices) - len(edges) + len(faces) == 2
return solid
4.6.4 点内判定伪代码
def point_in_solid(p, solid):
ray = Ray(p, direction=(1, 0, 0))
count = 0
for face in solid.faces:
for q in ray_face_intersect(ray, face):
if not is_degenerate(q):
count += 1
return count % 2 == 1
4.6.5 合法性验证金字塔
本文提出 B-Rep 合法性验证金字塔:
- 实体存在性:拓扑实体非空、引用有效;
- 闭合性:边—面共享关系完整;
- 流形性:每点邻域满足流形条件;
- 方向一致性:相邻面法向不矛盾;
- 欧拉不变量: V − E + F − L = 2 ( S − G ) V-E+F-L=2(S-G) V−E+F−L=2(S−G);
- 几何一致性:边在容差内落在面上;
- 无自交与退化:无零长边、零面积面、自交。
该金字塔可作为内核检查与修复流程的理论框架。
4.7 主流内核中的 B-Rep 实现
| 内核 | 拓扑结构 | 几何-拓扑关联 | 容差 | 非流形 | 典型 API |
|---|---|---|---|---|---|
| OCCT | TopoDS_* 层次 | BRep_TFace/TEdge/TVertex 桥接 | 全局 + 局部 | 部分 | BRepAlgoAPI |
| Parasolid | 拓扑状态机 | 实体带几何字段 | 严格 + 局部 | 部分 | PK API |
| CGM | 容差拓扑 | 容差边/顶点一等 | 原生容差 | 部分 | 内部 API |
| Granite | 特征历史嵌入 | 特征带结果形状 | 中等 | 部分 | Creo 内部 |
| ACIS | 辐射边 | 边关联多面 use | 中等 | 原生 | C++ API |
各内核都遵循拓扑-几何分离与欧拉操作原则,差异在数据结构细节、容差语义与算法打磨程度。
4.8 操作步骤教程:在 FreeCAD/OCCT 中观察 B-Rep
步骤一:创建并查看 B-Rep
在 FreeCAD Part 工作台创建立方体,执行 Part → Check Geometry,查看顶点数 8、边数 12、面数 6、壳数 1。验证:
8 − 12 + 6 = 2 8 - 12 + 6 = 2 8−12+6=2
步骤二:打孔后观察拓扑变化
在立方体上打一个通孔,再次检查几何。此时亏格 G = 1 G=1 G=1,欧拉公式变为:
V − E + F = 0 V - E + F = 0 V−E+F=0
步骤三:Python 查看拓扑
import Part
box = Part.makeBox(10, 10, 10)
print("Vertices:", len(box.Vertexes))
print("Edges:", len(box.Edges))
print("Faces:", len(box.Faces))
print("Shells:", len(box.Shells))
print("Solids:", len(box.Solids))
f = box.Faces[0]
print("Surface type:", f.Surface)
for w in f.Wires:
print("Wire edges:", len(w.Edges))
e = box.Edges[0]
print("Curve type:", e.Curve)
步骤四:体验拓扑—几何分离
尝试将一个面的几何支撑从平面替换为近似 B 样条曲面,观察拓扑不变、形状微变。这体现拓扑层与几何层的独立性。
步骤五:导出 STEP 查看 B-Rep 序列化
导出 STEP 文件,用文本编辑器打开,可见 ADVANCED_FACE、EDGE_CURVE、VERTEX_POINT 等实体。这些正是 B-Rep 拓扑层次的 STEP 标准化表示。
4.9 应用场景与案例
4.9.1 零件设计
每个零件在内核中是一个 B-Rep Solid。拉伸、打孔、倒角等特征操作均修改 B-Rep。打孔本质是布尔减圆柱,结果 B-Rep 增加孔的面、边、顶点。
以典型的机械零件——法兰盘为例,其建模过程完整展示了 B-Rep 的局部性优势:
- 基础拉伸:先绘制圆形草图,拉伸成圆柱体,得到由两个平面圆面与一个圆柱侧面构成的 B-Rep Solid;
- 中心打孔:执行布尔减圆柱,在 B-Rep 中新增一个内壳(内圆柱面)与两条环形边,拓扑层次由单壳变为双壳;
- 圆周阵列孔:在法兰盘圆周上阵列 6 个通孔,每个孔都独立增加一个内壳,此时 B-Rep 共含 1 个外壳与 7 个内壳;
- 倒角与圆角:对边缘执行倒角,本质是删除原尖锐边、插入一段过渡曲面,只影响该边邻域的拓扑,其余面、边、顶点保持不变。
这一过程体现了 B-Rep 的核心价值:每次特征操作只修改局部拓扑邻域,无需重建整个实体。相比之下,CSG 需要维护整棵构造树,每次修改都要重新求值。这也是现代 CAD 系统普遍以 B-Rep 为底层、CSG 为高层语义的原因。
在实现层面,特征操作最终都转化为欧拉操作序列。例如打孔可分解为:创建孔的内壳(MVFS)、在内壳上生成圆柱面(MEV/MEF)、将内壳与外壳缝合(MEF)等步骤,每一步都保持欧拉—庞加莱公式不变。
4.9.2 装配与干涉检查
装配不合并 B-Rep,而是记录变换矩阵。干涉检查对两个 B-Rep 求交,判断是否存在公共体积。
在装配体中,每个零件保持独立的 B-Rep,通过 4×4 齐次变换矩阵记录其在全局坐标系中的位置与姿态。这种「装配不合并」的设计带来两个关键优势:
- 零件可复用:同一零件可在装配体中多次实例化,只需复制变换矩阵,无需复制几何数据;
- 局部更新:修改某个零件的 B-Rep 时,装配体无需整体重建,只需更新该零件的变换矩阵。
干涉检查是装配验证的核心环节,其算法流程如下:
- 包围盒粗筛:先用 AABB(轴对齐包围盒)或 OBB(有向包围盒)快速排除明显不相交的零件对,降低求交计算量;
- B-Rep 求交:对可能相交的零件,将其 B-Rep 的面两两求交,得到交线或交点;
- 体积判定:判断交线是否围成封闭区域,若存在公共体积则判定为干涉;
- 间隙分析:对非干涉但距离较近的零件,计算最小间隙,用于公差分析与装配可行性验证。
在汽车、航空航天等复杂装配场景中,一个装配体可能包含数千个零件,干涉检查需要高效的空间索引(如 BVH 树)与并行求交算法。B-Rep 的拓扑结构使求交结果可精确追踪到具体面、边、顶点,便于定位干涉位置并给出修复建议。
4.9.3 质量属性计算
B-Rep 用散度定理逐面积分,精确计算体积、质心与惯性张量。齿轮、叶轮等零件质量属性可直接由 B-Rep 得到。
质量属性计算是 B-Rep 的重要工程应用,其数学基础是散度定理:将体积分转化为边界曲面积分。对任意标量场 f f f,有:
∫ Ω ∇ ⋅ F d V = ∮ ∂ Ω F ⋅ n d S \int_\Omega \nabla \cdot \mathbf{F} \, dV = \oint_{\partial \Omega} \mathbf{F} \cdot \mathbf{n} \, dS ∫Ω∇⋅FdV=∮∂ΩF⋅ndS
由此,体积、质心与惯性张量均可表示为边界曲面积分:
- 体积: V = ∮ ∂ Ω x 3 n x d S V = \oint_{\partial \Omega} \frac{x}{3} n_x \, dS V=∮∂Ω3xnxdS;
- 质心: x ˉ = 1 V ∮ ∂ Ω x 2 2 n x d S \bar{x} = \frac{1}{V} \oint_{\partial \Omega} \frac{x^2}{2} n_x \, dS xˉ=V1∮∂Ω2x2nxdS;
- 惯性张量: I x x = ∮ ∂ Ω x 2 ( y 2 + z 2 ) 3 n x d S I_{xx} = \oint_{\partial \Omega} \frac{x^2(y^2 + z^2)}{3} n_x \, dS Ixx=∮∂Ω3x2(y2+z2)nxdS。
算法实现时,对 B-Rep 的每个面,将其参数域离散为若干三角形或四边形单元,在每个单元上计算曲面积分并累加。由于 B-Rep 精确记录了每个面的几何支撑(平面、圆柱面、NURBS 曲面等),积分精度远高于体素化方法。
典型应用包括:
- 齿轮质量属性:齿轮的齿形由渐开线曲面构成,B-Rep 可精确计算其体积与转动惯量,用于动力学仿真;
- 叶轮平衡:涡轮叶轮的质心位置直接影响旋转平衡,B-Rep 计算可精确到微米级;
- 注塑件重量估算:通过 B-Rep 体积乘以材料密度,快速估算零件重量,用于成本核算。
相比体素化方法(将实体离散为立方体网格),B-Rep 积分方法无需离散化实体内部,计算精度高且内存开销小,是 CAD 系统质量属性计算的标准方案。
4.9.4 工程图投影
将 B-Rep 投影到平面生成工程图视图,需对每条边投影、对每面做隐藏线消除。B-Rep 拓扑使投影后线段连接关系可追踪。
工程图是制造业的标准交付物,其生成过程充分利用了 B-Rep 的拓扑结构。核心流程如下:
- 视图定义:确定投影方向(主视图、俯视图、侧视图等)与投影平面;
- 边投影:将 B-Rep 中每条边投影到视图平面。直线边投影为直线段,曲线边投影为曲线段;
- 隐藏线消除:判断每条投影线段是否被其他面遮挡,被遮挡的线段以虚线或隐藏线表示;
- 轮廓提取:识别实体的轮廓边(silhouette edge),即投影方向与曲面法向垂直的边,这些边构成视图的外轮廓;
- 标注生成:在投影视图上添加尺寸标注、公差标注与表面粗糙度标注。
B-Rep 拓扑在工程图生成中的关键作用体现在:
- 线段连接追踪:投影后,共享边的线段在视图中保持连接关系,便于生成封闭轮廓与剖面线;
- 隐藏线判定:利用面的法向与拓扑邻接关系,可快速判断面是否朝向观察者,从而决定其边是否可见;
- 剖面视图:对 B-Rep 做平面切割,得到剖面轮廓,用于生成剖视图。
现代 CAD 系统(如 SolidWorks、Creo)的工程图模块均基于 B-Rep 实现,能够自动生成三视图、剖视图与局部放大图,并保持与 3D 模型的关联性——修改 3D 模型后,工程图自动更新。
4.9.5 网格划分
FEA 网格器读取 B-Rep,对每面离散成三角网格,沿边保证节点匹配。B-Rep 拓扑使网格在共享边处连续。
有限元分析(FEA)与计算流体力学(CFD)都需要将实体离散为网格。B-Rep 是网格划分的理想输入,其拓扑结构保证了网格的连续性与一致性。
网格划分的核心流程:
- 面网格化:对 B-Rep 的每个面,在其参数域上生成三角网格或四边形网格。平面面直接二维网格化,曲面面在参数域网格化后映射回三维空间;
- 边节点匹配:共享边的两个面在网格化时,必须在该边上生成一致的节点分布,保证网格在共享边处连续;
- 体网格化:对面网格进行四面体或六面体填充,生成体网格;
- 质量检查:检查网格单元的偏斜度、长宽比、雅可比等质量指标,不合格单元需局部细化或重划。
B-Rep 拓扑在网格划分中的关键作用:
- 共享边一致性:B-Rep 明确记录了边与面的邻接关系,网格器可确保共享边上的节点完全匹配,避免网格裂缝;
- 局部细化:B-Rep 的局部性使网格器可对特定面或边进行局部加密,而不影响其他区域;
- 特征保留:B-Rep 精确记录倒角、圆角、孔等特征,网格器可保留这些特征,避免过度简化导致分析误差。
典型应用包括:
- 结构强度分析:对零件 B-Rep 划分网格,施加边界条件,求解应力分布;
- 流场仿真:对流体域 B-Rep 划分体网格,用于 CFD 求解;
- 拓扑优化:在 B-Rep 基础上迭代修改形状,每次迭代重新划分网格,评估性能指标。
现代网格器(如 ANSYS Meshing、OpenFOAM)均以 B-Rep 为输入,利用其拓扑信息生成高质量网格。
4.9.6 数据交换
STEP 将 B-Rep 标准化,跨系统交换。导入后常需缝合、修复,形成合法 B-Rep。
4.10 常见问题与调优
问题一:B-Rep 不闭合
症状:Check Geometry 报告非闭合。
原因:导入缝隙、布尔后缝合失败。
调优:用 Sewing 设合适容差重新缝合;手动补面;用 ShapeFix 修复。
问题二:欧拉公式不满足
症状:
V
−
E
+
F
≠
2
V-E+F \neq 2
V−E+F=2(简单体)。
原因:拓扑破坏。
调优:用 CheckGeometry 定位;必要时重建 B-Rep。
问题三:面法向不一致
症状:渲染或布尔异常。
原因:个别面 orientation 错误。
调优:用 ShapeFix_Face 修复;或手动翻转。
问题四:退化边或退化面
症状:零长边、零面积面。
调优:用 ShapeUpgrade_RemoveInternalWires、ShapeFix 去退化。
问题五:自交
症状:面或边穿过自身。
调优:用 ShapeFix_RemoveSelfInter 修复;或重建。
问题六:修剪域错误
症状:面的环定义错误导致面域异常。
调优:用 ShapeFix_Wire 修复环。
问题七:浮点误差导致拓扑判错
症状:本应共享的边被判为两条。
调优:调整容差;使用容差边表示。
通用调优思路:
- 用
CheckGeometry诊断; - 用
ShapeHealing系列修复; - 必要时重建 B-Rep;
- 理解合法性条件是诊断前提。
4.11 发展趋势与展望
4.11.1 非流形 B-Rep
传统 B-Rep 假设流形。仿真一体化、多材质边界与增材制造推动非流形扩展,ACIS 辐射边与 OCCT 相关研究是代表。
4.11.2 容差 B-Rep 普及
CGM 容差拓扑思想被其他内核借鉴。未来 B-Rep 可能更统一支持容差边、容差顶点与容差面。
4.11.3 T 样条 B-Rep
T-splines 作为 NURBS 推广,支持局部细化,可能并入 B-Rep 几何支撑,推动表示演进。
4.11.4 轻量化与精确双表示
云端 CAD 要求 B-Rep 精确表示与三角网格轻量化表示高效转换。双表示一致性是研究热点。
4.11.5 并行 B-Rep
多核与 GPU 推动布尔、求交并行化,挑战 B-Rep 的强依赖结构。并行欧拉操作与并行合法性验证是方向。
4.11.6 AI 与 B-Rep
可微 B-Rep、自动特征识别、生成式设计对 B-Rep 接口提出新要求。AI 可能改变特征识别、修复与拓扑命名。
4.12 小结
边界表示法 B-Rep 是现代几何内核的核心表示方案。其基本命题是:实体由边界唯一确定,表示实体只需表示边界。B-Rep 将实体组织为体 → 壳 → 面 → 环 → 边 → 顶点的拓扑层次,每层关联几何支撑,拓扑记录连接、几何记录度量,二者分离。合法性由欧拉—庞加莱公式、闭合性、方向一致性与几何一致性保证,修改通过欧拉操作完成。
本文提出的五元组模型、拓扑—几何双层语义、欧拉操作代数、合法性验证金字塔、容差 B-Rep 扩展模型与复杂度度量,为 B-Rep 的比较、分析与实现提供了统一语言。B-Rep 的优势在表达力与局部性,代价在复杂性与浮点敏感。各主流内核均以 B-Rep 为底层,差异在数据结构细节与容差处理。
理解 B-Rep 是理解一切现代几何内核的必经之路。后续第 5—15 章将逐层展开各拓扑实体与数据结构。
4.13 参考文献与延伸阅读
- Braid, I. C. The Synthesis of Solids Bounded by Piecewise Surfaces. PhD thesis, Cambridge, 1978.
- Requicha, A. A. G. Representations for Rigid Solids: Theory, Methods, and Systems. ACM Computing Surveys, 1980.
- Mäntylä, M. An Introduction to Solid Modeling. Computer Science Press, 1988.
- Stroud, I. Boundary Representation Modelling Techniques. Springer, 2006.
- Weiler, K. Topological Structures for Geometric Modeling. PhD thesis, RPI, 1986.
- Baumgart, B. G. Winged Edge Polyhedron Representation. Stanford AI Memo, 1975.
- Piegl, L., Tiller, W. The NURBS Book. Springer, 1997.
- ISO 10303-42: Geometric and Topological Representation.
- OpenCASCADE TopoDS 文档:https://dev.opencascade.org/
- 本报告第 5—15 章:拓扑实体与数据结构深入。
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐

所有评论(0)