燕必成 高永祥
(浙江机电职业技术学院 机械工程学院,杭州 310053)
VB 在 AutoCAD 二次开发中的应用
燕必成高永祥
(浙江机电职业技术学院 机械工程学院,杭州 310053)
介绍了 VisualBasic 语言对 AutoCAD 二次开发的技术基础和重要性,建立了 VB 与 AutoCAD 的联系。 通过齿轮结构参数化三维造型的实例,详细阐述了用 VB6.0 对 AutoCAD 进行二次开发的基本思路、主要步骤和具体方法。
AutoCAD;二次开发;VB;圆柱齿轮
随着计算机技术的快速发展,CAD、CAM 和CAE 等技术在机械制造行业扮演着越来越重要的角色,各种软件层出不穷。 其中 AutoCAD 应用最为广泛的原因是由于它具有开放的体系结构,允许用户和开发者采用高级编程语言对其进行扩充和修改(即二次开发),能最大限度地满足用户的特殊要求。 在机械行业中,对于一些一般性的复杂轮廓曲线,仅仅利用 AutoCAD 本身来绘制是比较困难的,也很难达到 CAE 分析的实际要求。 因此,可通过对AutoCAD 进 行 二次开发来 解 决该问题[1]。
Visual Basic(以下简称 VB)是 Microsoft公司推出的面向对象的可视化编程工具。它作为二次开发工具,具有语法简单、功能强大、调试方便等特点。此外,AutoCAD 自 R14 版本起, 加入了 ActiveX 自动化服务功能, 而 VB又是最为常用的支持ActiveX 技术的开发工具, 以它作为开 发 工具,使AutoCAD 与其他 Windows 程序的数据共享变得非常 容易[2]。
用 VB 语言进行 AutoCAD 二次开发, 首先要将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 上,从 而 实 现 在 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 二次开发中的应用。 本例中所涉及的程序 和 图 形 都 在 VB6.0 和AutoCAD2006 中得以验证。
2.1程 序主界面的 创 建[3-4]
在 VB 对 AutoCAD 的二次开发中,程序的界面至关重要,可以让用户直观地将齿轮的各个参数输入,同时也能给用户提供一些技术帮助。 这里首先创建了一个名为“创建三维齿轮”的窗体,然后在“确定”按钮的 click 事件里创建齿图 2 三维齿轮参数窗体轮程序的控件,见图 2所示。
图2 三维齿轮参数窗体
其中 Function 齿轮和 Function ACos 两个函数在窗体的 Load 事件里。
2.2齿 轮的创建方 法 及过程[2,5]
齿轮的创建,首先创建一个圆柱体(半径就是齿顶圆半径),再创建齿轮的三维轴孔及键槽,然后做布尔减(Bool acSubtraction)运算,得到无齿的 齿轮模型。 再由齿轮的参数计算得出铣刀参数,用旋转的方法创建出铣刀。最后由铣刀和齿轮模型做动画,动画是用布尔减的方法切齿创建,得到完整的三维齿轮。程序的主流程图如图3所示。
图3 程序主流程
2.2.1齿轮模型的创建方法及过程
齿轮模型的创建共分四个步骤:
(1)先用 Addcircle 方法创 建 一个半 径 为齿顶圆半径的圆。
(2)用 Addlight Weight PolyLine 方法创建轴孔及键,参数由窗体上对应的文本框输入。
(3)用 AddRegion 方法创建轴孔及键的面域,然后分别拉伸,其高度为齿宽,拉伸锥角为 0。
(4)将 轴孔和 键 做布尔 加 (Bool acUion),再与第(1)步做的齿轮圆柱体做布尔减运算,得到齿轮模型。 由于篇幅原因,详细程序不再列出。
'创建分度圆,齿顶圆,齿根圆,轴孔
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铣刀模型创建方法及过程
齿轮铣刀是由一个回转面旋转形成的铣刀盘模型,利用布尔减运算切出刀齿。 用齿轮铣刀铣齿时,铣刀的各参数应与齿轮的各参数有相配合,这样才能保证加工出来的齿轮是符合要求的。因此,在设计铣刀时要根据齿轮的各参数来确定铣刀。具体创建方法如下:
(1)铣刀回转面创建
铣刀回转面的数学模型如图4, 先创建右半部分,再镜像得到左半部分。 各个点之间的曲线创建思路如下:
图4 铣刀回转面的模型
①创建右半部分曲线: 第 0、1、2 点用 Addlight Weight PolyLine 方法创建轻便多义线, 曲线上第0 点为齿根圆上点,第 2 点为齿轮圆上点,第 1 点为介于 0 点与 2 点之间的点,0、1、2 点构成齿轮根部的过渡曲线,使弯曲度由指定第一点凸度为 0.14 实现;第 2、3、4 点 ,用 Addspline 方 法创建样条曲 线,其中第 3点为齿轮分度圆上点,第 4点为齿顶圆上的点;第 4、5、6 用 Weight PolyLine 方法创建轻便多义线,第 5、6 由铣刀本身确定,无具体要求。
②用 mirror 方法镜像右半部分曲线,得到左半部分曲线,镜像轴为Y轴。
(2)铣刀盘三维实体的创建
①将第(1)步作好的曲线创建为面域;
②用 Addrevoledsolid 方 法 将 第①步 作 好的 面域进行面域旋转, 角度为 6.29 弧度, 旋转轴为 XY平面内平行于直线 5-6 的一条直线。
(3)铣刀成形
先 用 Addbox 方 法 创 建 一 个 长 方 体 , 再 用ArrayOolar方法将其圆形阵列,数量为铣刀齿数,然后把阵列得到的立方体与铣刀盘做布尔减得到有齿的铣刀。
2.2.3动 画切齿的方 法 及过程[2,4-6]
由齿轮模型形成齿轮,是由铣刀的旋转、铣刀与齿轮模型的移动,作布尔减模拟动画得到的。 实际上,由于齿轮模型与铣刀相对运动时,不可能做成完全连续的,故在做布尔减运算时还要一个专门与它作布尔减的铣刀模型(由铣刀面域拉伸而成),为使动画逼真,将铣刀模型隐藏。
(1)用 AddExtrudedsolid 方法将创建旋转铣刀的面域拉伸,高度为齿宽,锥角为 0 度。
(2)用 Delete 方法将除齿轮,铣刀,铣刀拉伸的实体外的实体删除。
(3)用 Do…Loop 做一个循环,在循环体内用move 方法让铣刀沿 z轴上下移动, 距离为齿宽,同时用 Rotate3d 方法饶自身轴旋转一定角度,同样用Rotate 方法将齿轮旋转,角度为 360/齿数 *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)
'由循环做铣刀移动
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 程序执行过程中产生的动画图如图 5所示,执行的最后结果如图6所示。
图5 加工动画
图6 仿真加工的结果
本文利用 VB 对 AutoCAD 进行二次开发,通过一实例说明了进行二次开发的理论和方法,解决了具有一般性复杂轮廓曲线的几何造型问题。VB是Windows 下一个优秀的开发工具, 采用 ActiveX 技术,在 Windows 多任务环境下,将多个应用程序集成在一起来实现一个综合的工程应用,这是个很好的选择。
[1]岳 震.基 于 VB 的 AutoCAD 二 次 开 发[J].机 械 设 计 与 制 造 ,2002(1):25-26.
[2]张 晋 西.Visual Basic 与 Auto CAD 二 次 开 发 [M].北 京 :清 华大学出版社,2002.
[3]刘 瑞 新 ,汪 远 征.Visual Basic 程 序 设 计 教 程[M].北 京:机 械工业出版社,2000.
[4]申 永胜.机械 原理教 程[M].北京 :清华大 学出 版社,1999.
[5]张 国 宝 .AutoCAD Visual Basic 开 发 技 术[M].北 京 : 科 学 出版社,2000.
[6]郭 招娣.VB.NET 和 VB6.0 的 二次开 发[J].CAD/CAM 与制造业信息化,2005(1):29.
(责任编辑梁红艳)
H 26.2
:A
:1671-9123(2014)03-0117-04
2014-05-26
燕必成(1975-),男,甘肃天水人,浙江机电职业技术学院机械工程学院教师。