摘 要:為了提高標(biāo)準(zhǔn)件的繪制效率,簡(jiǎn)化制圖的復(fù)雜性,提出了標(biāo)準(zhǔn)零件的簡(jiǎn)化及快速繪制的方法,并與用戶產(chǎn)生交互。采用AutoCAD的二次開發(fā)技術(shù)和面向?qū)ο蟮腣BA語(yǔ)言實(shí)現(xiàn)參數(shù)化標(biāo)準(zhǔn)零件繪圖的原理,并實(shí)例繪制了開槽圓柱頭螺釘對(duì)該方法進(jìn)行了驗(yàn)證。結(jié)果表明,利用參數(shù)化設(shè)計(jì)思想能有效簡(jiǎn)化制圖復(fù)雜性,縮短設(shè)計(jì)周期,改善設(shè)計(jì)質(zhì)量。
關(guān)鍵詞:AutoCAD; VBA; 參數(shù)化; 標(biāo)準(zhǔn)零件
中圖分類號(hào):TN911; TP391.72 文獻(xiàn)標(biāo)識(shí)碼:A
文章編號(hào):1004-373X(2010)14-0112-02
Research on the Method of Drawing Parameterized Standardized Element
WU Jun-jun, LI zhen
(Guangdong Food and Drug College, Guangzhou510520, China)
Abstract: To raise efficiency of drawing standardized element, reduce complexity, the approach on simplified drafting of standardized element is presented. The principle on the realization of the rendering of parameterized standardized element by object oriented VBA language is discussed in the secondary development of AutoCAD, taking the slotted cheese-head screw as an example. Parameterization designed that reduces complexity, shortens the design cycle, improves design mass effectively.
Keywords: AutoCAD; VBA; parameterization; standardized element
標(biāo)準(zhǔn)零件的繪制對(duì)于機(jī)械設(shè)計(jì)有舉足輕重的作用,而在機(jī)械裝備圖的繪制中,每個(gè)零件部分對(duì)應(yīng)的標(biāo)準(zhǔn)零件的尺寸是不一樣的,這需要繪制不同型號(hào)的標(biāo)準(zhǔn)件。而AutoCAD在計(jì)算機(jī)輔助繪圖和輔助設(shè)計(jì)領(lǐng)域中占有非常重要的地位,它具有開放式的體系結(jié)構(gòu),允許用戶和開發(fā)者對(duì)其進(jìn)行擴(kuò)充和修改,以最大限度地滿足用戶的各種需求[1]。AutoCAD所支持的高級(jí)語(yǔ)言則成為最強(qiáng)有力的擴(kuò)充手段。在AutoCAD二次開發(fā)的進(jìn)程中主要用到Visual Lisp語(yǔ)言和VBA語(yǔ)言,而使用Visual Lisp語(yǔ)言繪圖,代碼量比較大,查找錯(cuò)誤不方便,而VBA語(yǔ)言代碼量相對(duì)較少,查找錯(cuò)誤很方便,語(yǔ)法簡(jiǎn)單、功能強(qiáng)大、易于掌握,其突出特點(diǎn)是它的可視化開發(fā)環(huán)境,具有強(qiáng)大的窗體創(chuàng)建功能,用戶能夠方便的進(jìn)行可視化操作,人機(jī)界面設(shè)計(jì)簡(jiǎn)單美觀[2]。因此在二次開發(fā)中,主要運(yùn)用VBA語(yǔ)言進(jìn)行圖形繪制的程序設(shè)計(jì),這樣可以通過輸入標(biāo)準(zhǔn)件參數(shù)來(lái)快速繪制需要的標(biāo)準(zhǔn)件[3-5]。
1 參數(shù)化繪圖程序設(shè)計(jì)思想及設(shè)計(jì)過程
在機(jī)械設(shè)計(jì)繪圖中,需要大量用到標(biāo)準(zhǔn)件,如果將相同的零件不停的重復(fù)繪制,會(huì)降低制圖效率,而塊的產(chǎn)生則很好地解決了這個(gè)問題。將不同的標(biāo)準(zhǔn)零件儲(chǔ)存為塊的形式,需要直接調(diào)用塊就可得到相應(yīng)的標(biāo)準(zhǔn)件圖。然而根據(jù)國(guó)家標(biāo)準(zhǔn),相同的標(biāo)準(zhǔn)件具有不同的型號(hào),如果將每個(gè)型號(hào)的零件圖都儲(chǔ)存為塊的形式,會(huì)占用大量的系統(tǒng)資源,給繪圖帶來(lái)不便,因此引入?yún)?shù)化設(shè)計(jì)的標(biāo)準(zhǔn)零件圖繪制[6-7]。
本文利用VBA實(shí)現(xiàn)參數(shù)化標(biāo)準(zhǔn)零件開槽圓柱頭螺釘?shù)睦L圖設(shè)計(jì),其設(shè)計(jì)的主要流程圖如圖1所示。
圖1 繪圖流程圖
1.1 用戶界面設(shè)計(jì)
用戶界面設(shè)計(jì)主要包括兩個(gè)內(nèi)容:用戶窗體的創(chuàng)建和程序中數(shù)據(jù)庫(kù)的調(diào)用。
用戶窗體的創(chuàng)建在機(jī)械設(shè)計(jì)手冊(cè)中,查找到的標(biāo)準(zhǔn)零件都是具有相同的外形,而各部分的尺寸即參數(shù)不同。因此,可以通過設(shè)計(jì)一個(gè)用戶界面,用不同的代號(hào)表示零件主要部分的尺寸,而用戶則根據(jù)需求輸入相應(yīng)的參數(shù)。如本例中的開口圓柱頭螺釘,ds代表螺頭直徑,n代表螺頭開槽直徑,t代表槽深,d代表螺身直徑,k代表螺頭長(zhǎng),b代表螺身長(zhǎng)。開口圓柱頭螺釘用戶界面如圖2所示。
圖2 螺釘標(biāo)準(zhǔn)件用戶界面
數(shù)據(jù)庫(kù)的調(diào)用。用戶可以根據(jù)制圖需要輸入相關(guān)參數(shù),但由于標(biāo)準(zhǔn)零件大部分有國(guó)家規(guī)定的標(biāo)準(zhǔn)參數(shù),因此可以創(chuàng)建一個(gè)參數(shù)數(shù)據(jù)庫(kù),用來(lái)記錄機(jī)械設(shè)計(jì)手冊(cè)中的參數(shù),這樣用戶可選擇零件的型號(hào),以便能快速、自動(dòng)地顯示出參數(shù)。而用戶界面中的“打開文件”即是一個(gè)數(shù)據(jù)庫(kù)調(diào)用過程,這是實(shí)現(xiàn)繪制圖形的關(guān)鍵所在。通過標(biāo)準(zhǔn)數(shù)據(jù)庫(kù)創(chuàng)建與參數(shù)輸入連接,可以把標(biāo)準(zhǔn)參數(shù)調(diào)用到程序繪圖中,通過保存文件也可以添加沒有的參數(shù)到對(duì)應(yīng)的數(shù)據(jù)庫(kù)中,這樣可以擴(kuò)展數(shù)據(jù)庫(kù)的記錄范圍,更好的完善制圖需求。
VBA作為一種內(nèi)嵌式的開發(fā)工具,具備了完善的數(shù)據(jù)訪問和管理功能,因此可以通過DAO數(shù)據(jù)訪問對(duì)象、數(shù)據(jù)控件對(duì)Access數(shù)據(jù)庫(kù)或其他的FoxPro、Betrieve等外部數(shù)據(jù)庫(kù)進(jìn)行訪問和管理,還可以使用SQL語(yǔ)句對(duì)數(shù)據(jù)庫(kù)進(jìn)行檢索[8]。在螺釘?shù)睦L制中建立數(shù)據(jù)庫(kù)“螺釘.mdb”表的方法如下:
Public luoding As String
Dim adoCon As Connection
Dim adoRs As Recordset
Dim entry As AcadLineType
Dim found As Boolean
′打開數(shù)據(jù)庫(kù)查詢所需數(shù)據(jù)
…
Dim i As Integer
i = InputBox(\"請(qǐng)輸入公稱直徑d的代號(hào):M3-0;M4-1;M5-2;M6-3;M8-4;M10-5\",\"輸入代號(hào)\")
If i = -1 Then Exit Sub
If i <= adoRs.RecordCount - 1 Then
adoRs.MoveFirst
adoRs.Move i
End If
ExchangeData False
End Sub
… ′保存文件,記錄數(shù)據(jù)庫(kù)中沒有的數(shù)據(jù)
On Error GoTo errHandle
With adoRs
.AddNew
.Fields(\"d\") = txtd.Text
.Fields(\"n\") = txtn.Text
.Fields(\"t\") = txtt.Text
.Fields(\"dk\") = txtdk.Text
.Fields(\"k\") = txtk.Text
.Fields(\"b\") = txtb.Text
.Update
End With
Exit Sub
…
通過創(chuàng)建數(shù)據(jù)庫(kù),可以調(diào)用出相應(yīng)型號(hào)的標(biāo)準(zhǔn)件圖,將不同的標(biāo)準(zhǔn)件組合在一起就可以得到需要的組合零件圖。
1.2 用VBA編寫程序繪圖
用VBA語(yǔ)言繪制零件圖時(shí),需要確定畫圖的基準(zhǔn)位,即定位基點(diǎn),并以此作為參考點(diǎn)繪制整個(gè)零件圖[9]。通常基點(diǎn)的輸入通過以下命令實(shí)現(xiàn),即:
Dim ptbase As Variant
ptbase=ThisDrawing.Utility.GetPoint (,\"輸入起點(diǎn):\")
繪制圖形需要用到函數(shù)調(diào)用,可以在模塊中建立繪制圖形的函數(shù)。在繪制標(biāo)準(zhǔn)件圖時(shí),需要根據(jù)參考基點(diǎn)來(lái)定義標(biāo)準(zhǔn)件不同部位點(diǎn)的坐標(biāo)。當(dāng)標(biāo)準(zhǔn)件呈現(xiàn)對(duì)稱結(jié)構(gòu)時(shí),可以只繪制出對(duì)稱軸的一邊,另一邊通過命令mirror進(jìn)行鏡像實(shí)現(xiàn),這樣可以很快地畫出對(duì)稱部分的圖形[10]。在二維環(huán)境中,定義鏡像需要的2個(gè)坐標(biāo)端點(diǎn)如下所示:
Dim mirrorObj1 (0 To 2) As Double
Dim mirrorObj2 (0 To 2) As Double
根據(jù)開槽圓柱頭螺釘?shù)奶攸c(diǎn),畫圖時(shí)需要分成2種情況:無(wú)螺紋部分桿徑約等于中徑;無(wú)螺紋部分桿徑等于螺紋大徑,因此在模塊中需要定義2個(gè)繪圖函數(shù),討論兩種情況,即l>b和l
Public Sub DrawLD1(d1 As Double,n1 As Double,t1 As Double,dk1 As Double,k1 As Double,b1 As Double,l1 As Double)
…
Public Sub DrawLD2(d2 As Double,n2 As Double,t2 As Double,dk2 As Double,k2 As Double,b2 As Double,l2 As Double)
…
在螺釘?shù)闹骱瘮?shù)中,通過調(diào)用語(yǔ)句Call DrawLD1,Call DrawLD2在模塊中定義的螺釘函數(shù)繪圖。
1.3 運(yùn)行程序及輸出結(jié)果
運(yùn)行程序,在彈出的對(duì)話框中輸入需要螺釘規(guī)格的代號(hào),以及在文本框中輸入合理的參數(shù)值l,點(diǎn)擊確定按扭,回到Autocad界面,用鼠標(biāo)點(diǎn)擊繪圖基點(diǎn),此時(shí)一個(gè)標(biāo)準(zhǔn)件就繪制成功。根據(jù)實(shí)際情況,可能出現(xiàn)2種繪圖效果:當(dāng)l>b時(shí),運(yùn)行結(jié)果如圖3所示;當(dāng)l
圖3 當(dāng)l>b時(shí)的螺釘圖
圖4 當(dāng)l
根據(jù)此思想可以繪制其他的標(biāo)準(zhǔn)件,用到的關(guān)鍵技術(shù)是標(biāo)準(zhǔn)件數(shù)據(jù)庫(kù)的創(chuàng)建與參數(shù)輸入的鏈接。
2 結(jié) 語(yǔ)
利用AutoCAD VBA技術(shù)開發(fā)出的標(biāo)準(zhǔn)件參數(shù)化繪制程序,以實(shí)現(xiàn)參數(shù)化標(biāo)準(zhǔn)零件的繪圖。在繪制大型零件圖、裝配圖時(shí)利用參數(shù)化設(shè)計(jì)思想可以簡(jiǎn)化制圖的復(fù)雜性,這樣極大地縮短了設(shè)計(jì)周期,提高了設(shè)計(jì)效率,改善了設(shè)計(jì)質(zhì)量,減少人工查表和計(jì)算的工作量,也減少了人為錯(cuò)誤,用戶可以按照自己的設(shè)計(jì)需求調(diào)用零件圖。
因此在AutoCAD中利用VBA以及結(jié)合數(shù)據(jù)庫(kù)創(chuàng)建進(jìn)行參數(shù)化標(biāo)準(zhǔn)件的繪圖開發(fā),仍然在機(jī)械領(lǐng)域中占有非常重要的地位。通過這樣的方法同樣可以開發(fā)其他產(chǎn)品的設(shè)計(jì)與繪圖系統(tǒng),以滿足設(shè)計(jì)者的不同需求。
參考文獻(xiàn)
[1]Tong Bingshu. The development of CAD technology[J]. Journal of Engineering Graphics, 1999(3): 18-22.
[2]付靖渝,馬詠梅.基于AutoCAD二次開發(fā)的組合零件庫(kù)設(shè)計(jì)[J].機(jī)械設(shè)計(jì)與制造,2007(1):52-53.
[3]趙衛(wèi)東,柳先輝.CAD軟件二次開發(fā)平臺(tái)實(shí)現(xiàn)技術(shù)[J].計(jì)算 機(jī)輔助設(shè)計(jì)與圖形學(xué)學(xué)報(bào),2003,15(4):512-516.
[4]WANG Yunpeng, LEI Yi, PAN Xiang, et al. Techniques of CAXAEB application development[J]. Journal of Com-puter Aided Design Computer Graphics, 2002, 14(2): 189-192.
[5]TONG Shi-zhong, LI Ping. Secondary development is key points of obtaining actual effect for CAD[J]. Electronic Machinery Engineering, 1999(4): 34-38.
[6]陳錦昌.計(jì)算機(jī)工程制圖[M].3版.廣州:華南理工大學(xué)出版社,2004.
[7]唐榮錫.CAD/CAM技術(shù)[M].北京:北京航空航天大學(xué)出版社,1994.
[8]姜德生,楊艷.基于Excel VBA的數(shù)據(jù)庫(kù)訪問技術(shù)的研究[J].微計(jì)算機(jī)信息,2008,24(21):103-104.
[9]郭占斌,劉海軍,陳剛.基于VBA的參數(shù)化繪圖程序設(shè)計(jì)與應(yīng)用[J].農(nóng)機(jī)化研究,2005(6):251-253.
[10]柯旭貴.基于AutoCAD 2000的參數(shù)化圖形的建立[J].計(jì)算機(jī)輔助設(shè)計(jì)與制造,2001(3):61-63.