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