OCCT基本概念
用面向对象方法和软件工程思想分析,整个 OCC 由五个模块组成,分别是
基础类模块、建模数据模块、建模算法模块、可视化模块、数据交换模块和应用
程序模块。其中,建模数据模块主要提供二维和三维几何模型的数据结构,也称
据结构模块。
1.类和泛化
OCC中类分为 普通类 通用类 推迟类 分别对应 C++中 具体类 抽象类和模板类
2.数据类型分类
句柄处理类型 和 值处理类型两种
OCC 中所有数据类型可分为两大类:
通过句柄(或引用)处理的数据类型和通过值处理的数据类型
3.持久化和数据模式
持久化声明对象需要要从Standard_Persistent 类或其派生类派生的
基础类分析
基础类是 OCC 的基石。它提供了大量的通用服务,如自动动态内存管理(通过句柄对对象进行处理)、集合容器、异常处理、通过向下抛掷和构建插件程序而获得的泛化等
1.根类组件
a.基本数据类型
如 Boolean(布尔类型)、Character(字符型)、Integer(整型)或者 Real(实型)等
b.动态对象的安全处理,以确保那些不再被引用的对象能被及时删除(Standard_Transient 类)
c.可设置的内存优化管理器。它能改善那些经常使用动态对象的程序性能。
d.run-time 类型信息扩展机制。它使得复杂程序的创建变得更为简易。
e.异常管理以及C++各种流的封装。
根类主要在 Standard 和 MMgt 两个包中实现。
2.串类组件
串类用来处理动态大小的 ASCII 和 Unicode 字符序列,可以通过句柄处理,
因此也可以被共享。串类在 TCollection 包中实现
3.集合容器组件
集合容器是处理动态大小的数据集合的类
集合容器包含许多通用类,如 run-time 大小的数组、列表、栈、队列、集(Set)和散列图(hashmap)。集合容器在 TCollection 和 NCollection 包中实现。
4.标准对象的集合容器组件
TColStd 包为 TCollection 包中通用类的一些经常使用的实例化提供对象(Standard 包)或者串(来自 TCollection 包)
5.向量和矩阵类组件
向量和矩阵类提供了有关向量和矩阵的常用数学算法和基本运算(加、乘、转置、求逆等)。
6.基本几何类型组件
基本几何类型提供了基本几何实体和代数实体的实现。这些实现符合 STEP
(Standard Exchange of Product data model,即产品数据模型的交换标准)。它们提
基本几何 Shape 的描述(点、向量、直线、圆与圆锥、平面与基本曲面、通过
标轴或坐标系使 Shape 在平面上或空间中定位)和 Shape 几何变换的定义与应
(平移、旋转、对称、缩放、复合变换、代数计算工具)
7.常用数学算法组件
常用数学算法为那些经常使用的数学算法提供 C++实现。这些算法有:
(1)求解线性代数方程组的算法 ;
(2)求一元或多元函数最小值的算法;
(3)求解非线性方程或非线性方程组的算法;
(4)求矩阵特征值和特征向量的算法
8.异常类组件
OCC 提供了一套异常类。所有异常类都是基于它们的根类—— Failure 类
9.数量类组件
数量类为日期和时间信息提供支持,同时也为表示常用物理量的基本类型
(如长度、面积、体积、质量、密度、重量、温度和压力等)提供支持。
10.应用服务组件
四种服务:
a.单位转换工具。它们为各种量和相应物理单位的处理提供统一机制。
这种机制能够检查单位的兼容性,以及在两种不同的单位间进行数值转换等(详UnitsAPI 包)。
b.有关表达的基本解释器。它使得用户脚本工具的建立和表达的通用定义等变得更容易(详见 ExprIntrp 包)。
c.用于处理配置资源文件(见 Resource 包)和用户定制信息文件(见
Message 包)的工具。有了这些工具,为应用程序提供多语言支持就很容易了。
d.进程提示和用户中断接口
数据类型、句柄、内存管理器和异常类
1.数据类型
a.基本类型
OCC 基本类型 C++基本类型
Standard_Integer int
Standard_Real double
Standard_ShortReal float
Standard_Boolean unsigned int
Standard_False=0
Standard_True=1
Standard_Character char
Standard_ExtCharacter short
Standard_Cstring char* (指针类型)
Standard_Address void* (指针类型)
Standard_Extstring short* (指针类型)
b.值处理类型
值处理类型可分三大类:
(1)基本类型;
(2)枚举类型;
(3)由这样一些类(既不是由 Standard_Persistent 类派生,也不是由
Standard_Transient 类派生,无论是直接派生还是间接派生)定义的类型
c.句柄处理类型
句柄处理类型可以分为两大类:
(1)由 Persistent 类的派生类定义的类型。这些类型可以被长久地存在文件。
(2)由 Transient 类的派生类定义的类型。
2.句柄
在 OCC 中,句柄是通过类实现的。句柄含有多个接口成员,其中一个包含
个引用。一般情况下,仅需要使用它的引用。句柄处理类要么是持久的,要么是短暂的。
这里提三个注意事项:
(1)Transient 类和 Persistent 类不完全是通过句柄处理的,它们也可以通过值处理;
(2)持久对象不能含有非耐存句柄(那些引用非持久对象的句柄);
(3)使用句柄的目的是共享对象(对于所有局部操作,建议使用值处理类)。
例:
Handle (Geom_Point) p1;
Handle (Geom_CartesianPoint) p2, p3;
p2 = new Geom_CartesianPoint;
p1 = p2; //可以,标准的赋值。
p3 = Handle (Geom_CartesianPoint) : : DownCast (p1);
// 可以,p1 的实际类型是 CartesianPoint 句柄,尽管它的静态类型是 Point 句柄。
3.内存管理器
标准的内存分配有三种方式:静态分配、栈分配和堆分配
建模程序在运行期间,需要构造和析构大量的动态对象。在这种情况下,标准的内存分配数可能无法胜任工作。因此,OCC 采用了特殊的内存管理器(在Standard 包中实现)。除了异类,所有 OCC 类都使用 OCC 内存管理器进行存储分配
Standard::Allocate()
Standard::Free()
4.异常类
异常处理机制实现了正常程序逻辑与错误处理的分离,提高了程序的可阅读性和执行效率。
集合容器和标准对象的集合容器
集合容器组件包含一些具有动态大小的数据集合类,如数组类、列表类和图(map)类等。集合容器类是通用的,即它们可以持有许多不必从根类继承的对象。OCC 的集合容器有通用集合、通用图和迭代器。它们都在 TCollection 包中。
通用集合有 Array1 、Array2 、HArray1 、HArray2 、Sequence 、HSequence 、
List 、Queue 、Stack、Set 和 HSet
这些实例化有:
(1)对于一维数组,使用标准对象和 TCollection 串对 TCollection_Array1
用类进行实例化。
(2)对于二维数组,使用标准对象对 TCollection_Array2 通用类进行实例化。
(3)对于通过句柄处理的一维数组,使用标准对象和 TCollection 串对
TCollection_HArray1 通用类进行实例化。
(4)对于通过句柄处理的二维数组,使用标准对象对 TCollection _H-Array2
用类进行实例化。
(5)对于序列,使用标准对象和 TCollection 串对 TCollection _Sequence 通用类进行实例化。
(6)对于通过句柄处理的序列,使用标准对象和 TCollection 串对 TCo-llection_HSequence 通用类进行实例化。
(7)对于列表,使用标准对象对 TCollection_List 通用类进行实例化。
(8)对于队列,使用标准对象对 TCollection_Queue 通用类进行实例化。
(9)对于集,使用标准对象对 TCollection_Set 通用类进行实例化。
(10)对于通过句柄处理的集,使用标准对象对 TCollection_HSet 通用类进行实例化。
(11)对于栈,使用标准对象对 TCollection_Stack 通用类进行实例化。
(12)对于基于图键的散列器,使用标准对象对 TCollection_MapHasher 通用类进行实例化。
(13)对于基本散列图:使用标准对象对 TCollection_Map 通用类进行实例化。
(14)对于有一组项目的散列图,使用标准对象对 TCollection_DataMap 通用类进行实例化。
(15)对于基本索引图,使用标准对象对 TCollection_IndexedMap 通用类进行实例化。
(16)对于有一组项目的索引图,使用标准对象对 TCollection_Indexed-DataMap 通用类进行实例化。
(17)对于整数图,使用 TColStd_PackedMapOfInteger 类进行实例化。这种实例化在性能和内存使用上都得到了优化(它使用位标记对整数编码;这样的优化结果是每 32 个整数只需 24 个字节空间)。就像对整数集一样,这个类也为整数图提供了布尔操作(求并运算、求交运算、求补运算、求异运算、相等和包含查)。
数学基本类型和数学算法
在 CAD 软件中,主要解决的就是数学模型。因此,本节将描述 OCC 的数学基本类型和数学算法。它们包括向量和矩阵类、基本几何类型和常用数学算法。
1.向量和矩阵类
向量和矩阵组件为向量和矩阵提供了 C++实现。这个组件通常用来定义更复杂的数据结构。向量和矩阵类支持由实数组成的向量和矩阵的标准操作,如加、乘、转置、求逆等。
2.基本几何类型
gp 包为二维和三维对象提供了一些通过值处理的类。它定义了一些基本的非持久几何实体;这些实体在二维和三维的代数计算和基本几何结构分析中用到。它也提供一些基本的几何转换,如等价、旋转、平移、镜像、缩放、复合变换等。注意:gp 包中的实体是通过值处理的。
gp 包中可实现的几何实体有:二维和三维直角坐标(x, y, z)、矩阵、笛卡尔点、向量、方向、轴、直线、圆、椭圆、双曲线、抛物线、平面、无穷圆柱曲面、球面、螺旋面和圆锥面。
TColgp包为 TCollection 类的实例化提供类(来自 gp 包,如 XY、 XYZ、 Pnt、 Pnt2d、Vec、Vec2d、 Lin、Lin2d、 Circ、 Circ2d 等; 这些类是非持久的)。
3.常用数学算法
所有的数学算法都是采用相同的规则来实现的。这些规则包括:
(1)构造函数。在给定合适的参数后,构造函数完成算法需要实现的所有或者大部分算法。所有相关信息存储在构造的对象中。因此后发计算或后发问题将以最有效的方式解决。
(2)IsDone 函数。如果计算成功,IsDone 函数将返回布尔真值。
(3)对每一种算法的都提供了一套函数;每套函数能够包含多个结果。只有IsDone 函数返回真值时,才可以调用函数。否则将产生 StdFail_NotDone 异常。