唐桂彬,李俊鋒,劉 帥
(1.楊凌職業技術學院,陜西 楊凌 712100;2.西北測繪職工培訓中心,陜西 西安 710054;3.紅河學院工學院,云南 蒙自 661100)
基于AutoCAD動態塊和腳本文件的批量展點方法
唐桂彬1,李俊鋒2,劉 帥3
(1.楊凌職業技術學院,陜西 楊凌 712100;2.西北測繪職工培訓中心,陜西 西安 710054;3.紅河學院工學院,云南 蒙自 661100)

AutoCAD在工程測量領域有著較強的通用性,通過深入剖析AutoCAD屬性塊、動態塊功能和腳本文件的運行原理,提出一種基于AutoCAD帶屬性動態塊和腳本文件的批量展點方法,并運用VBA宏語言實現展點數據腳本文件的快速編寫。實驗表明,該方法不但可同時完成點符號和點注記的展繪,而且能保證二者的整體性,具備較強的可調整性,有利于后期圖面的清繪工作。
AutoCAD;動態圖塊;腳本文件;VBA;批量展點
時下各行業都在AutoCAD的基礎上開發出了適合自己專業背景的繪圖軟件,但這仍然取代不了CAD較強的通用性。特別是對一些非測繪專業的相關工程人員來說,更容易接受CAD的繪圖操作,利用它生產出來的圖形數據在后期的應用也較為方便[1-2]。出于以上考慮,本文針對非測繪人員在一般性工程測量應用方面的需要,提出了一種基于CAD帶屬性動態塊和腳本文件的快速批量展點方法。此方法更完善,易操作,展點效果好,能夠根據測點坐標同時展繪點符號和點注記,且二者為一個參照塊,同時點注記在保持與測點關聯的前提下可圍繞點符號中心自由移動,更有利于圖面整飾。
1.1 動態圖塊
圖塊是一組圖形對象的集合,為一個整體,都被賦予一個塊名,用戶可以根據自身需要將該圖塊插入到任意指定位置,并可設置比例系數和旋轉角度[3-4]。CAD中圖塊分為靜態塊和動態塊2種。靜態塊在插入時各組合對象間的相對位置是不再變化的,只能整體調整縮放比例或者旋轉角度;動態塊是從AutoCAD2006版本開始增加的,用戶可以根據預先自定義的夾點或特性來整體或局部調整塊參照。例如在圖形中插入一個宗地圖框塊參照,對于不同的圖幅規格,圖框的大小是不一樣的,如果該塊是一個動態塊,且帶屬性的,那么只需拖動自定義夾點來修改圖框的大小、文字的位置,還可以通過編輯屬性值實時改變文字的內容。由此可見,動態塊具有一定的靈活性和智能性。
1.2 腳本文件
AutoCAD腳本文件又稱為命令組文件,是一種后綴名為.SCR的ASCII碼文本文件,它包含一系列具有先后連續性的CAD命令和參數,這些命令按照順序及指定格式組合在一起表達了一個完整的繪圖過程,通過SCRIPT命令可調用腳本文件。腳本文件可快速反復地將繪圖過程重復,類似于一個批處理文件[5-6]。
腳本文件的編輯要求滿足一定的格式規則,文件中的空格或者空行相當于CAD命令執行過程中在鍵盤上敲擊一次空格鍵或者回車鍵,不能隨意增減;每行結尾處必須回車;命令無大小寫之分,最好使用CAD命令全稱;注釋行以“;”開頭,且在英文輸入法狀態下輸入[6-7]。例如繪制圓心坐標值為(50,60)、直徑為101的圓,可編寫如下腳本:circle□50,60□d□101□(“□”表示空格)。
在《國家基本比例尺地圖圖式》規范中對不同比例尺的高程點做了明確要求,本文以批量展繪1∶ 1 000地形圖高程點為例,規范規定1∶1 000地形圖上的高程點符號用直徑0.5 mm的黑點表示,高程注記字體為正等線體,字高為2[8]。
2.1 靜態屬性塊的建立
先在展點圖層內繪制點符號,設置字體為正等線體,并按照指定字高給其定義一個屬性,這個屬性用來存放不同測點的高程值,其對齊方式采用左中對齊,對齊基點為點符號實心圓的圓心處。用wblock命令將點符號連同屬性一起創建一個名為“高程點”的外部屬性塊。調用insert命令于同層任意位置插入“高程點”外部塊,此時的圖塊只有一個夾點,無法動起來。
2.2 動態屬性塊的建立
在靜態屬性塊建立之后,需要給這個圖塊添加極軸參數和賦予移動動作以完成動態屬性塊的構建(如圖1)。“塊編寫”選項中選擇“參數”,單擊“極軸參數”按鈕,按表1提示的操作就可以完成動態屬性塊的制作。

