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