吕 岚
(陕西铁路工程职业技术学院 电气工程系, 陕西 渭南 714099)
基于AutoCAD-VBA的对象缩放操作方法探讨
吕 岚
(陕西铁路工程职业技术学院 电气工程系, 陕西 渭南 714099)
VBA是一个AutoCAD应用程序集成开发环境,是一种面向对象的可视化结构编程语言,被广泛应用于各领域的实际工作中。AutoCAD中可以通过菜单、工具栏、命令等多种方式完成对图形的缩放,但都不能一步完成缩放效果。通过VBA对AutoCAD进行二次开发,设计了一个对图形实现一步缩放的应用程序,提高了工作效率,实际应用效果良好。
AutoCAD; VBA; 图形; 缩放
在AutoCAD中,经常会对图形进行缩放操作,可以通过命令、菜单或工具栏等多种方法实现[1]14。ZOOM命令和Scale命令都称作为缩放命令,但两者也有区别。Zoom命令叫做视图缩放命令,在CAD中用来绘图和观察图形的是一个窗口,这就相当于一个相机的镜头,Zoom就相当于镜头的拉近和拉远,虽然看到所有图形显示的大小变了,但图形的实际尺寸不会发生任何变化。Scale命令叫做图形的缩放命令,他会直接改变图形的大小,而且只会改变被选中图形的大小[2]450。CAD的Scale命令只提供一个比例设置,也就是各轴向只能等比例缩放。并且用scale命令对选定图形进行缩放时,其标注是不会同步进行改变的。通过选择“视图”下的“缩放”子菜单,也可以实现缩放,但无论是通过命令还是菜单选项进行缩放,一般都需要执行多步操作,才能实现想要的效果。本文设计的程序,能够根据用户选择所要查看的对象进行缩放操作,无论选择对象的范围是否大于当前的视口,都能够一次完成缩放操作。
缩放操作的目的是为了在图形窗口中显示要观察的对象,用户选择所要观察的对象之后,可以获得这些对象的限制框,根据限制框的大小确定缩放的角点,进行窗口缩放的操作。本程序的关键技术在于获取选择集内所有对象的限制框角点,这里采用的方法是遍历选择集内的对象,比较所有对象的限制框角点,获得其中最上侧、最下侧、最左侧、最右侧的几个角点。获得这4个关键角点之后,就可以使用这4个角点的X、Y坐标值,计算出选择集的限制框角点。
(1)在AutoCAD 2016中,打开【VBA管理器】对话框,创建一个新工程,保存在适当的位置,进入VBA集成开发环境。
(2)选择【插入/模块】菜单项,向程序中添加一个标准模块,在其中添加宏的代码:
Public Sub ObjZoom()
On Error Resume Next
Dim SSet As AcadSelectionSet
If Not IsNull(ThisDrawing.SelectionSets.Item(“this”)) Then
Set SSet = ThisDrawing.SelectionSets.Item(“this”)
SSet.Delete
End If
Set SSet = ThisDrawing.SelectionSets.Add(“this”)
SSet.SelectOnScreen
Dim ptArr() As Variant
Dim count As Integer
count = SSet.count
ReDimptArr(count - 1)
If count = 0 Then
MsgBox “未选择任何对象!”, vbCritical
Exit Sub
End If
Dim objEnt As AcadEntity
Dim ptTemp As Variant
DimiAs Integer
i= 0
For Each objEnt In SSet
objEnt.GetBoundingBoxptArr(i), ptTemp
i=i+ 1
Next
Dim ptLeft, ptBottom
ptLeft = GetLimitPt(ptArr, 3)
ptBottom = GetLimitPt(ptArr, 2)
i= 0
For Each objEnt In SSet
objEnt.GetBoundingBoxptTemp, ptArr(i)
i=i+ 1
Next
Dim ptRight, ptTop
ptRight = GetLimitPt(ptArr, 4)
ptTop = GetLimitPt(ptArr, 1)
Dim ptMin(0 To 2) As Double, ptMax(0 To 2) As Double
ptMin(0) = ptLeft(0): ptMin(1) = ptBottom(1): ptMin(2) = 0
ptMax(0) = ptRight(0): ptMax(1) = ptTop(1): ptMax(2) = 0
'ThisDrawing.ModelSpace.AddLineptMin, ptMax
ptMin(0) = ptLeft(0) - (ptRight(0) - ptLeft(0)) / 8
ptMin(1) = ptBottom(1) - (ptTop(1) - ptBottom(1)) / 8
ptMax(0) = ptRight(0) + (ptRight(0) - ptLeft(0)) / 8
ptMax(1) = ptTop(1) + (ptTop(1) - ptBottom(1)) / 8
ZoomWindowptMin, ptMax
'ThisDrawing.ApplicationZoomWindowptMin, ptMax
SSet.Delete
End Sub
(3)该程序中最关键的代码是计算选择集内所有对象的限制框角点,GetLimitPt函数用来完成这个功能,其实现代码为:
Public Function GetLimitPt(ByRefptArr() As Variant, ByValtypeCal As Integer) As Variant
Dim count As Integer
Dim dblTemp As Double
count = UBound(ptArr)
DimiAs Integer
Dim num As Integer
Fori= 0 To count
Select Case typeCal
Case 1
Ifi= 0 Then dblTemp = ptArr(i)(1)
dblTemp = MaxDouble(dblTemp, ptArr(i)(1))
If dblTemp = ptArr(i)(1) Then
num =i
End If
Case 2
Ifi= 0 Then dblTemp = ptArr(i)(1)
dblTemp = MinDouble(dblTemp, ptArr(i)(1))
If dblTemp = ptArr(i)(1) Then
num =i
End If
Case 3
Ifi= 0 Then dblTemp = ptArr(i)(0)
dblTemp = MinDouble(dblTemp, ptArr(i)(0))
If dblTemp = ptArr(i)(0) Then
num =i
End If
Case 4
Ifi= 0 Then dblTemp = ptArr(i)(0)
dblTemp = MaxDouble(dblTemp, ptArr(i)(0))
If dblTemp = ptArr(i)(0) Then
num =i
End If
End Select
Nexti
GetLimitPt = ptArr(num)
End Function
GetLimitPt这个函数的功能和数据结构中的冒泡排序类似,将数组中第一个元素的值与第二个比较,取出较大的值,再与下一个比较,同样取出最大值,以此类推[3]137。
(1)在AutoCAD 2016中,打开一幅图形,如图1所示。(2)在VBA集成开发环境中,按下F5键运行程序,系统在命令行中给出提示“选择对象”,如图2所示。(3)选择所要显示的图形对象,按下Enter键完成选择,所得结果如图3所示。
图1 图形初始状态 图2 程序运行状态 图3 图形缩放后结果
通过这个程序实现了在CAD中对图形的缩放功能,在实际使用过程中,程序运行稳定,提高了工作效率,效果良好。但是,这个批量文字替换程序也有一些不足之处,如:对多个图形中的特定对象不能具体进行设置和选择,同时,对不同行业中有特定需求和实际问题的用户,针对性不是很强[4]144-145。今后,可以通过一些程序软件的嵌入和二次开发,来解决本行业个性化应用问题。
[1] 王进明,安荣.Auto CAD中对象缩放命令的应用[J].煤炭技术,2011(05).
[2] 高 虎.Auto CAD200X图形缩放和比例设置[J].科技信息,2009(33).
[3] 张 帆,郑立楷,王华杰.AutoCAD VBA开发精彩实例教程[M].北京:清华大学出版社,2004.
[4] 杨瑞兰,刘艺柱.基于AutoCAD缩放命令应用的研究[J].制造业自动化,2009(9).
Study of Operation Method of Object Scaling Based on AutoCAD-VBA
LYU Lan
(Department of Electrical Engineering, Shanxi Railway Institute, Weinan 714000, China)
Visual Basic for applications is an integrated development environment in AutoCAD application, also is an object-oriented visual structure programming language, which is widely used in various fields of practical work. AutoCAD completes the scaling of the graphics through a variety of ways, such as through the menu, toolbar, command, etc. But none of them can be completed in one step. Using VBA application to the secondary development of Auto-CAD, designed the application of operation method of object scaling, it is proved that this application works more efficiency.
Autodesk Computer Aided Dided Design; Visual Basic for Application; graphic; scaling
2016-12-28
吕 岚(1982-),女,陕西长安人,讲师,计算机科学与技术硕士,主要从事计算机科学与技术研究。
TP391.72
A
1672-2388(2017)01-0086-03