表1 動態屬性塊的建立過程

圖1 塊編輯器中添加參數和動作
保存塊定義并關閉塊編輯器,再啟用wblock命令將內部動態塊轉換成外部動態塊,并替換原靜態圖塊,以供調用。經動態處理后的圖塊有2個夾點,拖動高程注記夾點可使其圍繞符號定位點移動,而且點符號與點注記始終是一個整體對象。
編制腳本文件的目的是為了實現將動態屬性塊按野外測點坐標批量展繪到地形圖上。由于野外測點屬于測量坐標系,而CAD系統屬于數學坐標系,因此要對野外測點的X和Y坐標進行置換,置換后的基本格式為:點號,Y,X,H。
3.1 Excel編制腳本文件
將交換XY坐標順序后的數據文件轉換為CSV格式的電子表格文件,電子表格中的一行代表了一個點的展繪過程。單獨展繪一個高程點的步驟(如圖2):第1步,命令行鍵入插入圖塊命令“insert”;第2步,指定插入圖塊的名稱;第3步,指定圖塊的插入點位(Y,X);第4步,指定圖塊在X、Y方向上的縮放比例,默認設置為1表示不縮放;第5步,設置圖塊旋轉角度,若為0,表示不旋轉;第6步,點擊“確定”后輸入該點的高程值,輸入的高程值與圖面上產生的高程注記內容相互對應,再次單擊“確定”即完成了單點的展繪工作。

圖2 單點展繪步驟
在 Excel中將上述單點展繪過程按格式編寫成一行,點數與行數對應,如圖3所示。A列即第一步,輸入“insert”命令;B列即第2步,指定圖塊名稱,要注意與之前創建的“高程點”圖塊名稱一致,否則系統無法自動搜索到需要的圖塊;C列即第3步,給定各點坐標;對于C列的編輯可利用CONCATENATE函數,將原數據文件中Y、X、H三列內容以半角逗號為分隔符合并為一列,并將其轉換為文本格式;D、E、F三列分別表示第4、第5步,確定X、Y方向的縮放比例和旋轉角度;G列為第6步,賦高程屬性值,該列也應為文本格式,且要注意不同比例尺的高程注記位數。

圖3 Excel中編輯腳本文件
將編輯好的數據保存成.scr格式的腳本文件,通過SCRIPT命令達到批量展點的目的。
3.2 VBA編制腳本文件
為進一步提高作業效率,可將上述過程編寫成VBA宏代碼,通過創建個人宏工作簿,對任意含有坐標數據的CSV文件進行操作。流程如圖4所示。

圖4 程序流程圖
主要實現代碼及其含義:
①調用CONCATENATE函數編輯C列坐標格式,并將其轉換為文本格式,代碼如下:
For Counter = 1 To i
If Cells(Counter, 1) <> "" Then
Worksheets(1).Cells(Counter, 1).Value = "insert"
Worksheets(1).Cells(Counter, 2).Value = j
Worksheets(1).Cells(Counter, 6).Value = k
Worksheets(1).Cells(Counter, 7).Value = "=CONCATENATE (RC[-4],RC[-1],RC[-3],RC[-1],RC[-2])"
End If
Next Counter
②編輯D、E、F列內容,給出插入動態圖塊時的縮放比例、旋轉角度,編輯G列高程屬性值即各點高程注記,按用戶指定位數保留小數位數(強制限定在0、1、2、3位),并將其轉換為文本格式。代碼如下:
For Counter = 1 To i
If Cells(Counter, 1) <> "" Then
Worksheets(1).Cells(Counter, 4).Value = e
Worksheets(1).Cells(Counter, 5).Value = e
Worksheets(1).Cells(Counter, 6).Value = f
x = Cells(Counter, 7)
Cells(Counter, 7).Value = Round(x, g)
If g = 0 Then
Cells(Counter, 7).NumberFormat = "@"
Else
If Cells(Counter, 7) = Int(Cells(Counter, 7)) Then
s = "."
For n = 1 To g
s = s + "0"
Next n
Cells(Counter, 7).NumberFormat = "@"
Cells(Counter, 7).Value = Format(Round(x, g)) + s
Else: fd = Application.Find(".", Format(Round(x, g)))
l = Len(Application.Substitute(Format(Round(x, g)), Mid(Format(Round(x, g)), 1, fd), ""))
If l = 1 Then
s = ""
For n = 2 To g
s = s + "0"
Next n
Cells(Counter, 7).NumberFormat = "@"
Cells(Counter, 7).Value = Forma t(Round(x, g)) + s
End If

