丁華王忠
(西南科技大學(xué)制造科學(xué)與工程學(xué)院 四川綿陽 621010)
隨著科學(xué)技術(shù)的飛躍發(fā)展,CAD/CAM技術(shù)在沖壓工業(yè)中的應(yīng)用將愈加廣泛,而我國目前幾乎還沒有專用于沖壓行業(yè)的商用CAD/CAM軟件。因而對該領(lǐng)域的CAD/CAM研究仍舊具有十分重要的意義。大部分CAD/CAM軟件都是在幾何內(nèi)核的基礎(chǔ)上開發(fā)的[1]。目前,可用于開發(fā)CAD系統(tǒng)的底層幾何內(nèi)核平臺有美國Spatial technology公司的ACIS、英國EDS公司的Parasolid平臺以及法國Matra Datavision公司的Open CASCADE等。如著名的Auto CAD軟件使用的開發(fā)平臺是ACIS,Unigraphics,Solid Works使用的是 Parasolid[2]。Open CASCADE 作為一款開源開發(fā)工具包,因其功能上的全面和強(qiáng)大,在業(yè)內(nèi)也頗受好評,如HeeksCAD,MIDAS FX+等軟件均選用Open CASCADE作為開發(fā)平臺[3]??紤]到開源庫在開發(fā)研究中具有更大的優(yōu)越性,故選擇Open CASCADE作為底層開發(fā)工具。
Open CASCADE是一款功能強(qiáng)大的軟件開發(fā)平臺,它包括3D曲面和實體建模組件、可視化組件、數(shù)據(jù)交換組件和適合快速開發(fā)的應(yīng)用程序開發(fā)框架(OCAF-Open CASCADE Application Framework)。Open CASCADE技術(shù)可以用于數(shù)字仿真軟件的開發(fā),包括CAD,CAM,CAE,PDM 等應(yīng)用程序。該技術(shù)是20世紀(jì)90年代中期出現(xiàn)的,已經(jīng)被許多不同領(lǐng)域的商業(yè)客戶用來開發(fā)自己的軟件產(chǎn)品。
Open CASCADE提供了一個巨大的類庫,可以幫助用戶進(jìn)行快速開發(fā)。類庫實際上就是幾何內(nèi)核,定義了圖形數(shù)據(jù)的存儲格式以及大量的圖形算法,包含了許多方便快速設(shè)計面向?qū)ο蟮墓δ茴??;贠pen CASCADE的應(yīng)用程序可以開發(fā)處理二維、三維幾何模型等其他目的的CAD系統(tǒng),如:制造、分析應(yīng)用和仿真應(yīng)用等。
作為一款底層開發(fā)平臺,Open CASCADE提供了全面而強(qiáng)大的圖形運算類、快速開發(fā)應(yīng)用框架OCAF、圖形顯示操作功能包等[4]。主要功能特點有:(1)支持多系統(tǒng)平臺開發(fā)。Open CASCADE支持Linux,Windows NT和 Sun Solaris等 3種操作系統(tǒng)[5]。(2)提供快速軟件應(yīng)用框架,簡化用戶CAD應(yīng)用的開發(fā)[6]。(3)提供基于建模數(shù)據(jù)分離可視化操作服務(wù),便于圖形顯示的選擇和管理。(4)使用Open CASCADE平臺獨有的組件定義語言(CDLComponent Definition Language),既方便用戶使用,又為用戶自定義功能開發(fā)提供了規(guī)范。(5)提供豐富、全面的幾何運算功能,主要如下:支持幾何實體創(chuàng)建,如創(chuàng)建六面體、柱體、錐體等;支持自由曲面造型,如Bezier曲面、NURBS曲面等;支持幾何實體布爾操作,提供與、或、交集運算;支持基于特征的幾何運算,如倒角、偏置、脫殼、拔模等;支持常用幾何運算,如求相貫線、投影、曲面縫合等。
Open CASCADE提供了由大量C++類文件構(gòu)成的幾何類庫[7],不僅功能豐富,而且便于使用和開發(fā)。功能相關(guān)的類被組織成包,相關(guān)的包被歸類成不同的模塊。Open CASCADE類庫共包括六大模塊[8],如表 1 所示。
表1 類庫的模塊和功能Table 1 Class library modules and their functions
在六大類模塊中,與CAD系統(tǒng)幾何功能開發(fā)和數(shù)據(jù)處理關(guān)系尤為密切的模塊為基礎(chǔ)類、造型數(shù)據(jù)類、造型算法類以及數(shù)據(jù)轉(zhuǎn)換類等4個模塊。
1.3.1 基礎(chǔ)類模塊
基礎(chǔ)類模塊提供一系列基礎(chǔ)服務(wù),如定義基本實體類型、根類、內(nèi)存管理、異常處理、數(shù)組操作、數(shù)據(jù)文件保存基礎(chǔ)服務(wù)等。例如gp_Pnt類定義幾何點,gp_Dir類定義空間向量,TColgp_Array2OfPnt定義一維點數(shù)組,gp_Ax3定義三維坐標(biāo)系,Materials_Color定義顏色屬性等等。
1.3.2 造型數(shù)據(jù)類模塊
該模塊提供了各類二維、三維幾何模型的數(shù)據(jù)結(jié)構(gòu)定義。其中Geom2d類包集合了各種二維模型數(shù)據(jù)結(jié)構(gòu)類,每種數(shù)據(jù)類名前冠以前綴Geom2d_,如Geom2d_BSplineCurve表示二維B樣條曲線;Geom類包中集合了各種三維模型數(shù)據(jù)結(jié)構(gòu)類,每種數(shù)據(jù)類名前冠以前綴Geom_,如Geom_Curve定義了三維曲線,并提供各種相應(yīng)的運算方法,包括求參數(shù)空間值范圍、曲線連續(xù)性、周期性等運算,其子類涵蓋圓錐、Bezier、B樣條、剪裁線等各種類型曲線;Geom_Surface類及其子類則定義了各種類型的空間曲面及相關(guān)運算方法;TopoDS_Shape類及其子類則定義了各種拓?fù)鋽?shù)據(jù)結(jié)構(gòu)和運算方法。
1.3.3 造型算法類模塊
造型算法類模塊集合了大量的用于建模和幾何運算的邏輯算法類,按功能主要分為以下幾個部分:(1)幾何工具。提供二維曲線之間、三維曲線與曲面以及曲面與曲面之間的求交運算,點到曲線、點到曲面及曲線到曲面的投影計算,各類曲線、曲面基于約束的構(gòu)造運算,曲線、曲面的插值運算等。主要類文件集中在 TKGeomAlgo,GeomAPI,GeomInt等類包中。(2)拓?fù)涔ぞ?。提供拓?fù)湫腕w局部和全局特性定義、幾何變換操作以及拓?fù)湫腕w到NURBS幾何表達(dá)的轉(zhuǎn)換等運算。主要類文件集中在BRepBuilderAPI,GeomConvert,MAT 等類包中。(3)基本幾何構(gòu)造。主要包括棱柱體、圓柱體、圓錐體和圓環(huán)體等拓?fù)淠P偷臉?gòu)造。該部分功能主要位于BRepPrimAPI類包中。(4)特征運算。提供基于已有拓?fù)湫腕w上的形狀和機(jī)械特征運算,如增加圓柱體、拔模、拉伸、特征旋轉(zhuǎn)、管體等。主要的類包有BRep-Fill,BRepFeat,LocOpe等。(5)其他運算。造型算法模塊還提供有布爾操作、消除隱藏線、偏置面、脫殼、縫合、掃略、拓?fù)湫腕w修補等運算。主要包括BRepAlgoAPI,HLRBRep,BRepOffsetAPI,ShapeFix 等類包。
1.3.4 數(shù)據(jù)轉(zhuǎn)換類模塊
該模塊為基于Open CASCADE平臺的軟件與各種其他CAD軟件之間的數(shù)據(jù)交換提供了轉(zhuǎn)換接口,確保軟件具有較好的協(xié)同工作能力。能夠?qū)崿F(xiàn)對 IGES,STEP,STL,VRML等通用數(shù)據(jù)格式的兼容和相互轉(zhuǎn)換[9]。
基于Open CASCADE平臺的CAD系統(tǒng)采用Visual Studio 2010編程平臺和C++編程語言來開發(fā)。軟件實現(xiàn)分為可視化界面搭建和CAD基礎(chǔ)功能開發(fā)兩個部分。
軟件框架和可視化窗口為用戶使用軟件提供了方便和直觀感受,是CAD系統(tǒng)很重要的一部分。Open CASCADE提供了MFC和Qt兩款GUI應(yīng)用范例,可以直接作為軟件可視化開發(fā)基礎(chǔ)。Qt是一款基于C++程序設(shè)計語言的開源圖形用戶界面開發(fā)框架,它具有優(yōu)越的圖形視覺效果、豐富的應(yīng)用接口、良好的封裝性和可擴(kuò)展性,支持跨平臺開發(fā)。因此,選用Qt作為可視化界面開發(fā)框架具有較好的可操作性。
在開發(fā)過程中,當(dāng)程序調(diào)用了類庫的功能,就應(yīng)該將相應(yīng)的庫文件連接到工程屬性的附加依賴項中。可視化界面框架開發(fā)的部分重要原代碼如下:
在可視化圖形界面開發(fā)的過程中,還會用到幾個重要的類??梢暬K的類AIS_InteractiveContext,V3d_View用來控制幾何對象的顯示模式、狀態(tài)、控制圖形視窗的尺寸,基礎(chǔ)模塊中的Quantity_Color用來設(shè)置幾何模型的顯示顏色。創(chuàng)建后的軟件界面如圖1所示。
圖1 軟件可視化界面Fig.1 Software GUI
基本幾何功能是CAD軟件的核心模塊,它提供了必要的幾何模型生成和幾何運算操作。通過Open CASCADE類庫所提供的相關(guān)類和函數(shù)不僅能夠建立各種幾何形狀,還可以對這些幾何模型進(jìn)行布爾運算、求相貫線以及投影等基本運算操作。
2.2.1 輸入輸出(IO)設(shè)計
IO接口可以使不同CAD/CAM軟件之間進(jìn)行數(shù)據(jù)交換,為軟件間的協(xié)同工作提供可能。Open CASCADE在數(shù)據(jù)交換功能模塊提供了對STEP,IGES,STL,VRML等通用標(biāo)準(zhǔn)數(shù)據(jù)格式的輸入輸出支持及各數(shù)據(jù)格式之間的轉(zhuǎn)換功能。
數(shù)據(jù)轉(zhuǎn)換模塊中,類IGESCAFControl_Reader,IGESCAFControl_Writer用于IGES文件和 Open CASCADE模型之間的轉(zhuǎn)換[10],實現(xiàn) CAD系統(tǒng)對IGES格式數(shù)據(jù)文件的輸入輸出功能;STEPCAFControl_Reader,STEPCAFControl_Writer類則用于實現(xiàn)STEP數(shù)據(jù)與Open CASCADE模型之間的轉(zhuǎn)換,實現(xiàn)CAD軟件對STEP格式數(shù)據(jù)文件的輸入輸出功能;類StlAPI_Reader和StlAPI_Writer用于實現(xiàn)STL數(shù)據(jù)與OCC模型之間的轉(zhuǎn)換,實現(xiàn)CAD軟件對STL格式數(shù)據(jù)文件的輸入輸出功能。
此外,類BRepTools中的Read和Write函數(shù)可以實現(xiàn)對BREP格式數(shù)據(jù)的輸入輸出;類VrmlAPI_Writer可以實現(xiàn)OCC模型數(shù)據(jù)向VRML數(shù)據(jù)格式的轉(zhuǎn)換。
2.2.2 構(gòu)造功能開發(fā)
Open CASCADE提供了非常豐富的幾何構(gòu)造功能類,用于實現(xiàn)不同類型的曲線、曲面構(gòu)造功能。例如,類包 Geom,GC,gce,GeomAPI,BRepPrimAPI 提供了數(shù)10種幾何構(gòu)造功能函數(shù)。下面是部分構(gòu)造類使用介紹:
類 Geom_Circle,GC_MakeCircle,gce_MakeCirc均可用于繪制圓;Geom_Hyperbola,GC_MakeHyperbola用于繪制雙曲線;Geom_OffsetCurve用于繪制偏置于某一曲線一定距離的偏置曲線;Geom_TrimmedCurve用于繪制某一曲線的特定參數(shù)區(qū)域的一段剪裁曲線;Geom_BezierCurve,Geom_BezierCurve分別用于繪制 Bezier曲線,曲面;Geom_BsplineCurve,Geom_BSplineSurface則分別用于繪制有理B樣條曲線曲面;GeomAPI_PointsToBSpline用于離散點擬合B樣條曲面;BRepPrimAPI_MakeBox用于創(chuàng)建箱體。
例如,可以用類GeomAPI_PointsToBSpline提供的功能構(gòu)建一個B樣條曲面:
TColgp_Array2OfPnt&Points;//用于構(gòu)建B樣條曲面的型值點
GeomAPI_PointsToBSplineSurface
*PntToBSurf=new
GeomAPI_PointsToBSplineSurface();//定義一個GeomAPI_PointsToBSplineSurface類型指針
PntToBSurf- > Interpolate(Points);//將型值點賦給PntToBSurf進(jìn)行擬合運算
Handle(Geom_BSplineSurface)BSurf=Pnt-ToBSurf->Surface();//構(gòu)建出一個 B樣條曲面BSurf
圖2所示即為用上述方法構(gòu)造出的一個B樣條曲面。
此外,該部分還進(jìn)行了掃略曲面、旋轉(zhuǎn)曲面等功能的開發(fā)工作。圖3為曲線曲面構(gòu)造功能應(yīng)用的幾個實例。
圖2 構(gòu)造B樣條曲面Fig.2 Modeling of B-spline surface
圖3 幾何建模應(yīng)用實例Fig.3 The examples of geometry modeling
2.2.3 幾何運算功能開發(fā)
幾何運算功能主要是基于幾何實體的運算操作,也是CAD軟件不可或缺的功能模塊之一。Open CASCADE也提供許多功能類用于實現(xiàn)幾何運算操作,比如求交、投影等。以下是對部分幾何運算類的開發(fā)使用介紹:
GeomAPI_IntCS,GeomAPI_IntSS用來實現(xiàn)曲線與曲面之間以及曲面與曲面之間的求交運算,可以得到交點或者交線;GeomAPI_ProjectPointOnC_urve,GeomAPI_ProjectPointOnSurf可以用來計算點到曲面以及點到曲面的投影運算,得到相應(yīng)的投影點;類BRepAlgoAPI_BooleanOperation及其子類提供了幾何體間的與集、或集、交集等布爾運算功能;BRep-FilletAPI_MakeFillet,BRepFilletAPI_Ma_keChamfer提供了倒直角和倒圓角功能;gp_Trsf提供了旋轉(zhuǎn)、鏡像、縮放、比例變換等功能。類Rep_Tool可以用于實現(xiàn)不同數(shù)據(jù)類型之間的轉(zhuǎn)換操作。
圖4所示,為幾何運算功能的幾個應(yīng)用實例。通過對幾何功能模塊以及可視化界面的集成和優(yōu)化,完成CAD軟件的整體開發(fā)。圖5為通過該方法開發(fā)出的CAD系統(tǒng)的部分應(yīng)用實例,上圖為使用旋轉(zhuǎn)、雙線性曲面等三維構(gòu)造功能生成的導(dǎo)彈模型,下圖為使用旋轉(zhuǎn)、倒角等三維造型和求余布爾運算等功能繪制的階梯軸零件。
圖4 幾何運算應(yīng)用實例Fig.4 The examples of geometric algorithms
圖5 應(yīng)用實例Fig.5 Application demonstrations
本文基于開源幾何內(nèi)核庫Open CASCADE,主要做了以下幾點研究:(1)研究了該開源幾何內(nèi)核庫的體系結(jié)構(gòu)、功能特點以及功能庫的使用方法;(2)探討了基于該平臺開發(fā)CAD軟件的一般方法和重要步驟,并著重介紹了標(biāo)準(zhǔn)數(shù)據(jù)格式文件的輸入輸出、三維幾何模型的構(gòu)建、求交和投影等幾何運算等功能實現(xiàn),為同類開發(fā)提供了參考;(3)通過VC++編程開發(fā)了一款CAD軟件,使用該軟件可以實現(xiàn)復(fù)雜幾何模型的構(gòu)建、圖形顯示、輸入輸出等功能,驗證了基于該平臺開發(fā)CAD系統(tǒng)的可行性。
[1]鄭盈盈,周來水,孫金虎.基于Open CASADE的 DXF接口研究[J].中國制造業(yè)信息化,2010,(1):45-47.
[2]苑國強(qiáng),張淵.采用open CASCADE的三維建模平臺的開發(fā)研究[J].工程圖學(xué)學(xué)報,2008,(4):146-149.
[3]Open CASCADE TECKNOLOGY.Screenshots[EB/OL].http://www.opencascade.org/showroom/screenshots,2013.
[4]王玥,付梅艷,陳再高,等.用于全電磁粒子模擬的復(fù)雜建模及網(wǎng)格生成技術(shù)[J].強(qiáng)激光與粒子束,2011,23(11):2994-2996.
[5]馬鐵利.機(jī)械CAD幾何建模核心技術(shù)及其發(fā)展趨勢[J].計算機(jī)工程,2003,(11):2-3.
[6]Open CASCADE TECKNOLOGY.Object Libraries Application Framework User’s Guide[EB/OL].http://www.opencascade.org,2013.
[7]MOUNIR H,NIZAR A,ABDELMAJID B.CAD model simplification using a removing details and merging faces technique for a FEM simulation[J].Journal of Mechanical ScienceandTechnology ,2012,26(11):3539-3548.
[8]李紹珍,張淵.基于Open CASCADE的虛擬三維建模平臺的開發(fā)研究[J].第一屆中國圖形大會,2007,(8):267-268.
[9]張淵.基于Open CASCADE的虛擬三維建模平臺的開發(fā)[M].濟(jì)南:山東大學(xué),2007.61-62.
[10]陳宏宇,劉子建,艾彥迪.基于Open CASCADE的“一元四體”模型實現(xiàn)技術(shù)研究[J].計算機(jī)工程與應(yīng)用,2012,34(3):102 -104.