侯杰
摘要:目前機械設計行業聯軸器型號各異,尺寸不同,導致在變更設計時帶來重復性勞動,使得設計周期長,效率低。通過在VS2010環境中應用C#對AutoCAD二次開發,實現參數化繪制聯軸器平面圖,為從事聯軸器設計相關人員提供方便,節省幾何建模時間。本文以GYS4型有對中榫凸緣聯軸器為例,聯合COM接口和.NET接口進行混合編程設計,最終實現了自動生成符合選擇預定參數的聯軸器平面圖。
關鍵詞:二次開發;AutoCAD;聯軸器
中圖分類號:TP391.72 文獻標識碼:A 文章編號:1007-9416(2017)09-0084-02
傳統繪圖中的某一圖元對象幾何尺寸修改導致此對象的相關圖元幾何參數都需要修改。聯軸器作為系列產品之一,同一類型聯軸器除了尺寸大小不同外,結構形狀均一致。若對系列產品采用傳統的交互式制圖,導致設計人員工作量繁多,開發周期長。為解決上述問題,本文開發了基于C#實現AutoCAD二次開發的參數化繪圖功能。應用參數化思想設計了內嵌于AutoCAD中的交互界面,并以GYS4型有對中榫凸緣聯軸器為例,根據圖元類型,結合其圖層,線型等屬性編寫函數程序。該程序能夠自動生成符合選擇預定參數的聯軸器平面圖,簡化了聯軸器圖繪制過程,縮短了設計周期。
1 對AutoCAD二次開發的概述
利用C#對AutoCAD二次開發是基于ActiveX Automation接口自動化對象模型和C#的結合,用戶能夠從 AutoCAD內部或外部以編程方式來操作AutoCAD,通過將其對象顯示到“外部世界”,被顯示的對象可由許多不同的編程語言和環境以及其他應用程序訪問,通過控制這些對象的屬性,方法從而實現對AutoCAD的程序化操作[1]。
1.1 Visual Studio 2010開發環境配置
在利用ActiveX Automation(COM)接口對AutoCAD 開發之前,要在VS2010中引用AutoCAD對象庫。實施步驟:1.啟動VS,新建項目。2.在解決方案資源管理器中添加引用“AutoCAD 2010 Type Libray”和“acax18enu.tle”兩個DLL。
1.2 C#與AutoCAD軟件的連接
在VS2010開發環境下C#與AutoCAD的連接方法為:先將程序集和命名空間添加到程序;然后編寫啟動AutoCAD對象函數,在程序啟動代碼時調用該函數,實現程序與AutoCAD軟件的連接。代碼示例如下:
private void 啟動CAD()
{
AcadApplication AcadApp = (AcadApplication)System.Runtime.InteropServices.Marshal.GetActiveObject("AutoCAD.Application");
AcadDocument AcadDocc = AcadApp.ActiveDocument;
}
2 聯軸器參數化繪圖程序設計思路
聯軸器參數化繪圖的整體思路是:在對聯軸器零件外形尺寸參數化基礎上將其平面圖創建所關聯的圖元對象的參數關系對應到程序中各個圖元對象,程序執行時,通過用戶在界面輸入不同的參數,使這些參數與程序中的各個圖元對象的屬性、方法中的參數對應,然后根據零件類別驅動生成相應的圖形。
3 聯軸器參數化繪圖具體設計實例
3.1 參數界面設計
用戶自定義窗體界面是直接呈現于設計者面前的部分,是計算機編程語言變成直觀操作界面,并與用戶形成良好交流的媒介[2]。通過VS平臺在新建的類庫中添加“Windows窗體”,設計者創建交互界面。將自定義窗體界面嵌入AutoCAD可采用.NET平臺開發非模態對話框。作為活動焦點對話框,程序焦點可以在窗體界面和AutoCAD界面之間自由切換。定義的Class1類中部分代碼為:
[CommandMethod("coupler")]
public void Dialog()
{
MyForm form= new MyForm (); //彈出自定義窗體界面
form.ShowInTaskbar = false;
Autodesk.AutoCAD.ApplicationServices.Application.Dialog(form);
}
3.2 聯軸器二維圖的參數化創建
3.2.1 聯軸器基本參數的確定
GYS4 型有對中榫凸緣聯軸器軸孔長度L有62,82mm,分別對應的軸孔直徑d1,d2有25,28,30和,32,35mm。以變量L為例,代碼中表示為:
Public int L;
根據圖1對程序中軸頸常量D屬性返回常量105,
Public int D { get{ return 105;}}
同理對常量D1、b、b1、S、w賦值55、32、48、6、2。
3.2.2 基本圖元對象的繪制
基本圖元對象繪制是對AcadModelSpace數據庫中的圖元對象本身包含的方法和屬性進行操作,完成直線,圓等創建,并繪制出聯軸器的平面圖。在繪制基本圖形之前,先創建圖紙相關圖層,設置其線型,線寬。以本聯軸器主視圖中心線所在圖層為例,列舉部分代碼如下
AcadLayer Layer1= AcadDoc.Layers.Add(dianhuaxian);
string linetype= "CENTER";endprint
string file = "acad.lin";
AcadDoc.Linetypes.Load(linetype, file);
AcadDoc.ActiveLayer =Layer1 ;
AcadDoc.ActiveLayer.Linetype = "ACAD_IS004W100";
AcadDoc.ActiveLayer.Lineweight=ACAD_LWEIGHT.acLnWt020;
對于圓對象使用AddCircle(Center, Radius)方法完成創建,Center為圓心位置,Radius為半徑。以本聯軸器的左視圖外圓的D創建為例,其中圖層和線型,線寬設置與直線創建類似。
左視圖正六邊形螺栓六角頭,其均勻分布在圓周,通過創建輕量多線段AddLightWeightPolyline()方法完成正六邊形的繪制,然后使用ArrayPolar(Number, AngleToFill, Point)方法創建環形陣列,其中Number為環形陣列中所要創建的對象數量,AngleToFill為填充角度,Point為指定環形陣列的中心點的坐標。部分代碼為:
object boltArray = lw.ArrayPolar(6, 2 * Math.PI, CenterOfCircl)
繪制剖面線對象采用AddHatch()方法,AppendOuterLoop (outerLoop)。前者方法為需要繪制剖面線的區域添加圖案填充,后者是向圖案填充中附加外邊界,其中outerLoop為構成封閉邊界的對象數組。
3.3 程序的封裝
在完成聯軸器圖形程序設計后,需要將編譯好的程序封裝,通過修改注冊表信息HKEY_LOCAL_MACHINE下的AutoCAD相應版本下的Application項中創建一個新項并在里面新建相應的鍵值以完成自動加載開發的DLL程序庫[3]。其中新建的四個鍵值分別為:(1)"DESCRIPTION"(應用程序描述);(2)"LOADCTRLS"(控制程序隨CAD加載方式,其值為e);(3) "LOADER"(應用程序的路徑);(4)"MANAGED"(程序形式,其值為1,告訴CAD這是托管程序)。設置成功后,在每次啟動AutoCAD 2010時會自動加載在注冊表中設置的DLL,用戶要實現聯軸器圖形的繪制只需在AutoCAD的命令行中鍵入程序編寫時CommandMethod屬性的值。
通過實例來驗證程序的可靠性。啟動AutoCAD 2010,在命令行鍵入“coupler”,設置彈出的參數選擇對話框軸孔直徑25mm,軸孔長度82mm,點擊“繪制圖形”后在圖紙上自動生成聯軸器圖形見圖2。
4 結論與展望
本文提出的基于C#的AutoCAD二次開發技術在聯軸器參數化繪圖中的應用實現了同一型號不同參數的聯軸器平面圖智能繪制,這種參數化繪圖方法只需選定尺寸參數,就可在該程序驅動下自動完成圖形的繪制,大大減少了設計人員重復性操作,使其更專注于設計工作,從而提高工作效率。同時也豐富了AutoCAD原有功能,同時對于完整的聯軸器標準庫建立具有很高的參考價值。
參考文獻
[1]王若惠.基于VBA的 AutoCAD 二次開發及應用實例[J].計算機應用,2007,26(9):30-33.
[2]趙玄子.基于.NET的AutoCAD二次開發—聯軸器標準庫的建設[D].電子科技大學,2015.
[3]李冠億.深入淺出AutoCAD.NET二次開發[M].北京:中國建筑工業出版社,2012.endprint