燕必成 高永祥
(浙江機電職業(yè)技術學院 機械工程學院,杭州 310053)
VB 在 AutoCAD 二次開發(fā)中的應用
燕必成高永祥
(浙江機電職業(yè)技術學院 機械工程學院,杭州 310053)
介紹了 VisualBasic 語言對 AutoCAD 二次開發(fā)的技術基礎和重要性,建立了 VB 與 AutoCAD 的聯(lián)系。 通過齒輪結構參數(shù)化三維造型的實例,詳細闡述了用 VB6.0 對 AutoCAD 進行二次開發(fā)的基本思路、主要步驟和具體方法。
AutoCAD;二次開發(fā);VB;圓柱齒輪
隨著計算機技術的快速發(fā)展,CAD、CAM 和CAE 等技術在機械制造行業(yè)扮演著越來越重要的角色,各種軟件層出不窮。 其中 AutoCAD 應用最為廣泛的原因是由于它具有開放的體系結構,允許用戶和開發(fā)者采用高級編程語言對其進行擴充和修改(即二次開發(fā)),能最大限度地滿足用戶的特殊要求。 在機械行業(yè)中,對于一些一般性的復雜輪廓曲線,僅僅利用 AutoCAD 本身來繪制是比較困難的,也很難達到 CAE 分析的實際要求。 因此,可通過對AutoCAD 進 行 二次開發(fā)來 解 決該問題[1]。
Visual Basic(以下簡稱 VB)是 Microsoft公司推出的面向對象的可視化編程工具。它作為二次開發(fā)工具,具有語法簡單、功能強大、調試方便等特點。此外,AutoCAD 自 R14 版本起, 加入了 ActiveX 自動化服務功能, 而 VB又是最為常用的支持ActiveX 技術的開發(fā)工具, 以它作為開 發(fā) 工具,使AutoCAD 與其他 Windows 程序的數(shù)據(jù)共享變得非常 容易[2]。
用 VB 語言進行 AutoCAD 二次開發(fā), 首先要將VB 與 AutoCAD 連接起來,然后再進行程序的編寫。
1.1VB 中 AutoCAD 的引用
新建好一個工程,從【工程】下拉菜單里單擊【 引 用 】, 在 彈 出 的 窗 口 中 , 將 AutoCAD Type Library 勾選,如圖 1 所示。 這樣就把 AutoCAD 的對象引用到VB里。
圖 1 VB 中 AutoCAD 的引用設置界面
1.2對 象變量的定義[2]
在窗體的 Load 事 件里輸入以下代碼, 其中Dim AcadApp As AcadApplication 是 用 來 定 義AutoCAD 對象, 其 他 代 碼 是用來連接 VB 與 Auto CAD 的。 因此,當運行 VB 時,程序會自動連接到AutoCAD 上,從 而 實 現(xiàn) 在 VB 里 編 程,對 AutoCAD進行控制。
Dim AcadApp As AcadApplication
Private Sub Form_Load()
On Error Resume Next
Set AcadApp=GetObject("AutoCAD.Application")
If Err Then
Err.Clear
SetAcadApp=CreateObject("AutoCAD. Application")
If Err Then
MsgBox("不 能 運 行 AutoCAD,請 檢 查 是 否 安裝了 AutoCAD")
Exit Sub
End If
End If
AcadApp.Visible=True
AcadApp.WindowState=acMax
End Sub
這里使用了比較復雜的條件語句,目的是確保只啟動一次 AutoCAD。
本例以圓柱齒輪三維模型的建立及加工仿真過程為例, 說明 VB 在 AutoCAD 二次開發(fā)中的應用。 本例中所涉及的程序 和 圖 形 都 在 VB6.0 和AutoCAD2006 中得以驗證。
2.1程 序主界面的 創(chuàng) 建[3-4]
在 VB 對 AutoCAD 的二次開發(fā)中,程序的界面至關重要,可以讓用戶直觀地將齒輪的各個參數(shù)輸入,同時也能給用戶提供一些技術幫助。 這里首先創(chuàng)建了一個名為“創(chuàng)建三維齒輪”的窗體,然后在“確定”按鈕的 click 事件里創(chuàng)建齒圖 2 三維齒輪參數(shù)窗體輪程序的控件,見圖 2所示。
圖2 三維齒輪參數(shù)窗體
其中 Function 齒輪和 Function ACos 兩個函數(shù)在窗體的 Load 事件里。
2.2齒 輪的創(chuàng)建方 法 及過程[2,5]
齒輪的創(chuàng)建,首先創(chuàng)建一個圓柱體(半徑就是齒頂圓半徑),再創(chuàng)建齒輪的三維軸孔及鍵槽,然后做布爾減(Bool acSubtraction)運算,得到無齒的 齒輪模型。 再由齒輪的參數(shù)計算得出銑刀參數(shù),用旋轉的方法創(chuàng)建出銑刀。最后由銑刀和齒輪模型做動畫,動畫是用布爾減的方法切齒創(chuàng)建,得到完整的三維齒輪。程序的主流程圖如圖3所示。
圖3 程序主流程
2.2.1齒輪模型的創(chuàng)建方法及過程
齒輪模型的創(chuàng)建共分四個步驟:
(1)先用 Addcircle 方法創(chuàng) 建 一個半 徑 為齒頂圓半徑的圓。
(2)用 Addlight Weight PolyLine 方法創(chuàng)建軸孔及鍵,參數(shù)由窗體上對應的文本框輸入。
(3)用 AddRegion 方法創(chuàng)建軸孔及鍵的面域,然后分別拉伸,其高度為齒寬,拉伸錐角為 0。
(4)將 軸孔和 鍵 做布爾 加 (Bool acUion),再與第(1)步做的齒輪圓柱體做布爾減運算,得到齒輪模型。 由于篇幅原因,詳細程序不再列出。
'創(chuàng)建分度圓,齒頂圓,齒根圓,軸孔
Dim circler1 As AcadCircle
Dim circlera1 As AcadCircle
Dim circlerf As AcadCircle
Dim circlerd As AcadCircle
Dim centerpoints(0 To 2)As Double
…
'將軸孔和鍵 3d 做并集
軸孔.Boolean acUnion,鍵 3d
'將軸孔和齒輪圓柱體做差集
圓柱體.Boolean acSubtraction, 軸孔
2.2.2銑刀模型創(chuàng)建方法及過程
齒輪銑刀是由一個回轉面旋轉形成的銑刀盤模型,利用布爾減運算切出刀齒。 用齒輪銑刀銑齒時,銑刀的各參數(shù)應與齒輪的各參數(shù)有相配合,這樣才能保證加工出來的齒輪是符合要求的。因此,在設計銑刀時要根據(jù)齒輪的各參數(shù)來確定銑刀。具體創(chuàng)建方法如下:
(1)銑刀回轉面創(chuàng)建
銑刀回轉面的數(shù)學模型如圖4, 先創(chuàng)建右半部分,再鏡像得到左半部分。 各個點之間的曲線創(chuàng)建思路如下:
圖4 銑刀回轉面的模型
①創(chuàng)建右半部分曲線: 第 0、1、2 點用 Addlight Weight PolyLine 方法創(chuàng)建輕便多義線, 曲線上第0 點為齒根圓上點,第 2 點為齒輪圓上點,第 1 點為介于 0 點與 2 點之間的點,0、1、2 點構成齒輪根部的過渡曲線,使彎曲度由指定第一點凸度為 0.14 實現(xiàn);第 2、3、4 點 ,用 Addspline 方 法創(chuàng)建樣條曲 線,其中第 3點為齒輪分度圓上點,第 4點為齒頂圓上的點;第 4、5、6 用 Weight PolyLine 方法創(chuàng)建輕便多義線,第 5、6 由銑刀本身確定,無具體要求。
②用 mirror 方法鏡像右半部分曲線,得到左半部分曲線,鏡像軸為Y軸。
(2)銑刀盤三維實體的創(chuàng)建
①將第(1)步作好的曲線創(chuàng)建為面域;
②用 Addrevoledsolid 方 法 將 第①步 作 好的 面域進行面域旋轉, 角度為 6.29 弧度, 旋轉軸為 XY平面內平行于直線 5-6 的一條直線。
(3)銑刀成形
先 用 Addbox 方 法 創(chuàng) 建 一 個 長 方 體 , 再 用ArrayOolar方法將其圓形陣列,數(shù)量為銑刀齒數(shù),然后把陣列得到的立方體與銑刀盤做布爾減得到有齒的銑刀。
2.2.3動 畫切齒的方 法 及過程[2,4-6]
由齒輪模型形成齒輪,是由銑刀的旋轉、銑刀與齒輪模型的移動,作布爾減模擬動畫得到的。 實際上,由于齒輪模型與銑刀相對運動時,不可能做成完全連續(xù)的,故在做布爾減運算時還要一個專門與它作布爾減的銑刀模型(由銑刀面域拉伸而成),為使動畫逼真,將銑刀模型隱藏。
(1)用 AddExtrudedsolid 方法將創(chuàng)建旋轉銑刀的面域拉伸,高度為齒寬,錐角為 0 度。
(2)用 Delete 方法將除齒輪,銑刀,銑刀拉伸的實體外的實體刪除。
(3)用 Do…Loop 做一個循環(huán),在循環(huán)體內用move 方法讓銑刀沿 z軸上下移動, 距離為齒寬,同時用 Rotate3d 方法饒自身軸旋轉一定角度,同樣用Rotate 方法將齒輪旋轉,角度為 360/齒數(shù) *3.14/180弧度,銑刀自身復制,齒輪模型與面域拉伸做布爾減運算。具體程序如下:
'定義銑刀拉伸,做動畫差集用
Dim 銑刀拉伸 As Acad3DSolid
Set銑刀拉伸=AcadApp.ActiveDocument.ModelSpace._
AddExtrudedSolid(銑刀面域(0),height,taperAngle)
axisPt(0) = 銑刀拉伸.Centroid(0)
axisPt(1) = 銑刀拉伸.Centroid(1)
axisPt(2) =height/2
銑刀拉伸.Move 銑刀拉伸.Centroid,axisPt
銑刀拉伸.Visible=False'隱藏了銑刀拉伸
axisPt(0) = 銑刀 3d.Centroid(0) +10
axisPt(1) = 銑刀 3d.Centroid(1)
axisPt(2) = 銑刀 3d.Centroid(2)
point1(0) = 銑刀 3d.Centroid(0)
point1(1) = 銑刀 3d.Centroid(1)
point1(2) = 銑刀 3d.Centroid(2) +height
銑刀 3d.Move 銑刀 3d.Centroid,point1
'刪除銑刀,銑刀拉伸和齒輪以外的實體
Dim entry As AcadEntity
ForEachentryInAcadApp.ActiveDocument. ModelSpace
If entry.ObjectID 〈> 銑 刀 3d.ObjectID And entry. ObjectID 〈> _
圓柱體.ObjectID And entry.ObjectID 〈> 銑刀拉伸._
ObjectID Then entry.Delete End If Next
'定義動畫
Dim 銑刀復制 As Acad3DSolid
Dim k
i1=0
Dim 銑刀 3dz 坐標 AsDouble
銑刀 3dz 坐標 = 銑刀 3d.Centroid(2)
Dim point22(0 To2) AsDouble
point22(0) = 銑刀 3d.Centroid(0)
point22(1) = 銑 刀 3d.Centroid(1) -8* (rf1-rb1)
point22(2) = 銑刀 3d.Centroid(2)
'由循環(huán)做銑刀移動
Do Until i1 > 360
For k= 銑 刀 3dz 坐 標 To 銑 刀 3dz 坐 標 -heightStep-_height/3
point1(2) =k
銑刀 3d.Move 銑刀 3d.Centroid,point1銑刀 3d.Update
axisPt(2) = 銑刀 3d.Centroid(2)
'銑刀旋轉
銑刀 3d.Rotate3D 銑刀 3d.Centroid,axisPt,_ 360/30*3.14159/180
銑刀 3d.Update
Next k
銑刀 3d.Move 銑刀 3d.Centroid,point22
Set銑刀復制 = 銑刀拉伸.Copy
圓柱體.Boolean acSubtraction,銑刀復制圓柱體.Update
point1(2) =point1(2) +height
銑刀 3d.Move 銑刀 3d.Centroid,point1
銑刀 3d.Update
Dim CenterPoint(0 To 2) As Double
CenterPoint (0) =0:CenterPoint (1) =0: CenterPoint(2) =0
圓柱體.Rotate CenterPoint,-360/z1*3.14159/ 180
'齒輪毛坯旋轉
圓柱體.Update
i1=360/z1+i1
Loop
銑 刀 3d.Move銑 刀 3d.Centroid,point22 程序執(zhí)行過程中產(chǎn)生的動畫圖如圖 5所示,執(zhí)行的最后結果如圖6所示。
圖5 加工動畫
圖6 仿真加工的結果
本文利用 VB 對 AutoCAD 進行二次開發(fā),通過一實例說明了進行二次開發(fā)的理論和方法,解決了具有一般性復雜輪廓曲線的幾何造型問題。VB是Windows 下一個優(yōu)秀的開發(fā)工具, 采用 ActiveX 技術,在 Windows 多任務環(huán)境下,將多個應用程序集成在一起來實現(xiàn)一個綜合的工程應用,這是個很好的選擇。
[1]岳 震.基 于 VB 的 AutoCAD 二 次 開 發(fā)[J].機 械 設 計 與 制 造 ,2002(1):25-26.
[2]張 晉 西.Visual Basic 與 Auto CAD 二 次 開 發(fā) [M].北 京 :清 華大學出版社,2002.
[3]劉 瑞 新 ,汪 遠 征.Visual Basic 程 序 設 計 教 程[M].北 京:機 械工業(yè)出版社,2000.
[4]申 永勝.機械 原理教 程[M].北京 :清華大 學出 版社,1999.
[5]張 國 寶 .AutoCAD Visual Basic 開 發(fā) 技 術[M].北 京 : 科 學 出版社,2000.
[6]郭 招娣.VB.NET 和 VB6.0 的 二次開 發(fā)[J].CAD/CAM 與制造業(yè)信息化,2005(1):29.
(責任編輯梁紅艷)
H 26.2
:A
:1671-9123(2014)03-0117-04
2014-05-26
燕必成(1975-),男,甘肅天水人,浙江機電職業(yè)技術學院機械工程學院教師。