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