拓扑:1.介绍
几何限制
OCCT 曲面支持矩形修剪。布尔运算后可能会出现非矩形域。
如何存储剪切操作的结果?
拓扑的目的
一般来说,拓扑是描述对象局限性的一种手段。
OCC拓扑被用于用于描述:
- 物体的边界;
- 对象之间的连接(通过公共边界)。
拓扑实体称为形状(shapes)。
拓扑的定义
拓扑形状是根据这两个概念定义的:
- 抽象拓扑(TopoDS):通过描述有界和有界对象之间的关系来定义数据结构。示例:边由其边界(即顶点)描述。
- 边界表示(B-Rep):通过关联拓扑和几何信息来完成对象的定义。例子:一条边位于曲线上并以点为界。
边界表示和算法类被分组在不同的包中。
为什么使用边界表示(B-rep)
B-Rep 有多种替代方案:
- 构造立体几何(CSG), CSG 不允许对任意数字进行建模。
- 表面模型,表面模型不适合下游工程作业。
- 线框模型,多个实体可以对应于相同线框模型(结果不唯一)。
- 网格模型,网格不支持弯曲几何体。
B-Rep 有一些缺点。它是脆弱的、冗长的、复杂的。 B-Rep模型使用顶点、边和面作为几何载体,但也具有特殊的拓扑类型。模型的复杂性导致脆弱性。
拓扑:2.抽象拓扑
拓扑形状(shapes)
OCCT定义了以下类型的拓扑形状:
- Vertex 顶点:一个点;
- Edge 边:由顶点限制的曲线的一部分;
- Wire 线框:一组边(通过它们的顶点连接);
- Face 面:由线限制的表面的一部分;
- Shell 壳:一组面(通过边连接);
- Solid 实体:受壳限制的空间的一部分;
- Compsolid 复合实体:一组通过面连接的实体;
- Compound 复合:任意拓扑形状的群。
拓扑结构图
下图显示了复杂形状(图中的实体)的子形状之间关系的示例:
形状(shapes)的连接性
如果两个形状(shapes)共享一些边界子形状,则它们是连接的。
示例:让我们考虑两条边——e1 和 e2。它们中的每一个都受到其边界的限制,边界是顶点(v1f 和 v1l是e1的边界)(v2f 和 v2l是e2的边界)。当这两条边共享一个公共顶点 v3 时,它们是连接的。
形状(shape)的层次结构
TopoDS_Shape 是所有拓扑形状类的基类。
TopoDS_Vertex 保存有关点(零维对象)的信息;
TopoDS_Edge 保存有关曲线(一维对象)的信息;
TopoDS_Wire 是边的集合;
TopoDS_Face 保存有关表面(二维对象)的信息;
TopoDS_Shell 是面的集合;
TopoDS_Solid、TopoDS_Compsolid 保存有关实体的信息;
TopoDS_Compound 表示一个形状,它是形状的集合。
形状(shape)结构
TopoDS_Shape 类通过以下方式定义形状:
- TopoDS_TShape 句柄(handle)(TopoDS package);
- 局部坐标系(TopLoc package);
- 方向(TopAbs package)。
TopoDS_TShape:一个句柄类,描述其对象在它默认坐标系。这个类从来没有直接使用过,通常使用 TopoDS_Shape。
TopLoc_Location:定义局部坐标系,将形状放置在与其定义不同的位置。
示例:所有这些盒子共享相同的 TShape,但位置不同。
TopAbs_Orientation:描述形状如何根据区域(内部和外部)界定几何形状。
考虑形状(shape)的上下文关系时,形状的方向和位置参数也被假定影响其子形状。当将一个形状发展为子形状时,子形状的方向和位置将与主形状的方向和位置相结合。这确保了在引用子形状的每个形状的上下文中对子形状的参数进行一致的解释。例如,当在这些面的上下文中搜索时,两个相连的面共享的边将具有相反的方向。
形状(shape)操作
TopoDS_Shape 类及其子类提供了各种有用的方法,例如:
访问 TShape:
- IsNull() 检查 TShape 是否为 null;
- Nullify() - 使 TShape 智能指针无效。
访问location: - Location() - 返回现有位置;
- Move () - 对实际形状应用变换;
- Moved() - 返回应用变换的新形状。
ShapeType() - 返回 TopoDS_Shape 的类型。
形状比较:
IsPartner()——相同的 TShape;
IsSame()——相同的 TShape 和位置;
IsEqual()——相同的 TShape、位置和方向。