夏 甜 徐 剛
(三峽大學 水利與環(huán)境學院,湖北 宜昌 443002)
水利工程涉及到大量繁瑣的工程制圖的問題.工程師們在制圖過程中一般都采用AutoCAD等設計軟件,有時候需要做大量差別不大但是重復量很大的制圖工作,如果對同一類制圖問題進行參數(shù)化設計,往往能夠大大提高工程設計的生產效率和技術水平.
目前AutoCAD的二次開發(fā)和參數(shù)化設計工具主要有:①VisualLisp.VisulLISP的全名是 Visul LIST Processing Language,起源于Autolisp,最早出現(xiàn)于1985年推出的AutoCAD R2.18中,是一種嵌入在AutoCAD內部的編程語言[1].在AutoCAD平臺的支撐下,利用Visullisp可以方便快捷,可視化的進行AutoCAD二次開發(fā),它一直是低版本Auto-CAD的首選編程語言.②VBA.VBA即 Microsoft office中的Visual Basic for Applications,它是一個功能強大的定制程序開發(fā)工具,用來自動執(zhí)行任務的一個編程環(huán)境,VBA為AutoCAD的二次開發(fā)提供類似VisualBasic(VB)語言所擁有的功能,引入了對象的程序設計環(huán)境,為開發(fā)者提供了用來創(chuàng)建圖形用戶界面(GUI)的可拖拉工具和用來與AutoCAD對象交互的編程語言[2].VBA也是一種嵌入AutoCAD平臺的內部編程語言要用到時候需要從AutoCAD平臺加載.③ObjectARX.ObjectARX應用程序是以Visual C++為基本開發(fā)語言并且支持MFC基本類庫,ObjectARX擁有對AutoCAD最深入的控制能力,能夠訪問很多AutoCAD底層工具,可以創(chuàng)建與AutoCAD內部命令一樣的新命令,用其開發(fā)的應用程序具有良好的人機界面,能簡潔高效地實現(xiàn)許多復雜功能,運行效率高,功能完善[3].同樣,基于 Object-ARX也不能脫離AutoCAD平臺.④TeighaX.TeighaX組件是ODA開發(fā)的AutoCAD文件讀寫程序,基于TeighaX組件的AutoCAD二次開發(fā)適合目前幾乎所有版本的AutoCAD文件讀取、寫入、存檔及版本之間的轉換[4].
VisualLisp與VBA較為簡單,特別是VBA,使用方便且開發(fā)速度較快,但其功能相比TeighaX有所不足,尤其是對面向對象的功能支持不好,不能脫離AutoCAD平臺.ObjectARX技術實現(xiàn)功能十分強大,但是也不能脫離AutoCAD平臺.而TeighaX基于VC平臺,在C#的支持下,其功能非常強大,可以很好地運用各種面向對象技術,TeighaX組件的最重要的優(yōu)點是本地計算機不用安裝AutoCAD軟件,可以脫離AutoCAD平臺,進行AutoCAD二次開發(fā).
ODA(Open Design Alliance)是一個非盈利的組織,在40多個國家有1 200多個成員.ODA致力于促進開放的、工業(yè)標準的CAD數(shù)據(jù)和遺留的CAD數(shù)據(jù)的格式交換[5].ODA開發(fā)用于技術圖形應用程序的核心平臺 Teigha,Teigha支持dwg、dgn、stl、pdf之間的數(shù)據(jù)交換.Teigha支持的多個平臺:Windows、Mac、Unix、Linux等[5].ODA會員可以用 C++、.NET和ActiveX接口開發(fā)自己的應用程序[5].ODA的宗旨是開發(fā)核心的圖形技術庫,讓軟件開發(fā)商專注與應用開發(fā).和ITC一樣也是面向會員的[5].
ODA提供了AutoCAD二次開發(fā)的接口,ODA產品系列中的TeighaX組件曾用名DwgdirectX,可以脫離AutoCAD平臺對Dwg文件進行讀寫,保存操作.因此可以實現(xiàn)對Dwg文件的參數(shù)化設計.
DWG文件是AutoCAD文件的保存格式.一個DWG文件由4部分組成:文件頭、實體部、塊實體部和應急頭部.其中最重要的部分是實體部分,實體部分由點(Point)、線(UBe,Ray,Xline,Mline,Pline,Spline等)、面(3Dface)、填充(hatch)、標注(Dimen.sion)等構成[4].
利用C#進行基于TeighaX組件的二次開發(fā)技術 中,將 點 (Point)、線 (UBe,Ray,Xline,Mline,Pline,Spline等)、圓(Circle)、圓?。ˋrc)、塊(Block)、尺寸標注(Dimen,sion)、填充(hatch)等等均以對象的方式表達.比如一個點只要定義這個點的起點坐標和終點坐標就能實現(xiàn)繪圖功能.對于這些基本Auto-CAD對象在開發(fā)包[6]里面可以找到相應的屬性、方法、字段,然后根據(jù)對象所擁有的方法、屬性、字段實例化對象,完成針對某一個對象的實例化操作.
參數(shù)化開發(fā)步驟包括模版創(chuàng)作、參數(shù)計算和參數(shù)化設計.參數(shù)化設計流程如圖1所示.
圖1 參數(shù)化設計流程圖
基于TeighaX組件參數(shù)化設計,通過讀取Dwg模版文件,對Dwg模版文件進行寫入操作,保存經過修改過的模板文件,得到最終繪圖結果文件.因此首先要新建一個Dwg模版文件,在模板文件里面只需要有各種規(guī)格的AutoCAD圖簽,根據(jù)標準常用圖簽有:A1,A3.將模板文件命名為指定的名稱,指定路徑,例如:“F:\standard.dwg”.也可以預存多個模板文件,在程序里面加以區(qū)別調用即可.
AutoCAD是在三維直角坐標系中繪圖.對于某一類的工程制圖項目,只要指定參數(shù),比如長,寬,高,角度等,確定好直線的起點坐標,就可以推算出直線的終點坐標,確定坐標系中的任意直線,從而可以繪制出工程圖紙的輪廓線.工程圖紙中的其它一些效果如填充,標注等等通過指定范圍和起點坐標實現(xiàn)在工程圖紙中一一對應,由此可以得到完整漂亮的Auto-CAD工程圖紙.對于繪圖起點坐標規(guī)定,最重要的一點要保證所有圖形元素都落在模版圖簽內,兼顧工程圖紙的整潔美觀性要求.以設計參數(shù)為已知量,推算各CAD圖形對象的位置坐標,和關鍵控制點坐標.
2.3.1 引用 TeighaX組件
參數(shù)化設計的前提是保證開發(fā)者安裝有相應的開發(fā)平臺,本文采用的開發(fā)平臺是VS2005,開發(fā)環(huán)境為C#.當然如果讀者對其他程序語言更加熟悉也可以采用其他開發(fā)環(huán)境.
安裝 TeighaX組件,啟動 VS2005,新建C#Windows應用程序項目,引用TeighaX組件.這一步是相當重要的,因為參數(shù)化設計是基于TeighaX組件的,沒有這個引用參數(shù)化設計無從談起.
2.3.2 程序基本界面設計
Windows應用程序具有用事件驅動特性.基于TeighaX組件的參數(shù)化設計中,Windows應用程序包括一系列click點擊事件,引用TeighaX組件后,Windows應用程序主界面上可設置Button,TeighaX等組件和控件.如圖2所示,界面從上至下依次有:Button(Button1),還有 TeighaX 控件:(注:圖中DWGDirectX2.07control即TeighaX控件).控件顯示范圍大小、背景色,界面的布局根據(jù)工程參數(shù)化設計需要而定.在Windows應用程序界面上設置Textbox用來存放需要設置的參數(shù),傳遞給主程序.Label標簽用來對Textbox參數(shù)進行注釋.設置button(參數(shù)賦值)按鈕,點擊按鈕參數(shù)傳遞給主程序.
圖2 程序界面設計圖
2.3.3 實例化對象
1)文件讀取.利用TeighaX組件提供的數(shù)據(jù)接口,對Dwg文件進行讀取操作.
2)AutoCAD圖形寫入操作.利用TeighaX組件對Dwg文件寫入操作.面向對象程序設計最重要的是對象實例化.在利用TeighaX組件的參數(shù)化設計中,將AutoCAD圖形看作是由一個個對象組成的.這些對象主要包括:點(Point)、線(UBe,Ray,Xline,Mline,Pline,Spline等)、圓(Circle)、圓?。ˋrc)、塊(Block)、尺寸標注(Dimen.sion)、填充(hatch)等.
基于C#開發(fā)環(huán)境中以添加對象的形式表達各種AutoCAD圖形.由于DWG文件中任何一個實體對象由實體頭和實體尾組成,實體頭表達的是實體對象屬性,實體尾表達的是實體的幾何參數(shù)[4].對于同一類實體,例如所有直線的實體頭屬性都是一樣的,他們的屬性都是直線.但是實體尾圖形參數(shù)卻大不相同,通過改變集合參數(shù),也就是實體尾就可以得到不同系列的直線[4].
對象實例化很重要的一個環(huán)節(jié)就是要根據(jù)設計參數(shù),把參數(shù)當作已知量,確定對象的幾何尺寸、位置.比如,直線實例化的過程就是將設計參數(shù)當作已知量,推算直線段長度,然后確定直線起點坐標,根據(jù)直線長度推算,直線終點坐標表達式.
C#語句實例化AutoCAD對象的基本程序語句如下面所示:
指定圓心坐標和圓半徑,繪制一個圓:double[]center1={x,y,0};
double Radius1=rad;
odaDoc. ModelSpace. AddCircle (center1,Radius1);
指定起點和終點坐標,繪制一條實線:double[]point1={x1,y1,0};
double[]point2={x,y,0};odaDoc.ModelSpace.AddLine(point1,point2);指定需要標注的直線和線性標注起點坐標,繪制線性標注:
double[]point01={x1,y1,0};double[]point02={x2,y2,0};double[]dim1={x3,y3,0};
odaDoc.ModelSpace.AddDimAligned(point01,point03,dim1);
2.3.4 圖形的顯示
圖形寫入操作完畢之后要把圖形正確的顯示在控件的繪圖界面上面,因此需要對繪圖界面上的圖形進行定位,對修改之后圖形更新,設置控件背景顏色.
2.3.5 參數(shù)賦值
參數(shù)的設置根據(jù)具體項目的需求,一般常見設置為長度、半徑、角度等.
2.3.6 穩(wěn)定計算
根據(jù)設定參數(shù)對水工結構進行穩(wěn)定計算.根據(jù)不同類型的水工建筑物比如:重力壩、拱壩、導流隧洞等等,針對不同類型水工建筑物采取相應的穩(wěn)定計算方法,編寫穩(wěn)定計算函數(shù),進行穩(wěn)定計算校核.若穩(wěn)定計算結果符合要求,進入下一步.反之,參數(shù)化設計從力學穩(wěn)定性上不合理,重新設計斷面尺寸,重新給參數(shù)賦值,直到新的斷面設計滿足力學穩(wěn)定,進入下一步.
2.3.7 結果和保存
經過以上步驟之后,外部參數(shù)已經傳遞給繪圖主程序了.在Windows應用程序界面上點擊確認按鈕對Dwg文件進行寫入操作,并保存輸出結果.TeighaX控件界面上顯示出經過寫入操作后的AutoCAD圖形.經過更改的模版圖形“F:\standard.dwg”自動保存為“F:\finished.dwg”.“F:\finished.dwg”存放最終的工程圖紙.
本文提供一個基于TeighaX組件的參數(shù)化設計在水利工程中的應用.在水利工程中經常會遇到設計重力壩剖面圖的項目.某水利樞紐,大壩為重力壩,為Ⅰ級建筑物,混凝土與基巖間的f值為0.6,荷載組合為基本組合.根據(jù)TeighaX組件參數(shù)化設計步驟,模版創(chuàng)作和參數(shù)計算為前期準備工作.本例中針對重力壩剖面圖,模版創(chuàng)作為一幅A3標準圖簽;參數(shù)設置為壩高,上游坡度,壩底寬度,下游坡度,死水位高度,根據(jù)所給參數(shù)推算剖面圖的關鍵點坐標.
安裝TeighaX組件,啟動 VS2005,新建一個Windows應用程序項目,引用 TeighaX(DWGdirectX)組件.組件引用成功打開主程序引用目錄顯示如圖3所示.
圖3 重力壩剖面參數(shù)化設計實例引用組件
在Windows應用程序界面上設置按鈕,命名為繪圖,點擊繪圖,執(zhí)行寫入操作.界面中的6個textbox分別用來存放設計參數(shù):壩高、上游坡度、壩底寬度、壩頂寬度、下游坡度、死水位.點擊強度穩(wěn)定計算按鈕,執(zhí)行強度穩(wěn)定計算函數(shù),進行強度穩(wěn)定計算.點擊抗滑穩(wěn)定計算按鈕,執(zhí)行抗滑穩(wěn)定計算函數(shù)進行抗滑穩(wěn)定計算.DwgdirectX控件尺寸為:長717像素,寬345像素.程序基本界面見圖4.
圖4 重力壩剖面參數(shù)化設計實例主程序基本界面設計
3.3.1 文件讀取
讀取DWG模板文件,文件的圖形為一標準A3圖簽,存放在F:\standard.dwg目錄下.
文件讀取C#語句:OdaHost=newTeighaX.OdaHostAppClass();
odaApp=OdaHost.Application;
odaDoc= odaApp.Documents.Open(“F:\standard.dwg”,false,(object)“”)
3.3.2 圖形寫入操作
由于程序內部比較復雜,具體AutoCAD中圖形元素如:直線,標注,填充等等的繪制,根據(jù)參數(shù)推求的坐標點,結合TeighaX組件幫助文檔[6]可以實現(xiàn).以下結合本例簡單敘述一些C#對象實例化參考語句.
繪制一條指定坐標起點和終點直線:double[]point1 = {685.3653,485.9180,0};
double[]point2={685.3653+h0*a1,485.9180+h0,0};
odaDoc.ModelSpace.AddLine(point1,point2);
繪制一個線性對齊標注:double[]dim1={666.3783,489.9180,0 };
double[]dim2={679.1533,489.0240,0};
odaDoc.ModelSpace.AddDimAligned(point1,point2,dim2);
本例中的參數(shù)設置包括如圖5所示的壩高:120 m,上游坡度:0.5,壩底寬度:88m,壩頂寬度:8m,下游坡度:3.5,死水位高度:25m.
參數(shù)賦值完畢之后點擊設定參數(shù)按鈕,參數(shù)傳遞給主程序.
圖5 重力壩剖面參數(shù)化設計實例中的參數(shù)設賦值和傳遞
設置好參數(shù)之后進行抗滑穩(wěn)定計算校核和強度穩(wěn)定校核,穩(wěn)定計算校核均采用材料力學方法.
3.5.1 強度穩(wěn)定
強度穩(wěn)定校核將重力壩視作懸臂梁,根據(jù)材料力學公式[7],計算危險截面,危險點的應力,本例計算校核壩踵壩趾位置的最大主應力σ.查閱混凝土重力壩設計規(guī)范[8],水工建筑物壩體混凝土允許的最大拉應力值0.1Mp,當σ>0.1Mp壩踵位置最先拉裂破壞;當σ≤0.1Mp壩體混凝土滿足強度穩(wěn)定要求.
應力計算公式[7]:
3.5.2 抗滑穩(wěn)定計算
抗滑穩(wěn)定計算采用剛體極限平衡法,根據(jù)材料力學抗剪強度公式計算抗剪強度穩(wěn)定系數(shù).查閱混凝土重力壩設計規(guī)范,當水工建筑物(假定為Ⅰ級建筑物)的抗滑穩(wěn)定系數(shù)K≥3.0,滿足抗滑穩(wěn)定要求.
抗滑穩(wěn)定計算公式[7]:
3.5.3 抗滑穩(wěn)定計算程序編寫
根據(jù)計算公式,編寫穩(wěn)定計算程序,在程序界面上設置強度穩(wěn)定計算按鈕和抗滑穩(wěn)定計算按鈕.點擊強度穩(wěn)定計算按鈕,當強度穩(wěn)定滿足要求時程序運行結果提示框顯示:強度穩(wěn)定計算結果,強度穩(wěn)定系數(shù)a0=a,a≤0.1Mp,穩(wěn)定計算結果滿足要求;當強度穩(wěn)定不滿足要求時程序運行結果提示框顯示:強度穩(wěn)定計算結果,強度穩(wěn)定系數(shù)a0=a,a>0.1Mp,穩(wěn)定計算結果不滿足要求.點擊抗滑穩(wěn)定計算按鈕,當抗滑穩(wěn)定滿足要求時程序運行結果提示框顯示:抗滑穩(wěn)定計算結果,抗滑穩(wěn)定系數(shù)K0=K,K≥3.0,穩(wěn)定計算結果滿足要求;當抗滑穩(wěn)定不滿足要求時程序運行結果提示框顯示:抗滑穩(wěn)定計算結果,抗滑穩(wěn)定系數(shù)K0=K,K<3.0,穩(wěn)定計算結果不滿足要求.
3.5.4 穩(wěn)定計算結果
根據(jù)4.5中傳遞到主程序的的重力壩剖面參數(shù)和工程參數(shù)編寫好強度穩(wěn)定系數(shù)和抗滑穩(wěn)定系數(shù)計算函數(shù),本例中點擊強度穩(wěn)定計算程序運行提示框顯示如圖6所示,抗滑穩(wěn)定系數(shù)計算程序運行提示框顯示如圖7所示,穩(wěn)定計算結果滿足要求.
本例中設置了圖形寫入操作完畢后,圖形顯示更新一次.控件界面的中心點設置為{760.869 7,544.582 2,0}.背景顏色設置為黑色.
圖形顯示C#語句參考如下:
oDevice= (VIEWXLib.IOdaDevice2)axOda-Viewer1.DeviceManager().NewDevice(“Open-GL”);
oDevice.UseCache=false;
oView = oDevice.SetupActiveLayoutViews((VIEWXLib.IAcadDatabase)odaDoc.Database);
oView.Zoom(2);
oDevice.BackgroundColor=new int[3]{0,0,0};
IAcadViewports viewports= odaDoc.Viewports;
double[]center5={760.8697,544.5822,};
viewports.Item(0).Center=center5;
oDevice.Update();
完成以上步驟,點擊繪圖按鈕.得到如圖8所示結果.繪制好的圖形已經存在了指定盤符本例中存放在“F:\finished.dwg”根目錄下.
保存DWG文件C#語句:odaDoc.SaveAs(“F:\finished.dwg”,OdSaveAsType.odR18_dwg,null).
圖8 重力壩剖面參數(shù)化設計實例設計最終結果圖
使用傳統(tǒng)手段進行重力壩剖面設計并用Auto-CAD出圖,是一個復雜的過程,如果算得的剖面不滿足穩(wěn)定計算要求,則要對剖面進行重新設計,Auto-CAD圖也要重新繪制.而基于TeighaX組件的Autocad參數(shù)化設計如果剖面穩(wěn)定計算不滿足要求只需要重新設置參數(shù),進行計算,從整個設計流程來看傳統(tǒng)計算是純人工的,步驟較多,而利用編程技術將重力壩剖面設計一體化到程序里面,工程師僅需要給參數(shù)正確賦值就可以完成設計.TeighaX組件的Autocad參數(shù)化設計在本文中的應用能夠方便快捷的解決工程制圖的高效化信息化問題.充分運用電子計算機編程技術和水利工程的專業(yè)技術,體現(xiàn)了學科交叉的特點.
由于TeighaX能夠脫離AutoCAD平臺,讀寫保存DWG文件等等.因此,利用這個組件可以對AutoCAD參數(shù)化設計.在文章的重力壩參數(shù)化設計實例中,工程圖紙的結構內容相對比較單一簡單,因此CAD二次開發(fā)的時候有許多TeighaX參數(shù)化設計中的對象都沒有用到,比較單一,所寫程序也比較簡單,但是任何復雜的東西都是由簡單的東西融合成復雜的東西.本文中對TeighaX參數(shù)化設計的應用具有一定的局限性,在這里本文提供一個比較有意義的思路,根據(jù)工程需求,確定好參數(shù),可以寫出更為復雜,更加高效率的程序,解決更加復雜的自動化制圖問題.而且不一定要選用C#作為開發(fā)語言,可以選用其他更加方便的語言.
目前國內許多AutoCAD制圖工程師都采用的是人工制圖,循著這條思路在不遠的將來也許可以通過這種AutoCAD參數(shù)化設計技術解決同一類型的復雜的,工作量大的制圖的問題.這將會節(jié)約大量的勞動力,使制圖工作更加高效準確.甚至還可以有這樣一條思路,將制圖設計一體化在軟件當中只要用戶輸入特定的參數(shù),就能夠馬上設計出來如圖中例所示的重力壩典型剖面.
[1]沈劍英,褚蓮娣.用VisualLISP編程實現(xiàn)參數(shù)化繪圖[J].機械工程及其自動化,2003(2):27-28.
[2]王懷球,蔣月姣.AutoCAD中用VBA進行CAD二次開發(fā)在工程測量中的應用[J].數(shù)字技術及應用,2011(5):119-120.
[3]王維鳳.基于ObjectARX的水工輔助設計系統(tǒng)開發(fā)[J].水科學與工程技術,2011(2):43-44.
[4]肖起年.基于DWGDirectX讀寫DWG圖紙文件的實現(xiàn)[J].計算機系統(tǒng)應用,2009,18(3):164-167.
[5]Open design Alliance.Itroduce of the ODA[EB/OL].http://www.opendesign.com.2011.2/2011.12.
[6]ODA.DWGDirectX1.12+幫助文檔chm[CP/OL].http://download.csdn.net.2011.1/2011.12.
[7]林繼鏞.水工建筑物[M].5版.北京:中國水利水電出版社,2009:44-56.
[8]SL319-2005.混凝土重力壩設計規(guī)范[S].北京:中國水利水電出版社,2005.