数据结构分析
数据结构,指的是数据元素之间的相互关系,尤其是数据的逻辑结构。
三种数据包括:二维几何数据、三维几何数据和拓扑数据。
1.数据结构模块的整体框架
数据结构模块的组成及其各工具箱提供的服务
数据结构模块
几何工具 二维几何 三维几何 拓扑
1.插值和逼近 1.二维几何类型 1.三维几何类型 1.保持 Shape 定位轨迹
2.Shape 的直接构造 2.二维的集合容器 2.三维的集合容器 2.Shape和SubShape的处理
3.B样条转换 3.二维适配器 3.三维适配器 3.拓扑数据结构的访问
4.极值计算 4.拓扑类型和拓扑方向 4.曲线和曲面的局部特征 4.Shape列表和Shape图
2.二维几何数据结构
二维几何数据结构的理解难点在于拓扑类型、拓扑方向和拓扑状态的理解。
a.二维空间上几何对象的数据结构,主要由Geom2d包提供。
Geom2d 包提供的这些对象是非持久的,并且是通过引用而不是通过数值处理的。复制一个实例,只是将句柄拷贝而已,对象没有被拷贝。因此,对一个实例(对象)的改变,将在所有引用它的地方发生改变。如果需要的对象不是单一的,而是一系列的,那么 TColGeom2d 包将提供必要的功能。该包为通用类中那些标准和经常使用的实例化提供几何对象。
TColGeom2d 包为来自 Geom2d 包的曲线提供一维数组、二维数组和序列的实现。所有这些对象能以两种不同的方式处理:句柄处理和数值处理。
b.TopAbs 包
TopAbs 包提供通用枚举类,用来描述拓扑学基本概念和处理枚举类的方法,不包含具体类
enum TopAbs_ShapeEnum
TopAbs_COMPOUND, //复合体由不同拓扑类型对象组成的整体
TopAbs_COMPSOLID, //组合实心体由几个通过面连接的实心体组成它将线框和壳的概念延伸到实心体上。
TopAbs_SOLID, //实心体 由壳限制的空间的一部分。它是三维的
TopAbs_SHELL, //壳 由几个面(通过边连接)组成。壳可以是开放的,也可以是封闭的
TopAbs_FACE, //面 在二维中,它是平面的一部分。在三维中,它是曲面的一部分;它的几何结构由构造函数决定;它是二维的
TopAbs_WIRE, //线框 由一组边(通过定点连接)组成。它可以是开放的,也可以是封闭的,这取决于边是否彼此相连
TopAbs_EDGE, / /边 与约束曲线对应的拓扑元素。边通常由顶点限制。它是一维的。
TopAbs_VERTEX, //顶点 与点对应的拓扑元素。它没有维度。
TopAbs_SHAPE //Shape 包含以上所有类型的通用术语。
};
c.拓扑方向
拓扑方向的概念由 TopAbs_Orientation 枚举类描述。在许多建模器里都用到了方向
enum TopAbs_Orientation
需要用到拓扑方向的三种 Shape 有:由顶点限制的曲线、由边限制的曲面和由面限制的空间。
d.拓扑状态
enum TopAbs_State
3.三维几何数据结构
三维几何对象的数据结构主要由 Geom 包提供。
Geom 包包含了所有的基本几何转换(如等价、旋转、平移、镜像、缩放和复合变换等)。另外,Geom 包也提供了一些基于几何对象引用定义的特殊函数(如在 B 样条曲线上增加一个控制点,对曲线进行改善等)。
Geom 包中所有几何实体都是以 STEP 方式处理的。包中可实现的非持久的通过句柄处理的对象有:点、笛卡尔点、向量、方向具有幅值的向量、轴、曲线、直线、圆锥、圆、椭圆、双曲线与抛物线、基本曲面、平面、边界曲线与边界曲面、裁剪曲线与裁剪曲面、非均匀有理化 B 样条曲线与曲面、Bezier 曲线与曲面、圆柱面、球面与螺旋面、扫描曲面、线性挤压曲面、旋转曲面、偏移曲面。对于每一条曲线(具有一个参数),其局部特征有:点、导数、正切、法向量、曲率和曲率中心。对于每一个参数,曲面(具有两个参数)的局部特征有:导数、切线、曲率中心、点、法向量、最大曲率、最小曲率、曲率的主方向、中间曲率和高斯曲率。另外,GeomLProp 和 Geom2dLProp 包提供了一些描述算法的类。
TColGeom 为那些来自 Geom 包的曲线和曲面提供一维数组、二维数组和序列的实现。
4.拓扑数据 结构
拓扑数据结构定义了参数空间中对象的数据结构。由拓扑工具箱提供五种服务:保持 Shape 位置轨迹,Shape、SubShape 以及它们的拓扑方向和拓扑状态的命名,Shape 和 SubShape 的处理,访问拓扑数据结构,以及使用Shape 列表和 Shape 图。
CLProps 这个函数计算了曲线的局部特征(正切、曲率、法向量和扭矩)。它在二维上计算曲率极值和变形点。SLProps 这个函数计算了曲面的局部特征(切线、放向量和曲率)。Continuity 这个全局函数计算了两曲线连接处的平滑性。
a.保持 Shape 位置轨迹
可以将 OCC 的局部坐标系可以看作以下两者之一:
(1)具有一个原点和三个标准正交向量的右手三面体。这个定义由 gp _Ax2类提供。
(2)由 a+1 决定的转换,它允许我们在局部引用框架和全局引用框架间进行坐标转换。这个定义由 gp_Trsf 类提供。
b.Shape 和 SubShape 的处理
[1] 由 TopoDS 包提供,TopoDS 包描述了具有以下特征的拓扑数据结构:
(1)对没有拓扑方向也没有位置的抽象 Shape 的引用
(2)通过工具类对数据结构的访问。
TopoDS 包是基于 TopoDS_Shape 类和那个定义了自己下层 Shape 的类的。TopoDS 包提供了两套类:一套由下层 Shape(既没有拓扑方向也没有位置)派生;另一套则由 TopoDS_Shape(与 TopoAbs 包中列出的标准拓扑 Shape 一致)派生。
[2] TopoDS_Shape 类
TopoDS_TShape 类是所有 Shape 描述的根类,包含一个 Shape 列表。该类是通过引用处理的 。Shape 的特殊信息总是由 TopoDS_TShape 的派生类的派生类添加。TopoDS_TShape 类是不可见的、是推迟类、是通过引用处理的。
TopoDS_Shape 类它包含一个指向下层抽象 Shape 的引用、一个拓扑方向和一个引用坐标。该类是通过数值处理的,因此不能被共享。 TopoDS_Shape 类通过数值处理 。TopoDS_Shape 的派生类没有构造函数。TopoDS 包提供了能够通过类型匹配,将 TopoDS_Shape 类的一个对象抛掷给 TopoDS_Shape 派生类的一个对象。
TopoDS_Shape aShape;
TopoDS_Vertex v1 = TopoDS::Vertex(aShape);
一个Shape模型是一个可共享的数据结构,因为它可以被其它Shape使用。可共享的数据结构是通过引用来处理的。若一个简单引用不够充分时,需要增加两个信息:一个拓扑方向和一个局部坐标引用。拓扑方向 描述被引用的形状如何在一个边界使用。一个局部引用坐标(Location from TopLoc)允许程序员在 Shape 的定义位置之外引用该 Shape。
[3]拓扑数据结构的访问
TopExp 包提供了一些工具。 TopExp_Explorer 类用来找到指定类型的所有子对象 ,用来访问由 TopoDS 包描述的数据结构。例如,找到实心体的所有面。
a.MapShapes ,用来收集一个 Shape 的子图对象。
b.MapShapesAndAncestors,用来收集子对象和包含子对象的对象;
c.FirstVertex、LastVertex 和 Vertices 这三者用来寻找边的顶点。