AutoCAD VBA二次开发
2016-11-06 by:CAE仿真在线 来源:互联网
AutoCAD VBA工程是由许多程序模块、类模块和窗体组成的集合,他们同时运行即可完成指定的功能。VBA工程可以保存于AutoCAD图形文件内部,称为内嵌VBA工程;亦可保存为独立的工程,称为全局VBA工程,以*.dvb文件格式保存。
对于内嵌VBA工程,当打开包含该工程的AutoCAD图形文件时,它将被自动加载。因此,在运行内嵌VBA工程程序之前,其用户不须在文件夹中去寻找工程文件并加载该工程,使得工程管理更加方便。
全局VBA工程的功能较多。全局工程可在任何AutoCAD图形中运行,亦可在工程中打开或关闭AutoCAD图形。全局工程容易与其他用户共享,且可制作成共享的宏[2]资源库,因此应用VBA开发通用应用程序时,应将其保存为全局工程。但全局工程也有一些缺点,它不会随AutoCAD图形文件的打开而自动加载。所以,用户在运行全局工程程序之前须要知道哪个工程文件中包含了所需的宏,然后加载该工程文件,最后才能执行相应的宏。
2.2 VBA管理器
在当前AutoCAD进程中加载的所有VBA工程均可用VBA管理器来管理,亦可用它来新建、保存、加载、卸载、嵌入或提取工程。“VBA管理器”对话框如图1所示。
启动“VBA管理器”对话框的命令调用方法为:
命令行:VBARUN
菜单栏:【工具】→【宏】→【VBA管理器】
与VBA应用程序开发、管理相关的下拉菜单如图2所示。
图1 “VBA管理器”对话框
图2 与VBA应用程序开发、管理相关的下拉菜单
1. 创建新VBA工程
创建新VBA工程的步骤如下:
(1) 打开“VBA管理器”对话框。
(2) 选择“新建”。
新工程将以默认的名称“ACADProject”创建。如要更改工程名称,必须进入“Visual Basic编辑器”中,在“工程属性”窗口中更名。其操作方法步骤如下:
(1) 单击“VBA管理器”中的“Visual Basic编辑器”按钮(如图1所示)或用菜单选择“Visual Basic编辑器”(如图2所示),打开“Microsoft Visual Basic”,如图3所示。
(2) 在VB的“工程资源管理器”选中“ACADProject(Global1)”,单击右键,在弹出菜单中选择“ACADProject属性…”选项,打开“工程属性”对话框,在“工程名称”中输入用户欲更改的名称,如图4所示。
图3 Visual Basic编辑器
图4 “工程属性”对话框
2. 保存新VBA工程
每次保存图形文件时,都将保存其内嵌工程。而全局工程必须使用VBA管理器或VB编辑器来保存。使用VBA管理器保存工程的步骤:
(1) 打开VBA管理器,并选择要保存的工程。
(2) 选择“另存为”,将会打开“另存为”对话框。
(3) 选择用于保存该工程的文件的名称。
(4) 单击“保存”按钮。
3. 加载VBA工程
将工程加载到AutoCAD图形中时,所有的公用子程序(也称为宏)均为可用程序。每次打开图形时,内嵌在图形中的工程就会被自动加载,而以*.dvb文件格式保存的全局工程必须明确加载方能运行。
每次加载工程时,都将自动加载此工程引用的任何其他工程。此外,AutoCAD在启动时会自动加载任何名为acad.dvb的工程文件。
加载已有VBA工程文件的步骤如下:
(1) 在“VBA管理器”对话框中单击“加载”按钮,弹出“打开VBA工程”对话框,如图5所示。
图5 “打开VBA工程”对话框
(2) 在“打开VBA工程”对话框中选择欲加载的工程文件。
(3) 单击“打开”按钮,再单击“启用宏”按钮。打开VB编辑器即可查看、编辑或运行该程序。
注意:用户在加载工程时,均会显示“禁用宏”或“启用宏”的选项提示,作为防范病毒的提示,如图6所示。若启用了带病毒的宏,程序中的病毒会一并运行;若禁用该宏,工程仍可被调用,但不能运行该工程中的任何程序。
图6 工程加载防范病毒提示提示
4. 卸载VBA工程
卸载工程可释放内存,并使已加载工程的列表保持在易于管理的长度。但不能卸载内嵌工程或被其他已加载工程所引用的工程。
卸载VBA的步骤如下:
(1) 在“VBA管理器”对话框中选择欲卸载的工程。
(2) 单击“卸载”按钮。
2.3 VBA IDE[3]
在AutoCAD中加载VBA工程后,即可使用VBA交互式开发环境IDE来运行、调试程序或删除错误,亦可在IDE中继续编辑该工程的程序代码、窗体和部件引用等元素。
1. 打开VBA IDE
可用以下两种方法打开VBA IDE:
命令行:VBAIDE
菜单栏:【工具】→【宏】→【Visual Basic编辑器】
VBA IDE界面如图7所示,在其中可对所有已加载的工程进行编辑。
图7 VBA IDE界面
2. 工程信息
在VBA IDE中,“工程”窗口显示的内容包括:所有已加载的VBA工程,这些工程所包含的程序代码、类别、窗体、与工程相关的文件,本工程所引用的其他VBA工程,这些工程所在的位置(路径)等,如图8所示。
“工程”窗口的顶部为包含3个按钮的工具条,通过切换按钮可显示不同的工程元素。选中工程模块中的“窗体”后,单击“查看代码”按钮可显示该工程模块的程序代码;单击“查看对象”按钮可显示该工程元素对象的外观,如窗体界面。
“工程”窗口在默认状态下是打开的。若不可见,可在IDE中用菜单操作“【视图】→【工程资源管理器】”来打开。
图8 “工程”窗口
3. 工程元素
每个工程均由若干不同的元素构成,包含对象、窗体、标准模块、类模块和引用等。
(1) 对象 对象是工程中的基本运行实体。VBA中的对象可分为两类,一类是由系统设计好,可直接使用或对其进行操作的对象;另一类是用户定义,可用程序建立用户自己的对象。对象是具有特殊属性(数据)和行为方式(方法)的实体,它由属性、事件和方法这3个重要方面构成。
(2) 窗体模块 窗体模块分为两部分,一部分是作为用户界面的窗体,另一部分是执行具体操作的代码。窗体是放置其他对象的容器,常用于创建工程的自定义交互式对话框。
(3) 标准模块 又叫程序代码模块,简称模块。该模块完全由代码组成,这些代码不与具体的窗体或控件相关联。
(4) 类模块 类模块既包含代码又包含数据,每个类模块定义一个类。可在窗体模块中定义类的对象,调用类模块中的过程。
4. 添加新元素
用户可在工程中添加新元素,比如插入新的窗体、模块或类模块等。添加新元素后,用户可修改元素的性质(例如元素名称)和编写程序代码。
用户命名新元素时,应遵循规范的命名惯例,即“见名知义”,提高程序的可读性。
在工程中添加新元素的步骤如下:
(1) 在VBA IDE的“工程”窗口中选择要添加元素的工程。
(2) 从“插入”菜单中选择“添加用户窗体”、“添加模块”或“添加类模块”选项,将新元素添加到该工程中。
新的元素加入到工程后,会以默认的属性出现在“工程”窗口中。
5. 编辑元素
元素的编辑包括对属性、代码和对象的编辑等。
(1) 元素属性编辑 在“工程”窗口中选取被编辑的元素,“属性”窗口中将显示其属性,如图9所示。将光标定位于“属性”窗口右边的属性值栏,即可修改为需要的属性值。
(2) 代码编辑 在“工程”窗口中选取被编辑的元素(窗体、模块或类模块),再单击窗口顶部的“查看代码”按钮,即可打开程序代码窗口并编辑程序代码,如图10所示。
图9 “属性”窗口
图10 “程序代码”窗口
(3) 窗体编辑 在“工程”窗口中选取被编辑的窗体模块,再单击窗口顶部的“查看对象”按钮,即可打开窗体窗口和控件工具箱,如图11所示。用户可在该窗口中增删对象、编辑对象的属性或编辑与窗体关联的程序代码。双击窗体窗口中的控件,可在程序代码窗口中显示与该控件相关的程序代码。
图11 “窗体”窗口
VBA二次开发实例
在学习了AutoCAD VBA基础知识后,接下来介绍一个简单实例。通过该实例的学习,我们可以初步掌握开发VBA应用程序的一般过程。
训练1 应用VBA编写输入起点和终点坐标绘制直线的参数化程序。
应用VBA程序绘制直线的方法为:AddLine(StartPoint, EndPoint),其中StartPoint, EndPoint为起点、终点坐标,必须为3元素列表(即数组)。
操作步骤如下:
(1) 打开VBA管理器,单击“新建”按钮,添加名称为“ACADProject”、位置为“Global2”的新工程,如图12所示。选中该工程后,再单击“另存为”将之保存于D盘,名称为“DrawLine.dvb”。
图12 VBA管理器
(2) 打开VBA IDE,在“插入”菜单中选择“用户窗体”插入新窗体。
(3) 打开“工具箱”(如图13所示),点击“框架”按钮,在窗体中建立两个框架,分别用于起点和终点坐标的输入;再点击“标签”和“文字框”按钮,在两个框架中分别建立用于输入起点和终点坐标的标签和对话框;再点击“命令按钮”按钮,在用户窗体中建立“确定”和“结束”按钮。
图13 “用户窗体”编辑窗口
(4) 打开“属性窗口”(如图14所示),在“用户窗体”中依次点击控件,在其“属性窗口”中设置相应属性。按表1所示设置窗体及控件的相应属性。
图14 “属性”设置窗口
表1 绘制直线的窗体及控件属性设置
窗体及控件名称 |
属性 |
设置值 |
作用 |
窗体 |
Name |
frmLine |
|
Caption |
参数化绘直线练习 |
|
|
框架 |
Name |
fraSP,fraEP |
|
Caption |
起点坐标,终点坐标 |
|
|
标签 |
Name |
lblXS,lblYS,lblZS, lblXE,lblYE,lblZE |
|
Caption |
x_start,y_start,z_start, x_end,y_end,z_end |
提示输入直线起点、终点坐标值 |
|
文本框 |
Name |
txtXS,txtYS,txtZS, txtXE,txtYE,txtZE |
|
Text |
10,10,0,40,40,40 |
输入直线起点、终点坐标值 |
|
命令按钮 |
Name |
cmdOK_Click,cmdEnd_Click |
|
Caption |
确定,结束 |
点击按钮 |
(5) 双击“确定”按钮打开“代码窗口”,在行Private Sub cmdOK_Click( )和行End Sub之间输入以下代码:
ThisDrawing.Application.Documents.Add ’ 打开新图形
Dim StartPoint(0 To 2) As Double ’ 定义起点坐标
Dim EndPoint(0 To 2) As Double ’ 定义终点坐标
StartPoint(0) = txtXS ’ 提取起点x坐标
StartPoint(1) = txtYS ’ 提取起点y坐标
StartPoint(2) = txtZS ’ 提取起点z坐标
EndPoint(0) = txtXE ’ 提取终点x坐标
EndPoint(1) = txtYE ’ 提取终点y坐标
EndPoint(2) = txtZE ’ 提取终点z坐标
Dim LineObj As AcadLine ’ 定义Line对象
’ 设置Line对象
Set LineObj = ThisDrawing.ModelSpace.AddLine (StartPoint, EndPoint)
ThisDrawing.SaveAs("D:\Line_Ex.dwg") ’ 保存图形
(6) 双击“结束”按钮打开“代码窗口”,在行Private Sub cmdEnd_Click( )和行End Sub之间输入代码“End”,用于结束程序。
步骤(5)、(6)输入的代码如图15所示。
(7) 从VBA IDE的“运行”菜单中选择“运行子程序/用户窗体”选项或按F5键来运行程序。
(8) 当程序运行完时,AutoCAD应用程序将置于最前。此时可在图形中看到直线,且图形的文件名称为Line_Ex.dwg。
图15 实例的代码窗口
注:VBA中的出错处理方法
在VB和VBA中,使用On Error语句来捕获运行时错误。此语句为系统设置精确的捕获。当错误发生时,此语句会自动转到专门编写的错误处理程序,系统的默认错误处理则被略过。
On Error 语句有三种形式:
(1) On Error Resume Next
(2) On Error GoTo Label
(3) On Error GoTo 0
当希望忽略错误时,可以使用On Error Resume Next语句。此语句捕获错误但是不会显示错误信息或者终止程序,而是移到下一行代码继续执行。例如,如果希望创建子例程来遍历模型空间并修改每个图元的颜色,则在试图对锁定图层上的图元着色时AutoCAD将会抛出错误。这时不需要终止过程,而只需要跳过锁定图层上的图元并继续处理其余的图元。On Error Resume Next语句就可以完成这个过程。
当希望编写明确的处理程序时,可以使用On Error GoTo Flag语句(Flag为标记)。此语句捕获错误但不会显示错误信息或者终止程序,而是跳到代码中的特定位置。然后代码可以使用适当的方式来响应错误。例如,可以扩充上一个样例,以显示包含锁定图层上每个图元句柄的消息。
训练2 应用VBA编写输入圆心、半径、起始角和终止角绘制圆弧的参数化程序。
应用VBA程序绘制样条曲线的方法为:AddArc(Center, Radius, StartAngle, EndAngle),其中,Center为圆心坐标3元素列表,Radius为圆弧半径,StartAngle, EndAngle为圆弧起始、终止角(弧度)。
按训练1的方法和步骤设计参数化绘制圆弧的VBA程序,其步骤依次为:打开VBA IDE、插入用户窗体并设置属性、插入控件并设置属性、编写代码、调试运行程序、保存工程。参数化绘制圆弧的窗体如图16所示,并按表2所示设置窗体及控件的相应属性。
图16 绘制圆弧的窗体
表2 绘制圆弧的窗体及控件属性设置
窗体及控件名称 |
属性 |
设置值 |
作用 |
窗体 |
Name |
frmArc |
|
Caption |
参数化绘圆弧练习 |
|
|
标签 |
Name |
lblXCen,lblYCen,lblZCen, lblArcR,lblStaAng,lblEndAng, lblSAUnit,lblEAUnit |
|
Caption |
x_CenPoint,y_CenPoint,z_CenPoint, ArcR,StaAng,EndAng, °(角度单位),° |
提示输入圆心坐标、半径、角度值及角度单位 |
|
文本框 |
Name |
txtXCen,txtYCen,txtZCen, txtRadius,txtStaAng,txtEndAng |
|
Text |
50,70,0,30,20,160 |
输入圆心坐标、圆弧半径及圆弧起始、终止角度值 |
|
命令按钮 |
Name |
cmdOK_Click,cmdEnd_Click |
|
Caption |
确定,结束 |
点击按钮 |
参数化绘制圆弧的主要代码如下:
Private Sub cmdOK_Click( )
Dim pi As Double
pi = 4 * Atn(1) ’ 定义常数π
ThisDrawing.Application.Documents.Add ’ 打开新图形
Dim ArcCenter(0 To 2) As Double ’ 定义圆弧中心
Dim ArcRadius As Double ’ 定义圆弧半径
Dim StartAngle As Double ’ 定义圆弧起始角
Dim EndAngle As Double ’ 定义圆弧终止角
ArcCenter(0) = txtXCen.Text ’ 提取圆弧中心X坐标
ArcCenter(1) = txtYCen.Text ’ 提取圆弧中心Y坐标
ArcCenter(2) = txtZCen.Text ’ 提取圆弧中心Z坐标
ArcRadius = txtRadius.Text ’ 提取圆弧半径
StartAngle = txtStaAng.Text * pi / 180 ’ 提取圆弧起始角并转换为弧度
EndAngle = txtEndAng.Text * pi / 180 ’ 提取圆弧终止角并转换为弧度
Dim ArcObj As AcadArc ’ 定义Arc对象
’ 设置Arc对象
Set ArcObj = ThisDrawing.ModelSpace.AddArc(ArcCenter, ArcRadius, StartAngle, EndAngle)
ThisDrawing.SaveAs (“D:\Arc_Ex.dwg”) ’ 保存图形
End Sub
训练3 应用VBA编写输入基圆半径和展角上限绘制渐开线的参数化程序。
渐开线为常用工程曲线,在机械设计基础或机械原理教材中有详细介绍。在VBA中,可采用样条曲线拟合的方法绘制渐开线。
在如图17所示的直角坐标系Oxy中,渐开线上点K的坐标为[7]187
式中,
—用弧度表示的渐开线上K点对应的展角,且
。
渐开线的切线方向可用其斜率(导数)表示,即
(
) (2)
图17 直角坐标系下的渐开线
应用VBA程序绘制样条曲线的方法为:AddSpline(PointsArray, StartTangent, EndTangent),其中,PointsArray为样条曲线(渐开线)拟合点的3维坐标组成的列表(即数组,必须为3的倍数),StartTangent,EndTangent为样条曲线的起点和终点切向向量(必需为3元素列表,切向必需与曲线的走向一致)[8]。起点的切向竖直向上[7]181-183,可取(0, 1, 0);根据式(2)可知终点的切向为
可根据精度要求将所绘渐开线的展角上限
,
(j=0, 1, 2, …, J) (3)
再用式(1)计算点K的坐标(xKj, yKj)。
图18 绘制渐开线的窗体
绘制渐开线及基圆的窗体如图18所示,程序如下:
Private Sub cmdOK_Click()
ThisDrawing.Application.Documents.Add
pi = 4 * Atn(1) ’ 定义常数π
Dim rb As Double ’ 定义基圆半径
Dim theta0 As Double ’ 定义渐开线展角
Dim InvPoint(0 To 32) As Double ’ 定义拟合点坐标
Dim SPtan(0 To 2) As Double ’ 定义起点切线方向
Dim EPtan(0 To 2) As Double ’ 定义终点切线方向
Dim InvObj As AcadSpline ’ 定义Spline对象
rb = txtRb.Text
theta0 = txtTheta0.Text * pi / 180 ’ 将角度转换为弧度
delta_theta = theta0 / 10
For j = 0 To 10
theta = j * delta_theta
InvPoint(j * 3) = rb * (Sin(theta) - theta * Cos(theta))
InvPoint(j * 3 + 1) = rb * (Cos(theta) + theta * Sin(theta))
InvPoint(j * 3 + 2) = 0
Next j
SPtan(0) = 0: SPtan(1) = 1: SPtan(2) = 0
EPtan(0) = 1: EPtan(1) = 1 / Tan(theta0): EPtan(2) = 0
’ 设置Spline对象
Set InvObj = ThisDrawing.ModelSpace.AddSpline(InvPoint, SPtan, EPtan)
’ 绘制基圆
Dim CirObj As AcadCircle ’ 定义Circle对象
Dim CenPoint(0 To 2) As Double ’ 定义圆心坐标
CenPoint(0) = 0: CenPoint(1) = 0: CenPoint(2) = 0
’ 设置Circle对象
Set CirObj = ThisDrawing.ModelSpace.AddCircle(CenPoint, rb)
ThisDrawing.SaveAs (“D:\Draw_Inv.dwg”)
End Sub
参考文献
[1] 宋宪一. 计算机辅助工程绘图[M]. 北京: 机械工业出版社, 2002.
[2] 姜勇. AutoCAD中文版机械制图基础培训教程[M]. 北京: 人民邮电出版社, 2005.
[3] 谢泽学, 吴京霞, 谢婧. AutoCAD2004简明教程[M]. 北京: 科学出版社, 2006.
[4] 刘力, 王冰. 机械制图[M]. 北京: 高等教育出版社, 2000.
[5] 刘小年, 刘振魁. 机械制图[M]. 北京: 高等教育出版社, 2000.
[6] 李凤华. AutoCAD 2002/2000 VBA开发指南[M]. 北京: 清华大学出版社, 2001.
[7] 孙桓, 傅则绍. 机械原理[M]. 第4版. 北京: 高等教育出版社, 1993.
[8] 车林仙, 何兵. 基于AutoCAD的摆线型转子泵实体参数化造型[J]. 现代制造工程, 2005(8): 94-96.
[1] VBA为Visual Basic for Application的缩写。AutoCAD中的VBA是指必须依赖于已有的AutoCAD应用程序才能运行的Visual Basic程序。
[2] 宏是一个可执行的应用子程序,每个VBA工程至少包含一个宏。
[3] IDE为Integrated development environment的缩写,即集成开发环境。
相关标签搜索:AutoCAD VBA二次开发 AutoCAD培训 AutoCAD培训课程 AutoCAD图纸设计 AutoCAD在线视频 AutoCAD技术学习教程 AutoCAD软件教程 AutoCAD资料下载 Fluent、CFX流体分析 HFSS电磁分析 Ansys培训 Abaqus培训 Autoform培训