呂 嵐
(陜西鐵路工程職業(yè)技術(shù)學院 電氣工程系, 陜西 渭南 714099)
基于AutoCAD-VBA的對象縮放操作方法探討
呂 嵐
(陜西鐵路工程職業(yè)技術(shù)學院 電氣工程系, 陜西 渭南 714099)
VBA是一個AutoCAD應用程序集成開發(fā)環(huán)境,是一種面向?qū)ο蟮目梢暬Y(jié)構(gòu)編程語言,被廣泛應用于各領(lǐng)域的實際工作中。AutoCAD中可以通過菜單、工具欄、命令等多種方式完成對圖形的縮放,但都不能一步完成縮放效果。通過VBA對AutoCAD進行二次開發(fā),設計了一個對圖形實現(xiàn)一步縮放的應用程序,提高了工作效率,實際應用效果良好。
AutoCAD; VBA; 圖形; 縮放
在AutoCAD中,經(jīng)常會對圖形進行縮放操作,可以通過命令、菜單或工具欄等多種方法實現(xiàn)[1]14。ZOOM命令和Scale命令都稱作為縮放命令,但兩者也有區(qū)別。Zoom命令叫做視圖縮放命令,在CAD中用來繪圖和觀察圖形的是一個窗口,這就相當于一個相機的鏡頭,Zoom就相當于鏡頭的拉近和拉遠,雖然看到所有圖形顯示的大小變了,但圖形的實際尺寸不會發(fā)生任何變化。Scale命令叫做圖形的縮放命令,他會直接改變圖形的大小,而且只會改變被選中圖形的大小[2]450。CAD的Scale命令只提供一個比例設置,也就是各軸向只能等比例縮放。并且用scale命令對選定圖形進行縮放時,其標注是不會同步進行改變的。通過選擇“視圖”下的“縮放”子菜單,也可以實現(xiàn)縮放,但無論是通過命令還是菜單選項進行縮放,一般都需要執(zhí)行多步操作,才能實現(xiàn)想要的效果。本文設計的程序,能夠根據(jù)用戶選擇所要查看的對象進行縮放操作,無論選擇對象的范圍是否大于當前的視口,都能夠一次完成縮放操作。
縮放操作的目的是為了在圖形窗口中顯示要觀察的對象,用戶選擇所要觀察的對象之后,可以獲得這些對象的限制框,根據(jù)限制框的大小確定縮放的角點,進行窗口縮放的操作。本程序的關(guān)鍵技術(shù)在于獲取選擇集內(nèi)所有對象的限制框角點,這里采用的方法是遍歷選擇集內(nèi)的對象,比較所有對象的限制框角點,獲得其中最上側(cè)、最下側(cè)、最左側(cè)、最右側(cè)的幾個角點。獲得這4個關(guān)鍵角點之后,就可以使用這4個角點的X、Y坐標值,計算出選擇集的限制框角點。
(1)在AutoCAD 2016中,打開【VBA管理器】對話框,創(chuàng)建一個新工程,保存在適當?shù)奈恢茫M入VBA集成開發(fā)環(huán)境。
(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)該程序中最關(guān)鍵的代碼是計算選擇集內(nèi)所有對象的限制框角點,GetLimitPt函數(shù)用來完成這個功能,其實現(xiàn)代碼為:
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這個函數(shù)的功能和數(shù)據(jù)結(jié)構(gòu)中的冒泡排序類似,將數(shù)組中第一個元素的值與第二個比較,取出較大的值,再與下一個比較,同樣取出最大值,以此類推[3]137。
(1)在AutoCAD 2016中,打開一幅圖形,如圖1所示。(2)在VBA集成開發(fā)環(huán)境中,按下F5鍵運行程序,系統(tǒng)在命令行中給出提示“選擇對象”,如圖2所示。(3)選擇所要顯示的圖形對象,按下Enter鍵完成選擇,所得結(jié)果如圖3所示。
圖1 圖形初始狀態(tài) 圖2 程序運行狀態(tài) 圖3 圖形縮放后結(jié)果
通過這個程序?qū)崿F(xiàn)了在CAD中對圖形的縮放功能,在實際使用過程中,程序運行穩(wěn)定,提高了工作效率,效果良好。但是,這個批量文字替換程序也有一些不足之處,如:對多個圖形中的特定對象不能具體進行設置和選擇,同時,對不同行業(yè)中有特定需求和實際問題的用戶,針對性不是很強[4]144-145。今后,可以通過一些程序軟件的嵌入和二次開發(fā),來解決本行業(yè)個性化應用問題。
[1] 王進明,安榮.Auto CAD中對象縮放命令的應用[J].煤炭技術(shù),2011(05).
[2] 高 虎.Auto CAD200X圖形縮放和比例設置[J].科技信息,2009(33).
[3] 張 帆,鄭立楷,王華杰.AutoCAD VBA開發(fā)精彩實例教程[M].北京:清華大學出版社,2004.
[4] 楊瑞蘭,劉藝柱.基于AutoCAD縮放命令應用的研究[J].制造業(yè)自動化,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-),女,陜西長安人,講師,計算機科學與技術(shù)碩士,主要從事計算機科學與技術(shù)研究。
TP391.72
A
1672-2388(2017)01-0086-03