將編輯好的數據保存為腳本文件(后綴名為.scr),通過SCRIPT命令也能更快捷地達到展點的目的。
需要指出的是,運行腳本文件之前必須對CAD的環境進行設置,即需要在CAD“選項”中進行兩項設置:“文件”標簽下添加新的支持文件搜索路徑,以便系統能夠自動到該路徑下調用腳本文件中指定名稱的圖塊;另外,“用戶系統配置”標簽下將坐標數據輸入的優先級設置為鍵盤輸入。如果這兩項設置不正確,會導致后面展點時腳本文件出錯;此外,展點圖層應置為當前圖層。
基于AutoCAD動態塊和腳本文件的批量展點方法不需要借助其他二次開發軟件來完成展點任務,一般的AutoCAD用戶就能掌握,利用VBA編制腳本文件快速、準確、高效;另外,除了使用腳本文件批量處理功能外,還充分挖掘了CAD屬性動態塊的強大功能,使得展繪后的點既保持圖塊的整體性,又具備可調整性,進一步提升展點效果,為后期圖幅整飾時移動壓線注記、修改圖面高程注記提供了更快捷的解決方法。
[1] 唐詩華,李洪玉,謝劭峰.在CAD平臺下實現高程點智能展點的一種方法[J].測繪通報,2006(4):51-53
[2] 楊國根.AutoCAD中自動展點方法的探討[J].地理空間信息,2006,4(6):84-86
[3] 孔祥鋒.將測量坐標點展成AutoCAD格式點的技巧[J].科技資訊,2010(5):74-76
[4] 尤蘇南.利用Excel表格在CAD中按類別快速展繪勘探點技術[J].計算機與現代化,2013(2):163-168
[5] 張春玲.淺談AutoCAD中腳本文件的使用方法[J].科技創新導報,2011(3):18
[6] 查維康.使用AutoCAD腳本文件[A].中國工程圖學學會圖學教育分會,教育部高等學校工科制圖教學指導委員會.面向21世紀的圖學教育——第十二屆全國圖學教育研討會暨第三屆制圖CAI課件演示交流會論文集[C].中國工程圖學學會圖學教育分會,教育部高等學校工科制圖教學指導委員會,2000
[7] 邱章云.應用Excel編制AutoCAD腳本文件實現批量展點繪圖[J].礦山測量,2005(3):52-54
[8] GB/T20257.1-2007國家基本比例尺地圖圖式第1部分:1∶ 500、1∶1 000、1∶2 000地形圖圖式[S].
[9] 朱洪濤.在AutoCAD中實現快速展點繪圖[A]//淮南礦業集團.2010年度淮南礦業集團煤炭學會學術交流會論文匯編(二)·地質專業[C].淮南礦業集團,2010
本 刊 聲 明
為適應我國信息化建設,擴大本刊及作者知識信息交流渠道,本刊數據已被《中國核心期刊(遴選)數據庫》、《CNKI 中國期刊全文數據庫》和《中文科技期刊數據庫(全文版)》等收錄。在《地理空間信息》發表的論文均默認將其在著作權保護期內的復制權、發行權、匯編權、翻譯權以及網絡傳播權授權給《地理空間信息》編輯部,編輯部可將上述權利轉授給第三方使用。作者不再許可他人以任何形式使用該篇論文,但可以在其后續作品中引用(或翻譯)該論文中部分內容或將其匯編在作者的非期刊類文集中。如不同意,請事先聲明,本刊另作處理。其文章的著作權使用費與本刊稿酬一次性給付(已在收取發表費時折減和換算為雜志贈閱)。
(本刊編輯部)
P208
B
1672-4623(2016)02-0075-04
10.3969/j.issn.1672-4623.2016.02.026
唐桂彬,碩士,主要從事工程測量、GIS和遙感技術應用、測繪教學等方面的工作。
2015-01-16。
項目來源:國家自然科學基金資助項目(41201418、41301442);楊凌職業技術學院科學研究基金資助項目(A2013051,A2014014)。