引言
特定平臺具有特定的系統(tǒng)特性.應(yīng)用開發(fā)環(huán)境及系統(tǒng)運行環(huán)境,若想使編制好的軟件能夠運行在多個平臺上,需選用具備跨平臺開發(fā)程序的工具開發(fā)軟件.Qt是挪威TrollTech公司推出的一個跨平臺的C++圖形用戶界面庫,提供給應(yīng)用程序開發(fā)者建立圖形用戶界面所需的所有功能.
使用“一次編寫,隨處編譯”的方式用于構(gòu)建多平臺圖形用戶界面程序,使用單一的源代碼樹和簡單的重編譯,能夠在Windows,MacOS X,Linux,Solaris,HP-UX 和其他使用X11的Unix版本下編制程序.Qt完全面向?qū)ο笄液苋菀讛U展,它已經(jīng)成為全世界范圍內(nèi)數(shù)千種成功的應(yīng)用程序的基礎(chǔ),并為世界上數(shù)千個大公司,包括IBM.摩托羅拉和夏普等提供開發(fā)軟件.綜合以上因素,選擇Qt作為建模平臺的開發(fā)工具.
OpenCASCADE(Open Computer Aided Software forComputer Aided Design and Engineering) 是由法國的MDTV(Matra Datavision)公司設(shè)計開發(fā)的CAD 系統(tǒng),于1999年開放源代碼.
OpenCASCADE 采用C++開發(fā)基于OpenGL 的專用快速開發(fā)的CAD 類庫,提供基本幾何體表達與操作.CAD 模型顯示與操作.多種CAD 文件格式讀取與保存等功能,可應(yīng)用于CAD軟件開發(fā).仿真軟件設(shè)計和三維圖形顯示等方面.
基于OpenCASCADE 進行CAD 系統(tǒng)開發(fā),能夠?qū)penCASCADE 類庫的二維和三維建模.布爾操作.可視化的特性及VC++程序?qū)崟r性好的特點有效地結(jié)合,進行仿真應(yīng)用等,因此選用它作為建模內(nèi)核創(chuàng)建模型.
1 Qt 簡介
Qt類似于X Window上的Motif,Openwin,GTK等圖形界面庫和Windows 平臺上的MFC,OWL,VCL,ATL等,提供給應(yīng)用程序開發(fā)者建立圖形用戶界面所需的所有功能,目前包括基于Framebuffer 的Qt Embedded.快速開發(fā)工具Qt Designer.國際化工具Qt Linguist 等部分.自1995 年以來QT/C++應(yīng)用程序就在商業(yè)應(yīng)用中占據(jù)核心地位.QT也是流行的Linux桌面環(huán)境KDE的基礎(chǔ),KDE 是所有主要的Linux 發(fā)行版的一個標準組件.Qt支持的操作系統(tǒng)有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提取了窗口和操作系統(tǒng)的底層基礎(chǔ)構(gòu)造函數(shù),為軟件開發(fā)工程師提供了一致的邏輯界面,Qt API在所有支持的平臺上都是相同的.
Qt用C++語言實現(xiàn),其良好封裝機制使得Qt的模塊化程度非常高,可重用性較好,對于用戶開發(fā)來說是非常方便的.還提供了一種稱為signals/slots的安全類型來替代callback,這使得各個元件之間的協(xié)同工作變得十分簡單[6].
Qt有一個圖形界面的所見即所得工具--Qt De-signer.根據(jù)這一工具可以任意構(gòu)造需要的圖形界面,而且利用UIC工具將生成的UI文件轉(zhuǎn)換為CPP文件和H文件,使界面軟件部分和系統(tǒng)實現(xiàn)軟件部分融合到一起.
Qt Designer 提供了Qt 基本的可繪制窗口部件,比如QWidget,QLabel,QPushButton,QVBoxLayout 等.在設(shè)計器中通過鼠標直接拖放這些窗口部件,能夠高效.快速地實現(xiàn)GUI界面的設(shè)計,界面直觀形象,所見所得.
2 OpenCASCADE簡介
OpenCASCADE包括3D曲面和實體建模組件.可視化組件.數(shù)據(jù)交換組件和適合快速開發(fā)的應(yīng)用程序開發(fā)框架,提供二維和三維幾何體的生成.顯示和分析,是一款可以用來進行計算機可視化的幾何內(nèi)核,并且是開放源代碼的.OpenCASCADE提供了點.線.面.體和復(fù)雜形體的顯示和交互操作,經(jīng)過深度開發(fā)后可實現(xiàn)紋理.光照.圖元填充.渲染等圖形操作和放大.縮小.旋轉(zhuǎn).漫游.模擬飛行.模擬穿越等動態(tài)操作.OpenCASCADE定義了圖形數(shù)據(jù)的存儲格式以及大量的圖形算法,可以幫助開發(fā)人員快速地進行面向?qū)ο蟪绦虻拈_發(fā).目前支持3種操作系統(tǒng):Linux,Windows NT和Sun Solaris.
OpenCASCADE 由一系列的C++類構(gòu)成,相關(guān)的類組織成包,包組織成庫文件,最后相關(guān)庫組織成模塊,通過有機組織的庫文件提供了基礎(chǔ)類.模塊數(shù)據(jù)管理.建模算法.模型的顯示.應(yīng)用框架.數(shù)據(jù)交換6個模塊.
OpenCASCADE 還為用戶提供了OCAF(OpenCAS-CADE AppliCation Framework),它是一種基于Open- CASCADE的RAD(Rapid Applieation Development,快速開發(fā)工具)框架,是OpenCASCADE 類庫的輔助工具,在幾何建模過程中,不僅能處理用到的類庫里的任何數(shù)據(jù)和算法,還可以用于組織.保存應(yīng)用數(shù)據(jù),開發(fā)人員可以使用這一工具進行應(yīng)用程序的快速開發(fā).
3 OpenCASCADE建模技術(shù)
3.1 邊界表示法
OpenCASCADE是一個先進的.三維的.邊界表示(B-Rep)為主的幾何造型工具包,是由C++開發(fā)設(shè)計基于OpenGL的專用快速開發(fā)的CAD類庫,提供統(tǒng)一的數(shù)據(jù)結(jié)構(gòu),同時支持線框.CSG.B-Rep三種模型,并允許這個三種表示共存于統(tǒng)一的數(shù)據(jù)結(jié)構(gòu)中.OpenCASCADE主要基于邊界表示法進行建模.邊界表示(BoundaryRepresentation)也稱為BR表示或B-rep表示,是三維實體建模在計算機內(nèi)部的一種表達方式,即數(shù)據(jù)存放的邏輯結(jié)構(gòu).它是幾何造型中最成熟.無二義的表示法.物體的邊界是物體內(nèi)外部點的分界面,一般用體表.面表.環(huán)表.邊表和頂點表5層描述.即實體的邊界由面的并集表示,每個面由它所在的曲面的定義加上其邊界來表示,面的邊界是邊的并集,邊由點來表示.
邊界表示法強調(diào)物體表面的細節(jié),詳細記錄了構(gòu)成物體形體的所有幾何元素的幾何信息及其相互間的聯(lián)接關(guān)系即拓撲信息,幾何信息與拓撲信息分開存儲,完整清晰,并能惟一定義物體的三維模型,缺點是對于不規(guī)則三維物體的描述不太方便.這一方法主要適用于三維空間操作和分析.
3.2 幾何和拓撲
在OpenCASCADE中,幾何體(Geometry).拓撲(To-pology)都是從最基礎(chǔ)的抽象類派生而來,所有的實體對象具有相同的功能,如實體本身的信息保存功能.自身復(fù)制功能以及調(diào)試功能等,這些功能均由類TopoDS來實現(xiàn).幾何是指構(gòu)成模型的純粹的幾何元素,如點(point).曲線(curve)和曲面(surface)等,拓撲是指模型各幾何實體之間的空間關(guān)系,幾何體及其拓撲關(guān)系構(gòu)成了模型的基本空間結(jié)構(gòu).
OpenCASCADE 中存在兩種實現(xiàn)方法完全不同的幾何體類:構(gòu)造幾何體和模型幾何體.構(gòu)造幾何體是指那些具有幾何對象的數(shù)學定義的C++類;模型幾何體是指為構(gòu)造幾何體增加模型操作功能的那些類,它的數(shù)據(jù)結(jié)構(gòu)中含有指向構(gòu)造幾何體類的指針,模型幾何體和模型保存在一起.
在邊界表示法中,描述形體的信息包括幾何信息(Geometry)和拓撲信息(Topology)兩個方面.一般說來,幾何信息描述形體的大小.尺寸.位置.形狀等,如邊的形狀.頂點的坐標等.拓撲信息描述形體上的頂點.邊.面的連接關(guān)系,形成物體邊界表示的“骨架”,幾何信息猶如附著在“骨架”上的肌肉.
3.3 數(shù)據(jù)類型
數(shù)據(jù)類型是作為類被實現(xiàn)的.依據(jù)處理方式的不同,OCC 中的數(shù)據(jù)類型可分為兩大類:通過值處理的數(shù)據(jù)類型和通過句柄(或引用)處理的數(shù)據(jù)類型.一個通過值處理的類型變量包含自己的實例;而另一個通過句柄處理的類型變量包含一個實例的引用.
3.3.1 值處理類型
值處理類型可分三大類:基本類型.枚舉類型和由這樣一些類(既不是由Standard_Persistent 類派生,也不是由Standard_Transient 類派生,直接派生或間接派生)定義的類型.基本類型如表1所示.
值處理類型的表現(xiàn)形式比句柄處理類型的表現(xiàn)形式更直接.因此操作也會更快.但是這一類型對象不能單獨存于文件中,那些能被數(shù)據(jù)模式識別(包括基本類型和從Storable 類繼承過來的類型)的值處理類型可以作為持久對象的部分結(jié)構(gòu)而存儲在持久對象內(nèi)部,這也是值處理類型對象能夠存進文件的惟一方式.
3.3.2 句柄處理類型
句柄處理類型可以分為兩大類:由Persistent 類的派生類定義的類型和由Transient 類的派生類定義的類型.
OCC 的引用管理采用的是一種句柄機制.這種機制的基本元素是句柄.在OCC 中,句柄是通過類實現(xiàn)的.句柄含有多個接口成員,其中一個包含一個引用,一般僅使用它的引用.與C++指針一樣,幾個句柄可以引用同一個對象,一個句柄也可以引用多個對象,但是每次只能引用一個.在句柄訪問對象前,句柄必須被聲明[14].
3.4 OCC的數(shù)據(jù)結(jié)構(gòu)
數(shù)據(jù)結(jié)構(gòu)指的是數(shù)據(jù)元素之間的相互關(guān)系,尤其是數(shù)據(jù)的邏輯結(jié)構(gòu).選擇數(shù)據(jù)結(jié)構(gòu)的主要依據(jù)就是數(shù)據(jù)的邏輯結(jié)構(gòu).
OCC 擁有一個建模數(shù)據(jù)模塊,也稱數(shù)據(jù)結(jié)構(gòu)模塊,主要為二維和三維幾何模型提供數(shù)據(jù)結(jié)構(gòu).數(shù)據(jù)結(jié)構(gòu)模塊由4個工具箱組成:幾何工具.二維幾何.三維幾何和拓撲.
3.4.1 二維幾何數(shù)據(jù)結(jié)構(gòu)
二維幾何數(shù)據(jù)結(jié)構(gòu)定義了二維空間上幾何對象的數(shù)據(jù)結(jié)構(gòu),主要由Geom2d包提供,Geom2d 包提供了比gp 包更大范圍的對象.這些對象是非持久的,并且是通過引用處理的.
如果需要的對象不是單一的,而是一系列的,那么TColGeom2d 包(用來處理這類對象的集合容器)可以提供必要的功能.特別地,該包為通用類中那些標準的和經(jīng)常使用的實例化提供幾何對象.
TColGeom2d 包為來自Geom2d 包的曲線提供一維數(shù)組.二維數(shù)組和序列的實現(xiàn),所有這些對象能以句柄和數(shù)值兩種不同的方式處理.TopAbs 包提供通用枚舉類,用來描述拓撲學基本概念和處理枚舉類的方法,不包含具體類.
TopAbs 定義了3 個概念:拓撲類型( 由Top-Abs_ShapeEnum 類描述).拓撲方向(由TopAbs_Orienta-tion 類描述)和拓撲狀態(tài)(由TopAbs_State 類描述).
3.4.2 三維幾何數(shù)據(jù)結(jié)構(gòu)
三維幾何對象的數(shù)據(jù)結(jié)構(gòu)主要由Geom 包提供.
Geom 包包含了所有的基本幾何轉(zhuǎn)換(如等價.旋轉(zhuǎn).平移.鏡像.縮放和復(fù)合變換等).另外,Geom 包也提供了一些基于幾何對象引用定義的特殊函數(shù)(如在B 樣條曲線上增加一個控制點,對曲線進行改善等).
Geom 包中所有幾何實體都是以STEP 方式處理的,包中可實現(xiàn)的非持久的通過句柄處理的對象有:點.笛卡爾點.向量.方向具有幅值的向量.軸.曲線.直線.圓錐.圓.橢圓.雙曲線與拋物線.基本曲面.平面.邊界曲線與邊界曲面.裁剪曲線與裁剪曲面.非均勻有理化B 樣條曲線與曲面.Bezier 曲線與曲面.圓柱面.球面與螺旋面.掃描曲面.線性擠壓曲面.旋轉(zhuǎn)曲面.偏移曲面.
3.4.3 拓撲數(shù)據(jù)結(jié)構(gòu)
OCC 使用TopoDS 包描述了拓撲數(shù)據(jù)結(jié)構(gòu).To-poDS 包提供了兩套類:一套由TopoDS_Shape(與TopoAbs 包中列出的標準拓撲Shape 一致)派生;另一套由下層Shape(既沒有拓撲方向也沒有位置)派生.
OCC 描述了參數(shù)空間對象的數(shù)據(jù)結(jié)構(gòu).這些描述用到了定位和限制.可以由這些術(shù)語描述的Shape 的類型有:頂點.面和Shape.頂點依據(jù)參數(shù)空間位置來定義,面和Shape 依據(jù)空間的限制來定義,可以將上述簡單Shape 組成集.例如,一個邊集形成一個線框;一個面集形成一個殼;一個實心體集形成一個組合實心體.
也可以將不同類型的Shape 組成一個復(fù)合體,并為一個Shape 指定拓撲方向和位置.依據(jù)Shape 的復(fù)雜程度,從頂點到組合實心體依次將Shape 列出來,這樣能方便地知道一個Shape 是由哪些簡單Shape 組成的.事實上,這就是TopoDS 包的意圖.TopoDS_Shape 類描述了Shape 的引用.它包含一個指向下層抽象Shape 的引用.一個拓撲方向和一個引用坐標.該類是通過數(shù)值處理的,不能被共享.描繪下層Shape 的類從不被直接引用,而是通過TopoDS_Shape 類被間接引用.
3.5 建立幾何體的相關(guān)包
在創(chuàng)建一個幾何對象前,必須知道這個對象是2D的還是3D 的,以及將如何使用這個對象.下面簡述基本幾何類型中主要的幾個包.gp 包為二維和三維對象提供了一些通過值處理的類,定義了一些基本的非持久幾何實體,這些實體在二維和三維的代數(shù)計算和基本幾何結(jié)構(gòu)分析中用到.gp 包可以建立的幾何實體有:
二維和三維直角坐標(x,y,z).矩陣.笛卡爾點.向量.方向.軸.直線.圓.橢圓.雙曲線.拋物線.平面.無窮圓柱曲面.球面.螺旋面和圓錐面;它也提供了一些基本的幾何轉(zhuǎn)換,如等價.旋轉(zhuǎn).平移.鏡像.縮放.復(fù)合變換等.
BRepPrimAPI包可以構(gòu)建立方體.圓柱體.球體.圓臺.楔形體.圓環(huán).旋轉(zhuǎn)體和拉伸體等幾何實體;BRepAlgoA-PI包提供用布爾運算來建立新的模型;BRepBuilderAPI包能夠建立點.邊.線框.面.殼.實體.組合實體等;BRepFilletAPI包可實現(xiàn)對實體進行倒角.圓角等操作.
4 結(jié)語
Qt 是一個使用廣泛的跨平臺圖形界面開發(fā)工具,可用于Windows,Linux,Mac OSX 和許多平臺.它具有靈活的面向?qū)ο蟮慕Y(jié)構(gòu).清晰的文檔以及直觀的API,針對同功能的程序能夠運行在不同的系統(tǒng)平臺,并保持一致的界面和功能,較好地增強了程序的靈活性和可移植性,為開發(fā)跨平臺桌面應(yīng)用程序的人機交互界面提供了良好的支持.OpenCASCADE 提供了多種包建立基本和復(fù)雜幾何模型.
在Visual C++環(huán)境下結(jié)合Qt 和OpenCASCADE 類庫能夠開發(fā)出跨平臺的幾何建模程序,建立不同復(fù)雜程度的幾何模型,可以作為相關(guān)數(shù)值計算軟件的建模模塊.
-
CAD
+關(guān)注
關(guān)注
17文章
1090瀏覽量
72452 -
C++
+關(guān)注
關(guān)注
22文章
2108瀏覽量
73627
發(fā)布評論請先 登錄
相關(guān)推薦
評論