摘要 介紹用VB開發(fā)AutoCAD進(jìn)行參數(shù)化繪圖的途徑和方法。優(yōu)化孔型設(shè)計是軋鋼工藝設(shè)計的主要問題之一,通過軋制角鋼孔型的優(yōu)化設(shè)計,介紹這種方法在軋鋼孔型優(yōu)化設(shè)計中的具體應(yīng)用。
關(guān)鍵詞 VB;AutoCAD;參數(shù)化繪圖
中圖分類號:TP391.72 文獻(xiàn)標(biāo)識碼:A 文章編號:1671-489X(2008)20-0108-03
軋鋼孔型的優(yōu)化設(shè)計是軋制工藝的主要問題之一。如果利用參數(shù)化繪圖,可以將圖形尺寸與設(shè)計條件相關(guān)聯(lián),即將圖形尺寸看作是“設(shè)計條件”的函數(shù),當(dāng)設(shè)計條件發(fā)生變化時,圖形尺寸也隨之發(fā)生變化,從而完成圖形的繪制。這樣不僅可以縮短設(shè)計周期,而且提高了設(shè)計質(zhì)量。其實(shí),AutoCAD自問世之初,就為人們提供了參數(shù)化繪圖的功能,它不但提供了與其他程序設(shè)計語言的接口,而且其自身擁有的AUTOLISP、ADS、ARS、VBA等開發(fā)工具功能強(qiáng)大。
筆者通過VB高級語言把AUTOCAD中的VBA代碼轉(zhuǎn)變?yōu)閂B代碼,以VB作為編譯器,AutoCAD作為圖形支撐軟件,使VB直接調(diào)用AutoCAD來實(shí)現(xiàn)參數(shù)化繪圖。
1 設(shè)計思路
對于高級語言Visual Basic 6.0來說,其計算能力較強(qiáng)而繪圖能力卻相對較差;而繪圖軟件AutoCAD2002恰好相反,計算能力差而繪圖能力強(qiáng)。設(shè)計者可以用前者計算,用后者繪圖。這就要求高級語言和繪圖軟件之間要有接口,設(shè)計者給出參數(shù),經(jīng)高級語言處理后能夠調(diào)用AutoCAD繪出所需的圖形。
2 Visual Basic 6.0與 AutoCAD2002的連接
2.1 連接方式VBA是AutoCAD2002的內(nèi)嵌式語言,它的全稱是Visual Basic for Application。它是基于Visual Basic 6.0版本,完全面向?qū)ο篌w系結(jié)構(gòu)的一種編程語言,所以它有著與VB幾乎相同的開發(fā)環(huán)境和語法;它的功能強(qiáng)大,可以說是一個萬能開發(fā)工具。由于VBA是依附于AutoCAD的,所以其與AutoCAD共享內(nèi)存空間、數(shù)據(jù)環(huán)境。VBA語言結(jié)構(gòu)簡單,即可利用AutoCAD主界面操作環(huán)境,也可創(chuàng)造自己所需的主界面操作環(huán)境[1]。但是它也存在一定的缺點(diǎn),為了克服這些缺點(diǎn),使用Visual Basic 6.0開發(fā)AutoCAD。
轉(zhuǎn)化VBA代碼為VB代碼,首先要引用AutoCAD type library。在VB6.0中,選擇工程—“引用”,然后在“引用”對話框選擇AutoCAD2000 type library,接下來將VBA代碼中所有的Thisdrawing替換成一個用戶定義的代表當(dāng)前活動文檔的變量,為AutoCAD應(yīng)用程序acadApp和當(dāng)前文檔acadDoc定義一個變量,然后設(shè)置應(yīng)用程序變量為當(dāng)前AutoCAD應(yīng)用程序。
如果AutoCAD正在運(yùn)行,則用GetObject方法取得AutoCAD應(yīng)用程序?qū)ο蟆H绻鸄utoCAD沒有運(yùn)行,則返回一個錯誤。捕捉這個錯誤并清除它,然后用CreateObject方法嘗試建立一個AutoCAD應(yīng)用程序?qū)ο蟆H绻晒Γ瑒tAutoCAD啟動;如果失敗,則顯示一個消息框說明錯誤原因[2]。
2.2 連接程序代碼[3]
Public acadapp As Object
' AutoCAD應(yīng)用程序?qū)ο笞兞?/p>
Public preference As Object
' AutoCAD優(yōu)先設(shè)置對象變量
Public acaddoc As Object
' AutoCAD文檔對象變量
Public paspace As Object
' AutoCAD圖紙空間對象變量
Public mospace As Object
' AutoCAD模型空間對象變量
'繪圖初始化
Sub init()
'與CAD建立連接
On Error Resume Next
'如果CAD正在運(yùn)行,則GetObject函數(shù)返回對應(yīng)用程序?qū)ο蟮囊?/p>
'變量AcadApp已經(jīng)定義成全局變量
Set acadapp = GetObject(, \" AutoCAD.Application\")
If Err Then
Err.Clear'清除錯誤
Set acadapp = CreateObject(\"AutoCAD.Application\")'啟動AutoCAD
'如果GetObject函數(shù)不能創(chuàng)建AutoCAD應(yīng)用程序?qū)ο?/p>
'則提示不能運(yùn)行AutoCAD!!!
If Err Then
MsgBox \"不能運(yùn)行AutoCAD!!!\"
Exit Sub '退出本過程
End If
End If
'如果成功的引用了AutoCAD應(yīng)用程序?qū)ο?/p>
'則使其界面可見(缺省狀態(tài)下是不可見的)
acadapp.Visible = True
acadapp.Width = Screen.Width
acadapp.Height = Screen.Height
Set preference = acadapp.preference
Set acaddoc = acadapp.ActiveDocument
Set mospace = acaddoc.ModelSpace
Set paspace = acaddoc.PaperSpace
End Sub '結(jié)束過程
3 參數(shù)化繪圖的實(shí)現(xiàn)
3.1 AutoCAD2002對象模型AutoCAD2002應(yīng)用程序公開的對象很多,每個對象都代表了AutoCAD應(yīng)用程序的一部分。圖形實(shí)體對象,如直線line、圓circle等;樣式設(shè)置對象,如線型linetype等;組織結(jié)構(gòu)對象,如層layer、塊block等。這些對象按照從屬關(guān)系,有層次地組織在一起,就形成了AutoCAD2002對象模型。在編制參數(shù)化繪圖代碼前必須建立實(shí)體層、中心線層,并設(shè)定各層的顏色和線型。
實(shí)體對象的創(chuàng)建與編輯:在創(chuàng)建實(shí)體對象之前,要確定實(shí)體將放于何處,是模型空間、圖紙空間,還是存放在塊中。不論在哪個對象中創(chuàng)建實(shí)體,都要先引用這個對象。
3.2 建立圖形的幾何及數(shù)學(xué)模型無論怎么復(fù)雜的圖形,均可看成是由直線、圓弧、圓等基本繪圖元素拼接而成的。只要已知特征點(diǎn)(直線兩端點(diǎn)、圓的圓心、圓弧的起點(diǎn)和終點(diǎn)等)的坐標(biāo)和有關(guān)參數(shù),就能調(diào)用 AutoCAD的基本作圖命令,將它們畫出來。
在參數(shù)化繪圖過程時,首先確定所選坐標(biāo)系的原點(diǎn)坐標(biāo),這里是(ox,oy)。其次是確定一些特征點(diǎn)的坐標(biāo)。按照圖形的幾何關(guān)系,根據(jù)特征點(diǎn)計算繪圖點(diǎn),繪圖點(diǎn)由特征點(diǎn)兩邊夾角和圓角半徑來確定。然后利用AutoCAD的直線﹑圓弧繪圖命令,把這些繪圖點(diǎn)連接起來,即可繪出完整的孔型圖。

現(xiàn)以型鋼軋制過程的孔型設(shè)計中箱形孔為例來說明圖形的參數(shù)化繪圖的具體途徑。型材是在帶有所謂軋槽所構(gòu)成的環(huán)形凹槽或凸緣的軋輥上軋制出來的。由兩個或多個軋輥的軋槽所構(gòu)成的斷面輪廓叫做孔型[4]。孔型設(shè)計中首先確定孔型形狀和孔型尺寸,其次是將孔型配置在軋輥上。如圖1所示:要畫出箱形孔必須知道軋件寬度b、軋件高度h、外角半徑r1、內(nèi)角半徑r2、孔型上半部傾斜角qxj1、孔型下半部傾斜角qxj2、輥縫s共7個尺寸。孔型寬高可以由VB計算部分得到,也可以手工輸入,而其他5個尺寸可以由人手工輸入。在參數(shù)化繪制孔型圖的過程中首先要正確地確定特征點(diǎn)的坐標(biāo)。一般應(yīng)根據(jù)尺寸的幾何關(guān)系,建立孔型上所有的特征點(diǎn)的坐標(biāo)和孔型寬度和高度的關(guān)系式,從而實(shí)現(xiàn)當(dāng)軋件尺寸改變時,相應(yīng)孔型圖也隨之改變的目的。繪圖點(diǎn)由特征點(diǎn)兩邊夾角和圓角半徑來確定。因?yàn)橄湫慰资前凑誽軸對稱,所以只畫出左面一半的圖形,右面一半的圖形由左面圖形關(guān)于y軸鏡像得到。
編制箱形孔參數(shù)化繪圖的程序如下所示(以1、2兩點(diǎn)的線段1和2、3兩點(diǎn)之間的圓弧2來說明圖形的繪制,其中13點(diǎn)為一個特征點(diǎn)):
Public ox, oy As Double
' 圖形所放位置的相對原點(diǎn)坐標(biāo)
Dim pn1(0 To 2) As Double
' 定義1點(diǎn)的坐標(biāo)為雙精度數(shù)
Dim pn2(0 To 2) As Double
' 定義2點(diǎn)的坐標(biāo)為雙精度數(shù)
Dim pn3(0 To 2) As Double
' 定義3點(diǎn)的坐標(biāo)為雙精度數(shù)
Dim pntcen1(0 To 2) As Double
'過渡弧圓心坐標(biāo)
Dim Line1 As Object
' 定義1點(diǎn)和2點(diǎn)之間的直線1為對象變量
Dim Line2 As Object
' 定義2點(diǎn)和3點(diǎn)之間的圓弧2為對象變量
Dim line11 As Object
' 定義直線1關(guān)于y軸的對稱線段11為對象變量
Dim Line21 As Object
' 定義圓弧2 y軸的對稱弧21為對象變量
Dim lkx As Object ' 輪廓線
Dim point1(0 To 2) As Double ' 鏡像點(diǎn)坐標(biāo)
Dim point2(0 To 2) As Double' 鏡像點(diǎn)坐標(biāo)
Dim xxobj As AcadLineType
'建立實(shí)體層
Dim stlayerobj As AcadLayer
Dim curlayerobj As AcadLayer
'添加一個實(shí)體層
Set stlayerobj = acaddoc.Layers.Add(\"lunkuoxian\")
stlayerobj.Color = acWhite
'stlayerobj.Lineweight = acLnWt025
'畫孔型輪廓線
Set curlayerobj = acaddoc.ActiveLayer
'保存當(dāng)前活動層
acaddoc.ActiveLayer = stlayerobj
'設(shè)實(shí)體層為當(dāng)前層
Set xxobj = acaddoc.Linetypes.Add(\"continuous\")
acaddoc.ActiveLinetype = xxobj
'xxobj.Lineweight = acLnWt025
acaddoc.Regen True
qxj1 = 7 * pi / 180: r1 = 25: r2 = 18: s= 15
' qxj1為箱形孔的側(cè)壁斜角
pn1(0) = ox - b / 2 - r1 * Tan((pi / 2 - qxj1) / 2) - 20: pn1(1) = oy + s / 2: pn1(2) = 0
pn2(0) = ox - b(i) / 2 - r1 * Tan((pi / 2 - qxj1) / 2): pn2(1) = oy + s / 2: pn2(2) = 0
Set Line1 = mospace.AddLine(pn1, pn2)
pntcen1(0) = pn2(0): pntcen1(1) = oy + s(i) / 2 + r1: pntcen1(2) = 0
Set Line2 = mospace.AddArc(pntcen1, r1, 3 / 2 * pi, 2 * pi - qxj1)
point1(0) = ox: point1(1) = oy - 135: point1(2) = 0
point2(0) = ox: point2(1) = oy + 118.5: point2(2) = 0
Set line11 = Line1.Mirror(point1, point2)
Set Line21 = Line2.Mirror(point1, point2)
圖中其他點(diǎn)的坐標(biāo)也按照上述的方法依次找到,這樣就依次畫出箱形孔孔型圖的左半部分,再通過關(guān)于y軸鏡像得到完整的孔型圖。
4 結(jié)論
本文介紹Visual Basic 6.0 與AutoCAD 2002的連接,以VB作為編譯器,以AutoCAD為圖形支撐軟件,在AutoCAD繪圖環(huán)境下進(jìn)行參數(shù)化繪圖。這種方法可以使設(shè)計人員從繁瑣的計算、繪圖工作中解放出來,以從事其他創(chuàng)造性的工作;并將高級語言在計算和數(shù)據(jù)處理上的優(yōu)勢與AutoCAD在圖形處理上的特長有機(jī)地結(jié)合在一起,能夠更好地滿足需要,提高優(yōu)化水平。
參考文獻(xiàn)
[1]孔曉玲.AutoCAD 2000 的二次開發(fā)—通用件壓板的計算機(jī)輔助設(shè)計[J].機(jī)械設(shè)計與制造,2002,10:16
[2]余承飛,王冬松.AutoCAD 數(shù)據(jù)庫應(yīng)用與連接技術(shù)[M].北京:北京大學(xué)出版社,2000,6
[3]張國寶.AutoCAD Visual Basic開發(fā)技術(shù)[M].北京:科學(xué)出版社,2000,1:25
[4]B.K.斯米爾諾夫,等.軋輥孔型設(shè)計[M].北京:冶金工業(yè)出版社,1991,1