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

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