摘 要:VBA是一個AutoCAD應用程序集成開發(fā)環(huán)境,是一種面向對象的可視化結構編程語言,被廣泛應用于各領域的實際工作中。通過界面或命令方式切換圖層的方法不便捷,針對這個問題,設計了一個切換圖層輔助程序,可以選擇所需圖層并且只顯示本圖層信息,還可以針對不同圖層設置不同顏色以示區(qū)別。實際應用效果良好,提高了工作效率。
關鍵詞:AutoCAD;VBA;圖層
1 概述
AutoCAD(Autodesk Computer Aided Design)是一款用于二維繪圖、詳細繪制、設計文檔和基本三維設計的自動計算機輔助設計軟件。AutoCAD繪圖功能強大,但在處理表格、數(shù)據(jù)等方面有局限性??梢酝ㄟ^對AutoCAD的二次開發(fā),簡化繪圖過程,避免重復性工作,充分發(fā)揮其快速、準確的優(yōu)勢[1]。Visual Basic for Applications( VBA)是Visual Basic的一種宏語言,可以通過VBA編程操作CAD的繪圖對象[2]。
在AutoCAD中,切換圖層的操作很不便捷,特別是當圖形中包含多個圖層的時候,每次都要通過打開圖層列表,去選擇要切換的圖層[3]。雖然有人開發(fā)了根據(jù)創(chuàng)建對象的當前類型自動切換圖層的程序,但是其具有明顯缺陷性。如在建筑制圖中,由于建筑繪圖中直線會用來表示多種對象,需要放置在很多圖層中[4],這樣的情況編寫的程序就不適用。作者在使用中分析得到,切換圖層除了打開列表不方便,搜索目標圖層也不便捷,因為圖層列表是固定不變的,而不是按照用戶使用的頻繁程序而排列。
2 編程思路
文章所創(chuàng)建的切換圖層程序正是針對上述問題,在文本框中顯示當前圖層的名稱,列表中顯示了當前圖形中所有的圖層。程序設計思路是在設置當前圖層后對列表的排序操作。設置當前圖層后,將列表中指定的圖層名稱移到第一位,在原來位置之前的所有元素向后退一位,其他元素位置保持不變。列表的排序方法為:當前圖層、上一次的當前圖層、再上一次的當前圖層,依此類推。列表能夠明確地顯示出當前所有圖層,省去了打開下拉列表的時間,圖層的排序保證了可以容易地選擇頻繁使用的圖層。
3 設計分析
(1)在【VBA管理器】對話框中,創(chuàng)建一個新工程。并在這個工程中創(chuàng)建用戶窗體。
(2)在窗體的初始化事件中,需要讀取圖形中圖層名稱,添加到列表框中,并且調整控件的狀態(tài),其程序代碼為:
Private Sub UserForm_Initialize( )
Dim objLayer As AcadLayer
Dim I As Integer
For Each objLayer In ThisDrawing.Layers
lstLayers .AddItem objLayer.Name, i
i=i +1
Next
lstLayers.ListIndex = 0
txtCurLayer.Enabled = False
End Sub
(3)【僅顯示當前圖層】復選框允許用戶在指定當前圖層時關閉其他圖層,如果用戶單擊該復選框取消選中狀態(tài),則顯示所有圖層,其實現(xiàn)代碼為:
If chcShow.Value = True Then
For Each objLayer In ThisDrawing.Layers
If objLayer.Name <> txtCurLayer.Text Then
objLayer.LayerOn = False
Else
objLayer.LayerOn = True
End If
Next
ElseIf chcShow.Value = False Then
For Each objLayer In ThisDrawing.Layers
objLayer.LayerOn = True
Next
End If
End Sub
(4)圖層列表框的雙擊事件中,包含了設置當前圖層以及排序列表框內容的代碼,其實現(xiàn)代碼為:
Private Sub lstLayers_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
txtCurLayer.Text = lstLayers.Text
Dim objLayer As AcadLayer
For Each objLayer In ThisDrawing.Layers
If objLayer.Name = txtCurLayer.Text Then
ThisDrawing.ActiveLayer = objLayer
Exit For
End If
Next
Dim strTemp As String
Dim index As Integer
Dim i As Integer
index = lstLayers.ListIndex
strTemp = lstLayers.Text
For i = 0 To index - 1
lstLayers.List(index - i) = lstLayers.List(index - i - 1)
Next
lstLayers.List(0) = strTemp
lstLayers.ListIndex = 0
4 實例效果
在VBA集成開發(fā)環(huán)境中,按下F5鍵,在AutoCAD主應用程序窗口中執(zhí)行當前的程序。在圖層列表中雙擊【軸線】選項,該圖層就會被設置為當前圖層,在文本框中顯示“軸線”,幫助用戶判斷當前圖層中的對象,擊選中【僅顯示當前圖層】復選框,圖形窗口中其他圖層就會被關閉,界面如圖1所示:
5 總結與提高
本程序在AutoCAD2010/2014環(huán)境下能夠穩(wěn)定正常運行,工作中應用效果良好。與通過菜單、命令操作話框中直接輸入各種參數(shù)相比,圖層切換程序的使用明顯的節(jié)省了頻繁操作圖層的時間,在繪圖和設計過程中非常實用。
參考文獻
[1]郭慶龍.AutoCAD VBA在鐵路信號工程設計中的應用[J].硅谷,2015(03):82.
[2]張勇.數(shù)字圖像修復關鍵技術的研究與實現(xiàn)[J].安陽師范學院學報,2014(02):32-35.
[3]張帆,鄭立楷,王華杰.AutoCAD VBA開發(fā)精彩實例教程[M].清華大學出版社,2004.
[4]秦洪現(xiàn),崔惠嵐,孫劍,等.Autodesk系列產品開發(fā)培訓教程[M].北京:化學工業(yè)出版社,2008:167-168.
作者簡介:呂嵐(1982-),女,研究生,研究方向為計算機科學與技術,陜西鐵路工程職業(yè)技術學院講師。