李希龍
(中國電建集團貴陽勘測設計研究院有限公司,貴州 貴陽 550081)
?
混合編程二次開發(fā)在水利水電工程設計中的應用
李希龍
(中國電建集團貴陽勘測設計研究院有限公司,貴州 貴陽 550081)
利用混合編程對AutoCAD與CATIA進行二次開發(fā),實現(xiàn)了跨平臺的無損數據傳遞,提高了軟件之間的協(xié)同設計能力。以水工建筑物開挖面三維建模為例,介紹了混合編程在水利水電工程設計中的具體應用。
水利水電;混合編程;二次開發(fā);開挖;CATIA;AutoCAD;ObjectARX
AutoCAD是廣大設計人員普遍采用的工具軟件,具有良好的用戶界面和強大的二維制圖功能,已成為平面制圖領域事實上的標準;但AutoCAD軟件的三維造型功能較弱,對復雜曲面和實體的建模能力不足。CATIA是一款主要面向航空航天、汽車、船舶等制造行業(yè)的三維設計軟件,因其強大的三維建模及參數化、模板化設計能力,近年來在水利水電工程設計中得到了越來越廣泛的應用;然而CATIA軟件對點、線、面等基本圖元的建模要求更為嚴格,缺乏靈活性。
目前AutoCAD與CATIA軟件之間僅能進行簡單的二維數據傳輸,不能直接進行三維數據交換。本文利用ObjectARX VC++與VB.net混合編程技術,通過對AutoCAD和CATIA進行二次開發(fā),將AutoCAD圖形數據無縫導入到CATIA中,實現(xiàn)了跨平臺的數據傳遞,提高了軟件之間的協(xié)同設計能力。
1.1混合編程的概念和意義
混合編程是指通過使用兩種或多種編程語言編寫源代碼,使其共同形成一個應用程序的方法。如今水利水電工程設計中用到的軟件越來越多,軟件平臺之間的數據交換也越來越頻繁,這些數據交換通常需要二次開發(fā)才能實現(xiàn);由于不同的應用軟件往往采用不同的二次開發(fā)編程語言,為適應不同軟件的二次開發(fā)要求,混合編程技術的應用顯得越來越重要。
1.2AutoCAD及CATIA二次開發(fā)簡介
AutoCAD的二次開發(fā)方式有VisualLisp、VBA、ObjectARX C++等。其中VisualLisp和VBA簡單易學,開發(fā)周期短,但這兩種方式對面向對象的編程支持較弱,程序運行效率低,不易實現(xiàn)較復雜的算法,一般適合于小型實用工具的開發(fā);ObjectARX C++完全采用面向對象編程原理,能對AutoCAD進行底層二次開發(fā),具有功能強大、運行效率高的特點,使用該方法能方便的開發(fā)出簡潔高效的應用程序,因此對具有復雜算法的大型應用程序,大多采用該方式進行二次開發(fā)。
CATIA的二次開發(fā)方式主要有3種,即Automation API、CAA和VB.net。其中Automation API是一種交互式的二次開發(fā)方式,它通過錄制宏記錄軟件的操作過程,自動生成相應的VBScript或JavaScript程序代碼,用戶通過修改該代碼生成自己的二次開發(fā)程序。該方法雖然簡單易用,但程序封裝性差,特別是受到API開放接口的限制,不能對軟件進行深層次二次開發(fā)[1]。CAA(Component Application Architecture)采用面向對象編程語言C++進行二次開發(fā),能在最底層對軟件功能進行擴展,具有強大的交互、集成和自定義的能力。然而CAA二次開發(fā)體系過于龐大且復雜,它包括一整套函數庫、組件庫等,其學習難度大,一般設計人員不易掌握。VB.net是在VisualStudio環(huán)境下,采用VB編程語言對CATIA進行二次開發(fā),該方法引進面向對象的編程原理,同時兼顧VB簡單易用的特性,具有較高的開發(fā)效率,能滿足大多數的CATIA二次開發(fā)需求。
1.3AutoCAD和CATIA二次開發(fā)混合編程原理
經比較上述各種二次開發(fā)方式,采用ObjectARX C++及VB.net分別對AutoCAD和CATIA進行二次開發(fā),具有運算效率高、學習難度適中及開發(fā)周期短的優(yōu)點。但由于兩個平臺所使用的二次開發(fā)語言不相同,故不能在統(tǒng)一編程環(huán)境下直接進行數據交換。
筆者經反復測試,可通過二次開發(fā)混合編程將AutoCAD圖形數據成功導入到CATIA中。即先利用VB.net編制CATIA數據寫入函數,并編譯成生成DLL文件。然后在ObjectARX中添加混合編程支持,添加引用此前VB.net編寫的DLL文件,再通過VC++讀取AutoCAD圖形數據,同時調用DLL函數啟動CATIA寫入數據,流程如圖1所示。
圖1 AutoCAD與CATIA二次開發(fā)混合編程流程圖
在VS2008環(huán)境下,利用ObjectARX 2010 VC++及VB.net,說明通過二次開發(fā)混合編程,將AutoCAD圖形數據導入CATIA的實現(xiàn)過程。
2.1創(chuàng)建解決方案和工程
在VS2008中創(chuàng)建一個名稱為“CADtoCATIA”的解決方案,并添加兩個工程。其中一個工程名稱為“VBforCATIA”,利用VS2008向導創(chuàng)建,開發(fā)語言選擇“Visual Basic”,模板類型選擇“Class Library”;另一個工程名稱為“ARXforCAD”,利用ObjectARX 2010向導創(chuàng)建,并選擇“.Net mixed managed code support”選項。
2.2CATIA數據寫入程序
在“VBforCATIA”工程中,利用VB.net對CATIA進行二次開發(fā)。
(1)修改“VBforCATIA”工程中默認的類名稱為“CVBforCATIA”。
(2)在“VBforCATIA”工程屬性中,添加引用CATIA自帶的系統(tǒng)類型庫,如圖2所示。
(3)在程序代碼中導入CATIA類型庫:
Imports ProductStructureTypeLib
Imports MECMOD
Imports PARTITF
Imports HybridShapeTypeLib
(4)調用CATIA并新建數據寫入文件,主要代碼如下:
‘定義CATIA對象
Dim my_CATIA As INFITF.Application
Dim my_PartDoc As PartDocument
‘獲取CATIA應用程序
On Error Resume Next
My_CATIA = GetObject(,"CATIA.Application")
If Err.Number <> 0 Then
My_CATIA = CreateObject("CATIA.Application")
End If
’新建Part文檔
my_PartDoc = My_CATIA.Documents.Add("Part")
(5)在“CVBforCATIA”類中,編寫CATIA數據寫入函數(以點數據的寫入為例):
Public Class CVBforCATIA
{
……
Public Function CreatePoint( ByVal pt_x
圖2 添加引用CATIA類型庫
As Double,ByVal pt_y As Double,ByVal pt_z As Double)
{
……
Dim new_PT As HybridShapePointCoord
new_PT = my_PartDoc.Part.HybridShapeFactory.AddNewPointCoord(pt_x,pt_y,pt_z)
……
}
}
CATIA數據寫入程序完成后,編譯生成“VBforCATIA.DLL”文件以供后續(xù)ObjectARX程序調用。
2.3AutoCAD數據讀取程序
在“ARXforCAD”工程中,利用ObjectARX VC++對AutoCAD進行二次開發(fā),以讀取AutoCAD圖形中的數據(以點數據的讀取為例):
AcDbObject* pObj=NULL;
AcDbObjectId obj_ID;
AcGePoint3d pt;
……
Acad::ErrorStatus es=acdbOpenAcDbObject(pObj,obj_ID,AcDb::kForRead);
if (eOk==es && pObj->isKindOf(AcDbPoint::desc()))
{pt=AcDbPoint::cast(pObj);}
2.4調用DLL文件并寫入數據
在“ARXforCAD”工程中,添加引用DLL文件,并調用相應函數將數據寫入CATIA[2]。
(1)在“ARXforCAD”項目屬性中,添加對“VBforCATIA.DLL”文件的引用。
(2)聲明并實例化DLL封裝類:
ARXforCAD::CARXforCAD ^ my_ObjDll=gcnew ARXforCAD::CARXforCAD;
(3)調用DLL中的函數,并將數據寫入CATIA:
my_ObjDll.CreatePoint(pt.x,pt.y,pt.z);
水工建筑物的開挖面通常是不規(guī)則的復雜曲面,其三維建模過程繁瑣,效率較低。下面以復雜開挖面的快速三維建模為例,說明混合編程在水利水電工程設計中的具體應用。
基本思路是先在AutoCAD中設計開挖平面圖,再生成開挖三維線框,然后通過上述混合編程二次開發(fā),將開挖三維線框導入CATIA并自動生成三維開挖面,如圖3所示。這種建模方式,充分利用了AutoCAD平面制圖的靈活性和CATIA強大的三維曲面建模能力,大大提高了復雜開挖面的三維建模效率[3]。
圖3 混合編程在水工建筑物開挖三維建模中的應用
混合編程可充分發(fā)揮不同編程語言的優(yōu)勢,充分利用現(xiàn)有的程序代碼,實現(xiàn)跨平臺的程序調用。本文針對AutoCAD和CATIA軟件特點,分別選擇簡潔、高效的程序語言進行二次開發(fā),并通過混合編程實現(xiàn)了跨平臺的數據傳遞。以水工建筑物的開挖面三維建模為例,通過混合編程二次開發(fā),充分利用AutoCAD和CATIA軟件各自的功能特長,大大提高了復雜開挖面的三維建模效率,加強了軟件之間的協(xié)同設計能力。
[1]胡燚,張運東,張強.三維CAD技術在水利水電工程設計中的應用分析[J].硅谷,2013(23):66-71.
[2]龔剛,鄧榮歡,張憲林.三維設計方法在水利水電工程設計中的應用探討[J].珠江水運,2014(23):64-65.
[3]袁紹東,王靜,王強華,等.AIM軟件在水利水電工程三維設計中的應用探討[J].西北水電,2014(3):88-90.
Application of mixed programming in water resources and hydropower engineering design
LI Xilong
(PowerChinaGuiyangEngineeringCorporationLimited,Guiyang550081,China)
The secondary development of AutoCAD and CATIA was carried on by using the mixed programming.The cross-platform lossless data transfer is realized. And the capacity of collaborative design between softwares is improved. Taking three-dimensional modeling of hydraulic structure excavation face as an example, the specific application of mixed programming in water resources and hydropower engineering design was introduced.
water resources and hydropower; mixed programming; secondary development; excavation; CATIA; AutoCAD; ObjectARX
李希龍(1982-),男,工程師,主要從事水工建筑物設計及虛擬仿真工作。
TV222.2
A
2096-0506(2016)03-0047-04