摘要:Qt是挪威TrollTech公司推出的一个跨平台的C++图形用户界面库,提供给应用程序开发者建立图形用户界面所需的所有功能.OpenCASCADE采用基于OpenGL的专用CAD类库,可应用于CAD软件开发.仿真软件设计和三维图形显示等领域.将Qt和OpenCASCADE在C++环境下结合起来能够进行建模软件的开发.介绍了Qt及OpenCASCADE类库的主要功能,简要叙述了边界表示法,给出了几何和拓扑的定义,对OCC中的数据类型和数据结构进行了阐述.经过实际的编程开发,结果表明,Qt及OpenCASCADE类库能够建立多种复杂模型,且拥有较好的显示效果,适合作为几何建模软件的开发工具.
0 引言
特定平台具有特定的系统特性.应用开发环境及系统运行环境,若想使编制好的软件能够运行在多个平台上,需选用具备跨平台开发程序的工具开发软件.Qt是挪威TrollTech公司推出的一个跨平台的C++图形用户界面库,提供给应用程序开发者建立图形用户界面所需的所有功能.
使用“编写,随处编译”的方式用于构建多平台图形用户界面程序,使用单一的源代码树和简单的重编译,能够在Windows,MacOS X,Linux,Solaris,HP-UX 和其他使用X11的Unix版本下编制程序.Qt完全面向对象且很容易扩展,它已经成为全世界范围内数千种成功的应用程序的基础,并为世界上数千个大公司,包括IBM.摩托罗拉和夏普等提供开发软件.综合以上因素,选择Qt作为建模平台的开发工具.
OpenCASCADE(Open Computer Aided Software forComputer Aided Design and Engineering) 是由法国的MDTV(Matra Datavision)公司设计开发的CAD 系统,于1999年开放源代码.
OpenCASCADE 采用C++开发基于OpenGL 的专用快速开发的CAD 类库,提供基本几何体表达与操作.CAD 模型显示与操作.多种CAD 文件格式读取与保存等功能,可应用于CAD软件开发.仿真软件设计和三维图形显示等方面.
基于OpenCASCADE 进行CAD 系统开发,能够将OpenCASCADE 类库的二维和三维建模.布尔操作.可视化的特性及VC++程序实时性好的特点有效地结合,进行仿真应用等,因此选用它作为建模内核创建模型.
1 Qt 简介
Qt类似于X Window上的Motif,Openwin,GTK等图形界面库和Windows 平台上的MFC,OWL,VCL,ATL等,提供给应用程序开发者建立图形用户界面所需的所有功能,目前包括基于Framebuffer 的Qt Embedded.快速开发工具Qt Designer.国际化工具Qt Linguist 等部分.自1995 年以来QT/C++应用程序就在商业应用中占据地位.QT也是流行的Linux桌面环境KDE的基础,KDE 是所有主要的Linux 发行版的一个标准组件.Qt支持的操作系统有Microsoft Windows 95/98,Mi-crosoft Windows NT,Linux.Solaris,SunOS,HP-UX,Digi-tal UNIX(OSF/1,Tru64),Irix,FreeBSD,BSD/OS,SCO,AIX,OS390,QNX等.Qt提取了窗口和操作系统的底层基础构造函数,为软件开发工程师提供了一致的逻辑界面,Qt API在所有支持的平台上都是相同的.
Qt用C++语言实现,其良好封装机制使得Qt的模块化程度非常高,可重用性较好,对于用户开发来说是非常方便的.还提供了一种称为signals/slots的安全类型来替代callback,这使得各个元件之间的协同工作变得十分简单[6].
Qt有一个图形界面的所见即所得工具--Qt De-signer.根据这一工具可以任意构造需要的图形界面,而且利用UIC工具将生成的UI文件转换为CPP文件和H文件,使界面软件部分和系统实现软件部分融合到一起.
Qt Designer 提供了Qt 基本的可绘制窗口部件,比如QWidget,QLabel,QPushButton,QVBoxLayout 等.在设计器中通过鼠标直接拖放这些窗口部件,能够高效.快速地实现GUI界面的设计,界面直观形象,所见所得.
2 OpenCASCADE简介
OpenCASCADE包括3D曲面和实体建模组件.可视化组件.数据交换组件和适合快速开发的应用程序开发框架,提供二维和三维几何体的生成.显示和分析,是一款可以用来进行计算机可视化的几何内核,并且是开放源代码的.OpenCASCADE提供了点.线.面.体和复杂形体的显示和交互操作,经过深度开发后可实现纹理.光照.图元填充.渲染等图形操作和放大.缩小.旋转.漫游.模拟飞行.模拟穿越等动态操作.OpenCASCADE定义了图形数据的存储格式以及大量的图形算法,可以帮助开发人员快速地进行面向对象程序的开发.目前支持3种操作系统:Linux,Windows NT和Sun Solaris.
OpenCASCADE 由一系列的C++类构成,相关的类组织成包,包组织成库文件,相关库组织成模块,通过有机组织的库文件提供了基础类.模块数据管理.建模算法.模型的显示.应用框架.数据交换6个模块.
OpenCASCADE 还为用户提供了OCAF(OpenCAS-CADE AppliCation Framework),它是一种基于Open- CASCADE的RAD(Rapid Applieation Development,快速开发工具)框架,是OpenCASCADE 类库的辅助工具,在几何建模过程中,不仅能处理用到的类库里的任何数据和算法,还可以用于组织.保存应用数据,开发人员可以使用这一工具进行应用程序的快速开发.
3 OpenCASCADE建模技术
3.1 边界表示法
OpenCASCADE是一个先进的.三维的.边界表示(B-Rep)为主的几何造型工具包,是由C++开发设计基于OpenGL的专用快速开发的CAD类库,提供统一的数据结构,同时支持线框.CSG.B-Rep三种模型,并允许这个三种表示共存于统一的数据结构中.OpenCASCADE主要基于边界表示法进行建模.边界表示(BoundaryRepresentation)也称为BR表示或B-rep表示,是三维实体建模在计算机内部的一种表达方式,即数据存放的逻辑结构.它是几何造型中成熟.无二义的表示法.物体的边界是物体内外部点的分界面,一般用体表.面表.环表.边表和顶点表5层描述.即实体的边界由面的并集表示,每个面由它所在的曲面的定义加上其边界来表示,面的边界是边的并集,边由点来表示.
边界表示法强调物体表面的细节,详细记录了构成物体形体的所有几何元素的几何信息及其相互间的联接关系即拓扑信息,几何信息与拓扑信息分开存储,完整清晰,并能惟一定义物体的三维模型,缺点是对于不规则三维物体的描述不太方便.这一方法主要适用于三维空间操作和分析.
3.2 几何和拓扑
在OpenCASCADE中,几何体(Geometry).拓扑(To-pology)都是从基础的抽象类派生而来,所有的实体对象具有相同的功能,如实体本身的信息保存功能.自身复制功能以及调试功能等,这些功能均由类TopoDS来实现.几何是指构成模型的纯粹的几何元素,如点(point).曲线(curve)和曲面(surface)等,拓扑是指模型各几何实体之间的空间关系,几何体及其拓扑关系构成了模型的基本空间结构.
OpenCASCADE 中存在两种实现方法完全不同的几何体类:构造几何体和模型几何体.构造几何体是指那些具有几何对象的数学定义的C++类;模型几何体是指为构造几何体增加模型操作功能的那些类,它的数据结构中含有指向构造几何体类的指针,模型几何体和模型保存在一起.
在边界表示法中,描述形体的信息包括几何信息(Geometry)和拓扑信息(Topology)两个方面.一般说来,几何信息描述形体的大小.尺寸.位置.形状等,如边的形状.顶点的坐标等.拓扑信息描述形体上的顶点.边.面的连接关系,形成物体边界表示的“骨架”,几何信息犹如附着在“骨架”上的肌肉.
3.3 数据类型
数据类型是作为类被实现的.依据处理方式的不同,OCC 中的数据类型可分为两大类:通过值处理的数据类型和通过句柄(或引用)处理的数据类型.一个通过值处理的类型变量包含自己的实例;而另一个通过句柄处理的类型变量包含一个实例的引用.
3.3.1 值处理类型
值处理类型可分三大类:基本类型.枚举类型和由这样一些类(既不是由Standard_Persistent 类派生,也不是由Standard_Transient 类派生,直接派生或间接派生)定义的类型.基本类型如表1所示.
值处理类型的表现形式比句柄处理类型的表现形式更直接.因此操作也会更快.但是这一类型对象不能单独存于文件中,那些能被数据模式识别(包括基本类型和从Storable 类继承过来的类型)的值处理类型可以作为持久对象的部分结构而存储在持久对象内部,这也是值处理类型对象能够存进文件的惟一方式.
3.3.2 句柄处理类型
句柄处理类型可以分为两大类:由Persistent 类的派生类定义的类型和由Transient 类的派生类定义的类型.
OCC 的引用管理采用的是一种句柄机制.这种机制的基本元素是句柄.在OCC 中,句柄是通过类实现的.句柄含有多个接口成员,其中一个包含一个引用,一般仅使用它的引用.与C++指针一样,几个句柄可以引用同一个对象,一个句柄也可以引用多个对象,但是每次只能引用一个.在句柄访问对象前,句柄必须被声明[14].
3.4 OCC的数据结构
数据结构指的是数据元素之间的相互关系,尤其是数据的逻辑结构.选择数据结构的主要依据就是数据的逻辑结构.
OCC 拥有一个建模数据模块,也称数据结构模块,主要为二维和三维几何模型提供数据结构.数据结构模块由4个工具箱组成:几何工具.二维几何.三维几何和拓扑.
3.4.1 二维几何数据结构
二维几何数据结构定义了二维空间上几何对象的数据结构,主要由Geom2d包提供,Geom2d 包提供了比gp 包更大范围的对象.这些对象是非持久的,并且是通过引用处理的.
如果需要的对象不是单一的,而是一系列的,那么TColGeom2d 包(用来处理这类对象的集合容器)可以提供必要的功能.特别地,该包为通用类中那些标准的和经常使用的实例化提供几何对象.
TColGeom2d 包为来自Geom2d 包的曲线提供一维数组.二维数组和序列的实现,所有这些对象能以句柄和数值两种不同的方式处理.TopAbs 包提供通用枚举类,用来描述拓扑学基本概念和处理枚举类的方法,不包含具体类.
TopAbs 定义了3 个概念:拓扑类型( 由Top-Abs_ShapeEnum 类描述).拓扑方向(由TopAbs_Orienta-tion 类描述)和拓扑状态(由TopAbs_State 类描述).
3.4.2 三维几何数据结构
三维几何对象的数据结构主要由Geom 包提供.
Geom 包包含了所有的基本几何转换(如等价.旋转.平移.镜像.缩放和复合变换等).另外,Geom 包也提供了一些基于几何对象引用定义的特殊函数(如在B 样条曲线上增加一个控制点,对曲线进行改善等).
Geom 包中所有几何实体都是以STEP 方式处理的,包中可实现的非持久的通过句柄处理的对象有:点.笛卡尔点.向量.方向具有幅值的向量.轴.曲线.直线.圆锥.圆.椭圆.双曲线与抛物线.基本曲面.平面.边界曲线与边界曲面.裁剪曲线与裁剪曲面.非均匀有理化B 样条曲线与曲面.Bezier 曲线与曲面.圆柱面.球面与螺旋面.扫描曲面.线性挤压曲面.旋转曲面.偏移曲面.
3.4.3 拓扑数据结构
OCC 使用TopoDS 包描述了拓扑数据结构.To-poDS 包提供了两套类:一套由TopoDS_Shape(与TopoAbs 包中列出的标准拓扑Shape 一致)派生;另一套由下层Shape(既没有拓扑方向也没有位置)派生.
OCC 描述了参数空间对象的数据结构.这些描述用到了定位和限制.可以由这些术语描述的Shape 的类型有:顶点.面和Shape.顶点依据参数空间位置来定义,面和Shape 依据空间的限制来定义,可以将上述简单Shape 组成集.例如,一个边集形成一个线框;一个面集形成一个壳;一个实心体集形成一个组合实心体.
也可以将不同类型的Shape 组成一个复合体,并为一个Shape 指定拓扑方向和位置.依据Shape 的复杂程度,从顶点到组合实心体依次将Shape 列出来,这样能方便地知道一个Shape 是由哪些简单Shape 组成的.事实上,这就是TopoDS 包的意图.TopoDS_Shape 类描述了Shape 的引用.它包含一个指向下层抽象Shape 的引用.一个拓扑方向和一个引用坐标.该类是通过数值处理的,不能被共享.描绘下层Shape 的类从不被直接引用,而是通过TopoDS_Shape 类被间接引用.
3.5 建立几何体的相关包
在创建一个几何对象前,必须知道这个对象是2D的还是3D 的,以及将如何使用这个对象.下面简述基本几何类型中主要的几个包.gp 包为二维和三维对象提供了一些通过值处理的类,定义了一些基本的非持久几何实体,这些实体在二维和三维的代数计算和基本几何结构分析中用到.gp 包可以建立的几何实体有:
二维和三维直角坐标(x,y,z).矩阵.笛卡尔点.向量.方向.轴.直线.圆.椭圆.双曲线.抛物线.平面.无穷圆柱曲面.球面.螺旋面和圆锥面;它也提供了一些基本的几何转换,如等价.旋转.平移.镜像.缩放.复合变换等.
BRepPrimAPI包可以构建立方体.圆柱体.球体.圆台.楔形体.圆环.旋转体和拉伸体等几何实体;BRepAlgoA-PI包提供用布尔运算来建立新的模型;BRepBuilderAPI包能够建立点.边.线框.面.壳.实体.组合实体等;BRepFilletAPI包可实现对实体进行倒角.圆角等操作.
4 结语
Qt 是一个使用广泛的跨平台图形界面开发工具,可用于Windows,Linux,Mac OSX 和许多平台.它具有灵活的面向对象的结构.清晰的文档以及直观的API,针对同功能的程序能够运行在不同的系统平台,并保持一致的界面和功能,较好地增强了程序的灵活性和可移植性,为开发跨平台桌面应用程序的人机交互界面提供了良好的支持.OpenCASCADE 提供了多种包建立基本和复杂几何模型.
在Visual C++环境下结合Qt 和OpenCASCADE 类库能够开发出跨平台的几何建模程序,建立不同复杂程度的几何模型,可以作为相关数值计算软件的建模模块.
免责声明: 凡注明来源本网的所有作品,均为本网合法拥有版权或有权使用的作品,欢迎转载,注明出处。非本网作品均来自互联网,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。