Opencascade源码学习之模型数据——TKBRep模块类介绍
1、TKBRep
1、BinTools
类说明
//BinTools:
保存形状为二进制格式文件
//BinTools_Curve2dSet:
以二进制格式存储Geom2d中的一组曲线
//BinTools_CurveSet:
以二进制格式存储Geom中的一组曲线
//BinTools_FormatVersion:
四个版本,不同版本支持读写的shape类型略有不同
//BinTools_IStream:
将IStream替换为形状读取器,用于快速管理其在文件中的位置和所有读取类型的操作。
//BinTools_LocationSet:
LocationSet类存储了一组位置,一个可重定位的状态。它可以从位置中创建。它可以创建位置。
//BinTools_ObjectType:
在形状读/写格式中定义对象标识符的枚举
//BinTools_OStream:
将OStream替换形状写入器,用于快速管理其在文件中的位置和所有写入类型的操作。
//BinTools_ShapeReader:
以二进制格式从IStream读取拓扑,而不是按类型分组对象。并使用文件中的相对位置作为参考。
//BinTools_ShapeSet:
以二进制格式写入拓扑到OStream中。
//BinTools_ShapeSetBase:
将gp_Pnt数据写入流
//BinTools_ShapeWriter:
以二进制格式写入拓扑到OStream中,而不是按类型分组对象。并使用文件中的相对位置作为参考。
//BinTools_SurfaceSet:
以二进制格式存储来自Geom的一组surface。
类图
2、BRep
类说明
//BRep_Builder:
提供高级公差控制的框架。
- 它用于构建形状。
- 如果需要公差控制,建议您:
1.使用BRepAPI包中提供的类
2.更新生成的形状的公差。
- 只有顶点、边和面具有有意义的公差控制。公差值必须始终遵守所面对的条件:公差比边缘公差更具限制性。这比顶点公差更具限制性。换句话说:Tol(顶点)>=Tol(边)>=Tol(面)。
- 设置公差的其他规则包括:
1.你可以打开容差,但不应该永远限制它。
2.边缘不能包含在两个顶点的公差球体内。
//BRep_Curve3D:
用3D曲线表示一条曲线。
//BRep_CurveOn2Surfaces:
在两个曲面之间定义一个连续曲线
//BRep_CurveOnClosedSurface:
用两条在一个封闭曲面上的p曲线表示一条曲线。
//BRep_CurveOnSurface:
用曲面参数空间中的曲线表示曲线。
//BRep_CurveRepresentation:
曲线表示的根类。包含一个位置。
//BRep_GCurve:
几何曲线表示的根类。包含一个范围。包含第一个参数和最后一个参数。
//BRep_PointOnCurve:
一个点的表示,用三维曲线上的参数表示。
//BRep_PointOnCurveOnSurface:
一个点的表示,由曲面上的曲线的参数表示。
//BRep_PointOnSurface:
用一个曲面上的两个参数表示一个点。
//BRep_PointRepresentation:
用于点表示的根类。包含一个位置和一个参数。
//BRep_PointsOnSurface:
曲面上的点类的根。
//BRep_Polygon3D:
3D多边形的表示。
//BRep_PolygonOnClosedSurface:
在一个闭合的参数空间曲面上的两个二维多边形的表示。
//BRep_PolygonOnClosedTriangulation:
在闭合的三角剖分中的两个节点数组的表示。
//BRep_PolygonOnSurface:
在一个参数空间曲面上的两个二维多边形的表示。
//BRep_PolygonOnTriangulation:
在三角剖分中的两个节点数组的表示。
//BRep_TEdge:
BRep的TEdge继承自TopoDS的TEdge,它包含几何数据。TEdge包含:公差、相同的参数标志、相同的范围标志、退化的标志、曲线表示列表。
//BRep_TFace:
BRep的TFace继承于TopoDS的TFace。TFace包含:
- 曲面,公差和位置。
- 一个自然限制标志,当这个标志是true,边界面被认为是参数空间的(Umin, UMax, VMin, VMax)。
- 一个可选的三角网列表。如果有任何三角网,曲面可以不存在。
- 位置用于曲面。
- 三角网在同一个相同的参照系中而TFace不是。mySurface上的一个点必须用myLocation进行转换,而三角剖分上的点不是。
- 曲面可以由不同的TFace共享,但是三角剖分不是,因为三角剖分可通过边进行修改。
//BRep_Tool:
提供类方法以访问几何图形的BRep形状。
//BRep_TVertex:
BRep的TVertex继承自TopoDS的TVertex。它包含几何数据。TVertex包含一个3d点、位置和一个公差。
类图
3、BRepAdaptor类说明:
//BRepAdaptor_CompCurve:
BRepAdaptor的曲线允许使用BRep拓扑结构的类似三维曲线的Wire。警告:对于这类曲线,C0和C1是连续的。不是假设的。所以要小心一些算法!请注意,BRepAdaptor_CompCurve根本不可能是周期曲线(即使它包含单周期性的边缘)。BRepAdaptor_CompCurve只能在所有边都在的有效连线上工作相互连接成一条链。
//BRepAdaptor_Curve:
BRepAdaptor的曲线允许使用BRep拓扑结构的类似三维曲线的Wire。它有来自Adaptor3d的Curve类方法。它是用边缘创建或初始化的。它考虑到局部坐标系。如果Edge有一个3D曲线,它是优先使用。如果边缘上没有3D曲线,使用曲面上的一个曲线。它可以通过创建或初始化一个Edge和一个Face强制使用曲面上的曲线。
//BRepAdaptor_Curve2d:
来自BRepAdaptor的Curve2d允许使用Edge,类似于一个二维曲线(参数空间中的曲线)。它拥有Adpator的类Curve2d的方法。它使用Face和Edge创建或初始化,这些方法继承自Geom2dAdaptor的Curve。
//BRepAdaptor_Surface:
来自BRepAdaptor的Surface允许使用BRep拓扑结构的Face,类似于一个3D曲面。它具有Adaptor3d的类Surface的方法。它是用Face创建或初始化的。这需要考虑到局部坐标系。u,v参数范围是限制的最小最大值,除非标志限制是设置为false。
类图
4、BRepLProp
类说明
//BRepLProp:
这些全局函数计算由两条边在连接点连接而成的曲线的连续度。
//BRepLProp_CLProps
//BRepLProp_CurveTool
//BRepLProp_SLProps
//BRepLProp_SurfaceTool
5、BRepTools
类说明:
//BRepTools:BRepTools包提供了用于BRep数据结构的实用程序。
- WireExplorer:用于探索有序边的拓扑结构的工具。
- ShapeSet:用于读写、转存的工具。
- UVBounds:在面的参数空间中计算面、线或边的边界的限制的方法。
- Update:当拓扑被创建用于计算所有缺失的数据时调用的方法。
- UpdateFaceUVPoints:更新存储在一个面上的面的UV点的方法。
- Compare:比较两个顶点的方法。
- Compare:比较两条边的方法。
- OuterWire:找到一个面外边缘线的方法。
- Map3DEdges:映射一个形状所有3D边缘的方法。
- Dump:转存BRep对象的方法。
//BRepTools_GTrsfModification:
通过来自gp的GTrsf定义几何的修改。所有方法都返回True并转换几何。
//BRepTools_History:
历史记录记录了以下输入形状之间的关系:(S1,…, Sm)和输出形状(T1,…, Tn):
1)由输入形状Si生成输出形状Tj: Tj <= G(Si);
2)输出形状Tj由输入形状Si修改:Tj <= M(Si);
3)删除一个输入形状(Si): R(Si) == 1。
这意味着输入形状不能被删除和修改同时进行。但是可以生成形状、删除形状。例如,在圆角操作的边缘生成面,然后删除。
不能从相同的形状生成和修改任何形状。同时:集合G(Si)和M(Si)不相交(G(Si) ^ M(Si) == 0)。
每个输出形状应该是:
1)输入形状或
2)从输入形状生成或修改(甚至在必要时从隐式null形状生成):Tj == Si V(存在Si, Tj <= G(Si) U M(Si))。
在“生成”和“修改”关系之间选择的建议:
1)如果形状的尺寸大于或小于输入形状的尺寸,则形状由输入形状生成;
2)如果输入形状也是输出形状,则由输入形状生成形状;
3)如果将由这些形状生成的形状连接起来,则由相同维度的输入形状生成一个形状;
4)如果它通过改变位置、公差、参数空间的边界(实体的面)、参数化和/或应用拟合来替换输入形状,则输入形状被修改;
5)如果一个形状是通过将这些形状修改后的形状连接而产生的,则由相同维度的输入形状被修改。
两个连续的历史记录:
1)形状S1,…, Sm到形状T1,…, Tn的一个历史(H12)和形状T1,…, Tn到形状Q1,…, Ql的另一个历史(H23),可以合并到形状S1,…, Sm到形状Q1,……Ql的单一历史(H13)中。
//BRepTools_Modification:
定义形状的几何修改,即面、边和顶点的更改。
//BRepTools_Modifier:
对形状执行几何修改。
//BRepTools_NurbsConvertModification:
通过Trsf定义一个来自gp的几何修改。所有方法都返回True并转换几何图形。
//BRepTools_PurgeLocations:
从形状及其子形状的所有位置中删除满足以下条件的局部坐标系:
aTrsf.IsNegative() || (Abs(Abs(aTrsf.ScaleFactor()) - 1.) > TopLoc_Location::ScalePrec())。
//BRepTools_Quilt:
在共同的边缘和重建壳的地方胶粘面的一个工具。用户使用Bind方法指定公共边对。一条边被指定为用来代替另一条边(他们应该是几何上的合并,但这没有检查)。它们可以是相反的方向,这是由方向决定的。
用户可以使用add方法添加形状,所有的面都被注册,所有复制的面和边都被胶粘在绑定的边上。用户可以调用shell方法从当前的面集计算组合壳。如果没有绑定,这个类可以用来从已经共享边缘的面制作shell。
//BRepTools_ReShape:
通过在某些组件上进行预定义替换的组件来重新构建形状。在第一阶段,它记录替换或删除某些单独形状的请求。对于每个形状,记录最后一个给定的请求。请求可以是“定向的”(即只应用于具有相同方向的项目),也可以不应用(替换形状的方向尊重原始形状的方向)。然后,这些请求可以应用于可能包含这些单个形状中的一个或多个的任何形状。支持“BRepTools_History”历史记录通过方法“History”。
//BRepTools_ShapeSet:
包含一个形状及其所有子形状、位置和几何图形。拓扑结构继承自TopTools。
//BRepTools_Substitution:
用其他形状替换子形状的工具。用户使用Substitute方法来定义修改。指定一组形状来替换初始形状。Build方法通过修改重构一个新的Shape。注册了Shape和新形状。
//BRepTools_TrsfModification:
描述了一个使用gp_Trsf更改几何形状的修改。所有函数都返回true并转换形状的几何形状。
//BRepTools_WireExplorer:
WireExplorer是一个炸开按顺序连接的线边缘。例如,每条边都通过原点与前一条边相连。
如果一条线没有闭合,则只返回一段边,其长度取决于宅开边的起始位置。
算法认为线是有效的,没有任何缺陷,可以停止边缘炸开。这些缺陷可以是循环,方向错误的边(两条边进入共享顶点或从共享顶点出去),边的分支,向内或向外呈现的边。如果线有这样的缺陷,WireExplorer可以返回线中(但不是所有)的边。这取决于缺陷的类型和起始边缘的位置。
类图:
6、TopExp
类说明:
//TopExp:
此包提供了用于开发拓扑数据结构。
炸开:查找给定类型的所有子形状的工具。例如,一个实体的所有面。
此包中的方法来映射一个形状的子形状。所有类的所有方法都是公有的。
//TopExp_Explorer:
炸开是一种从TopoDS包中访问拓扑数据结构的工具。
Explorer由以下组件构建:
- 炸开的形状。
- 要查找的形状类型:例如顶点,边缘。此类型不能为SHAPE。
- *要避免的形状类型。例如SHELL, EDGE。默认情况下,该类型是SHAPE,这意味着对探索没有限制。
Explore访问所有的结构,以找到不属于所请求类型的形状。
类型中包含的,以避免。
例如找到形状S中所有的面:
TopExp_Explorer Ex;
for (Ex.Init(S,TopAbs_FACE); Ex.More(); Ex.Next()) {
ProcessFace(Ex.Current());
}
另一个方法:
TopExp_Explorer Ex(S,TopAbs_FACE);
while (Ex.More()) {
ProcessFace(Ex.Current());
Ex.Next();
}
查找不在一条边中的所有顶点:
for (Ex.Init(S,TopAbs_VERTEX,TopAbs_EDGE); ...)
要找到SHELL中的所有面,则所有不在SHELL中的面:
TopExp_Explorer Ex1, Ex2;
for (Ex1.Init(S,TopAbs_SHELL),...) {
// visit all shells
for (Ex2.Init(Ex1.Current(),TopAbs_FACE),...) {
// visit all the faces of the current shell
}
}
for (Ex1.Init(S,TopAbs_FACE,TopAbs_SHELL),...) {
// visit all faces not in a shell
}
如果要避免的类型相同或复杂程度小于与找到的类型,则没有任何效果。
例如,搜索不在顶点中的边并没有什么不同。
7、TopoDS
类说明
//TopoDS:
提供将类TopoDS_Shape的对象转换为更专门化子类的对象的方法。
//TopoDS_AlertAttribute:
断言属性对象,在其字段中存储TopoDS形状
//TopoDS_AlertWithShape:
在其字段中存储TopoDS形状断言的对象。
//TopoDS_Builder:
Builder用于创建拓扑数据结构。它是Builder类层次结构的根。
在Builder中有三组方法:
Make方法创建形状。
Add方法包括另一个形状中的一个形状。
Builder中的方法不是静态的。他们可以在继承的构建器中重新定义。
此生成器不提供生成顶点、边、面、壳或实体的方法。这些方法在继承的生成器中提供,因为它们必须提供几何图形。
Add方法检查以下规则:
- 任何形状都可以添加到COMPOUND中。
- COMPSOLID中只能添加SOLID。
- 在SOLID中只能添加SHELL、EDGE和VERTEX。
EDGE和VERTEX为内部或外部。
- SHELL中只能添加FACE。
- 在FACE中只能添加WIRE和VERTEX。
VERTEX为内部或外部。
- 在WIRE中只能添加EDGE。
- EDGE中只能添加VERTEX。
- VERT中不能添加任何内容
//TopoDS_Compound:
描述一种复合对象:
- 参考潜在复合对象,该复合对象有可能被给定位置和方向。
- 具有底层复合对象的位置,给出其在局部坐标系中的位置。
- 根据其几何形状(相对于其他形状的方向),具有底层化合物的方向。
将形状S转换为更具体的返回类型Compound。
//TopoDS_CompSolid:
描述复合实体
- 参考具有给定位置和方向的潜在潜在复合实体
- 具有基础复合实体的位置,给出其在局部坐标系中的位置
- 根据其几何形状(相对于相对于其他形状的方向),具有下面的复合实体的方向。
将形状S转换为更具体的返回类型CompSolid。
//TopoDS_Edge:
描述一条边
- 参考潜在的边,该边有可能被给定位置和方向
- 具有基础边的位置,给出其在局部坐标系中的位置
-根据其几何结构(相对于其他形状的方向),具有下边缘的方向。
//TopoDS_Face:
描述一个面
-参考有可能被给定位置和方向的基础面
-具有基础面的位置,给出其在局部坐标系中的位置
-根据其几何图形(相对于其他形状的方向),具有基础面的方向。
//TopoDS_FrozenShape:
试图修改已共享或受保护的形状。
//TopoDS_HShape:
操作带有句柄的形状的类。
//TopoDS_Iterator:
迭代给定TopoSDS_shape对象下的基础形状,提供对其组件子形状的访问。每个组件形状被返回为具有方向的TopoSDS_ shape,以及原始值和相对值的组合。
//TopoDS_LockedShape:
试图修改已共享或受保护的形状的几何体。
//TopoDS_Shape:
描述一个形状:
- 引用一个潜在的形状,该形状有可能被指定位置和方向
- 具有基础形状的位置,给出其在局部坐标系中的位置
- 就其几何形状而言,具有基础形状的方向(相对于其他形状的方向)。
注意:如果一个形状引用了一个包含空形状列表的基础形状,则该形状为空。
//TopoDS_Shell:
描述一个shell
- 引用一个潜在的壳,该外壳有可能被指定位置和方向
- 具有底层壳的位置,给出其在局部坐标系中的位置
- 根据其几何结构(相对于其他形状的方向),具有底层壳的方向。
//TopoDS_Solid:
描述一个实体形状
- 引用一个潜在的实体形状,该形状有可能被给定一个位置和方向
- 具有基础形状的位置,给出其在局部坐标系中的位置
- 根据其几何结构(与中的方向相反与其他形状的关系)。
//TopoDS_TCompound:
TCompound是一组通用的形状。
//TopoDS_TCompSolid:
通过面连接的一组实体。
//TopoDS_TEdge:
二维或三维曲线的拓扑部分,边界是一组定向顶点。
//TopoDS_TFace:
曲面或二维空间的拓扑部分。边界是一组连线和顶点。
//TopoDS_TShape:
TShape是描述2D或3D空间中的一组点的拓扑结构。
拓扑形状是由其他形状制成的结构。这是一个用于支持拓扑对象的延迟类。
TShape由其可选域(几何体)及其组件(其他具有位置和方向的TShape)定义。零部件存储在“形状列表”中。
TShape包含以下布尔标志:
- Free :释放或。
- Modified :已修改。
- Checked :已检查。
- Orientable :可以定向。
- Closed :已关闭(请注意,只能关闭“导线”和“外壳”)。
- Infinite :是无限的。
- Convex :是凸面。
用户无法直接访问从TShape派生的类。它们使用从Shape派生的类来处理它们。
//TopoDS_TShell:
通过边连接的一组面
//TopoDS_TSolid:
三维空间的拓扑部分,以壳、边和顶点为边界。
//TopoDS_TVertex:
顶点是二维或三维的拓扑点。
//TopoDS_TWire:
由顶点连接的一组边。
//TopoDS_Vertex:
描述一个顶点
- 引用一个潜在的顶点,该顶点有可能被给定一个位置和方向
- 具有基础顶点的位置,给出其在局部坐标系中的位置
- 根据其几何结构(相对于其他形状的方向),具有基础顶点的方向。
//TopoDS_Wire:
描述一根线
- 参考具有给定位置和方向的电势的底层导线
- 具有基础导线的位置,给出其在局部坐标系中的位置
- 根据其几何结构(相对于其他形状的方向),具有基础导线的方向。
类图
8、TopTools
对TopoDS数据类型列表进行重定义