基于AutoCAD-VBA的对象缩放操作方法探讨

2017-05-12 08:06
湖州职业技术学院学报 2017年1期
关键词:角点命令菜单

吕 岚

(陕西铁路工程职业技术学院 电气工程系, 陕西 渭南 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

猜你喜欢
角点命令菜单
只听主人的命令
中国新年菜单
基于FAST角点检测算法上对Y型与X型角点的检测
移防命令下达后
本月菜单
基于边缘的角点分类和描述算法
基于圆环模板的改进Harris角点检测算法
这是人民的命令
一个“公海龟”的求偶菜单
一种无人机影像分块的亚像素角点快速检测算法