王大江,楊忠杰,張曉莉
(68029部隊(duì),蘭州 730020)
基于VBA實(shí)現(xiàn)AutoCAD自動圖幅整飾的方法
王大江,楊忠杰,張曉莉
(68029部隊(duì),蘭州 730020)
針對常用制圖軟件和地理信息系統(tǒng)中圖幅整飾功能靈活性不足的問題,通過研究AutoCAD中復(fù)雜線型的定義與程序化繪制方法,基于VBA在AutoCAD軟件平臺上開發(fā)了一套自動圖幅整飾工具,實(shí)現(xiàn)了圖幅整飾內(nèi)容的自動繪制,尤其是能繪制復(fù)雜的裝飾花邊,顯著提高了制圖作業(yè)效率。
AutoCAD;圖幅整飾;VBA;二次開發(fā);制圖效率
地圖整飾是地圖制圖作業(yè)中的關(guān)鍵環(huán)節(jié),包括地圖數(shù)據(jù)符號化和地圖圖幅整飾兩個(gè)方面,本文討論地圖圖幅整飾方面的內(nèi)容。地圖圖幅整飾的內(nèi)容一般包括內(nèi)外圖廓、坐標(biāo)網(wǎng)、比例尺、圖名、圖號、圖廓注記、接圖表、指北針、圖例、技術(shù)說明和出版說明等[1]。
在地圖制圖作業(yè)中,往往需要根據(jù)具體的成圖范圍、專題內(nèi)容和地圖用途,專門設(shè)計(jì)、制作相應(yīng)的圖幅整飾。目前常用的地理信息系統(tǒng)平臺一般都提供圖幅整飾的功能,部分平臺還可以針對該功能進(jìn)行二次開發(fā),但對照地圖制圖的多樣化需求,這些工具靈活性不足、自主定制難度較大。在實(shí)際制圖作業(yè)中,往往需要在地圖打印輸出前,在Illustrator等圖形圖像處理軟件中制作圖幅整飾。由于這些圖形圖像處理軟件不支持地圖坐標(biāo)信息,從而割裂了圖幅整飾與地圖內(nèi)容原有的空間聯(lián)系,給地圖數(shù)據(jù)的使用和更新造成了不必要的障礙[2]。
AutoCAD是國內(nèi)外廣泛使用的計(jì)算機(jī)輔助繪圖軟件,圖形繪制、編輯功能比較豐富,成果數(shù)據(jù)具有嚴(yán)密的坐標(biāo)信息,二次開發(fā)相對簡便、易于掌握,在AutoCAD中進(jìn)行整飾成圖和噴繪輸出具有明顯優(yōu)勢?;谝陨峡紤],本文以AutoCAD為平臺,通過VBA二次開發(fā)自動圖幅整飾工具,實(shí)現(xiàn)地圖快速整飾功能[3-5]。
2.1 AutoCAD VBA二次開發(fā)原理
AutoCAD VBA二次開發(fā)是使用Visual Basic for Application(VBA)開發(fā)環(huán)境,調(diào)用AutoCAD為VBA開放的ActiveX接口,操控AutoCAD的對象、方法和屬性,對AutoCAD的圖形操作功能進(jìn)行擴(kuò)展。VBA具有和Visual Basic相同的語句和語法,兩者的主要區(qū)別在于:VBA與AutoCAD在同一操作空間運(yùn)行,可為AutoCAD提供快速的智能化編程環(huán)境。VBA語句簡單易懂、上手較快,使用VBA程序語句控制AutoCAD的圖形操作,可以使許多繁瑣的制圖作業(yè)變的簡單快捷[6-8]。
2.2 圖幅整飾程序流程
首先通過圖形界面交互,獲取用戶輸入的內(nèi)圖廓角點(diǎn)和各圖幅整飾信息,同時(shí)完成修改系統(tǒng)變量、載入花邊線型、建立圖廓圖層、預(yù)定義字體等繪圖環(huán)境準(zhǔn)備工作;然后按給定的內(nèi)圖廓角點(diǎn)坐標(biāo)依次繪制內(nèi)圖廓、外圖廓,按照指定間隔繪制坐標(biāo)網(wǎng)格并標(biāo)注坐標(biāo)網(wǎng)注記,按照與內(nèi)圖廓的相對位置標(biāo)注圖名、圖號、密級、比例尺、附注等內(nèi)容;最后在相應(yīng)位置以塊參照的形式插入圖例、接圖表等相對復(fù)雜的圖形。
圖1 圖幅整飾程序流程圖
3.1 外圖廓花邊制作
AutoCAD允許用戶以線型定義的形式制作線狀符號,但僅依此方法難以實(shí)現(xiàn)外圖廓花邊的制作。本文通過實(shí)驗(yàn)發(fā)現(xiàn),與Illustrator中定義畫筆的原理類似,AutoCAD中也可通過形定義和線型定義相結(jié)合的方法,實(shí)現(xiàn)外圖廓花邊的制作。制作原理是:將外圖廓花邊看做若干個(gè)循環(huán)單元的線性重復(fù),定義一個(gè)形來表示單個(gè)循環(huán)單元,隨后將這個(gè)形嵌入線型定義中,使其沿線循環(huán)配置。具體制作方法如下:
(1)定義形。形是一種AutoCAD對象,用于快速重復(fù)使用同一個(gè)圖形。AutoCAD可以將形作為線狀符號定義中的一個(gè)單元,沿線循環(huán)配置生成線狀符號。形的定義保存在擴(kuò)展名為.shp的文件中,編譯后的形是一個(gè)擴(kuò)展名為.shx的文件,形在編譯后即可通過調(diào)用相應(yīng)的.shx文件將其加載到AutoCAD圖形中。AutoCAD的Express Tools中提供了Make Shape工具(圖2),可以將用戶繪制的圖形直接轉(zhuǎn)換為形(生成“.shp”和“.shx”文件)。
首先確定花邊的一個(gè)循環(huán)單元,用點(diǎn)、直線或多段線完成這個(gè)循環(huán)單元的繪制(圖3),然后使用Make Shape工具,按照提示依次指定形文件保存位置、形的名稱、分辨率、定位點(diǎn),框選繪制的循環(huán)單元,最后點(diǎn)擊回車即可完成形的定義。
圖2 外圖廓花邊的一個(gè)循環(huán)單元
花邊中形的定義與使用需要注意以下幾點(diǎn):一是AutoCAD安裝包中雖然提供了Express Tools,但默認(rèn)并不安裝,需注意在安裝AutoCAD時(shí)勾選安裝Express Tools。二是形的定義中只能使用點(diǎn)和線劃,需要對面進(jìn)行實(shí)色填充時(shí),可以用間距0.05毫米左右的斜線序列模擬實(shí)色填充效果(圖3)。三是需要精確給定循環(huán)單元的尺寸(本文定為10毫米,如圖3),繪制的花邊尺寸必須是循環(huán)單元尺寸的整數(shù)倍(圖4)。四是形定義時(shí)指定的定位點(diǎn)應(yīng)為循環(huán)單元左下角點(diǎn),并且花邊線的方向應(yīng)為順時(shí)針,只有同時(shí)滿足這兩個(gè)條件,花邊線型才能夠正確顯示(圖4)。
圖3 花邊線繪制正誤對比
圖4 外圖廓花邊制作效果
(2)定義線型。AutoCAD的線型是由點(diǎn)、形、文字、線段和空白組成的重復(fù)圖案,線型的定義保存在擴(kuò)展名為.lin的線型定義文件中。一個(gè)lin文件可以包含多個(gè)線型的定義,其中每兩行文字定義一個(gè)線型,一個(gè)包含形的線型定義形式如下:
其中第一行包括線型名稱(linetype_name)和說明(description)。第二行字母A后面是一系列圖案描述符(descriptor),圖案描述符為0表示一個(gè)點(diǎn)、正數(shù)表示相應(yīng)長度的線劃、負(fù)數(shù)表示相應(yīng)長度的空白。方括號內(nèi)就是嵌入的形,在方括號內(nèi)指定形的名稱(shapename)、編譯后的形定義文件的名稱(shapefilename)、比例因子(scale)、旋轉(zhuǎn)角度(rotate)、位移距離(xoffset、yoffset),除形的名稱和形文件名稱外,其余參數(shù)均可省略。上文中為外圖廓花邊定義的形名稱是“HUABIAN1”,形文件名稱是“TUKUO.shx”,外圖廓花邊線型就可以定義為如下內(nèi)容:
可以注意到,AutoCAD實(shí)際上將形等同于一個(gè)點(diǎn)來處理,點(diǎn)是沒有寬度的,而上文定義的形寬度為10毫米,這里線型定義中就需要在形的方括號之后以“-10”給出10毫米的空白,以便確?;ㄟ叺难h(huán)單元間距恰當(dāng)。使用該線型定義繪制的外圖廓花邊如下圖:
3.2 方里網(wǎng)注記數(shù)字格式化
圖幅整飾中涉及到要標(biāo)注方里網(wǎng)注記、角點(diǎn)坐標(biāo)注記等數(shù)字注記[9],標(biāo)注時(shí)需對坐標(biāo)值進(jìn)行按位數(shù)截取整數(shù)、按位數(shù)保留小數(shù)等運(yùn)算,這樣的運(yùn)算在整個(gè)圖幅整飾程序中需重復(fù)多次。本文專門編寫了數(shù)字格式化函數(shù)“FormatNumber”,供圖幅整飾程序調(diào)用。“FormatNumber”函數(shù)形式如下:
其中3個(gè)參數(shù)分別為:要處理的數(shù)字(varNum)、整數(shù)位數(shù)(intIntegerLength)、小數(shù)位數(shù)(intDesimalL-ength),運(yùn)算結(jié)果以字符串形式返回。函數(shù)執(zhí)行的算法是:若給定有效的小數(shù)位數(shù),原小數(shù)位數(shù)不足時(shí)在后面用“0”補(bǔ)足,超出時(shí)四舍五入;若給定有效的整數(shù)位數(shù),原整數(shù)位數(shù)不足時(shí)在前面用“0”補(bǔ)足,超出時(shí)直接將前面多出部分截去。將“Format-Number”函數(shù)與除法運(yùn)算相結(jié)合,即可算出方里網(wǎng)注記各部分的文字內(nèi)容,以橫坐標(biāo)值“34534000”為例,可以運(yùn)算得到其千公里數(shù)(即帶號)是“34”,公里數(shù)是“534.0”(標(biāo)注效果如下圖)。
圖5 程序標(biāo)注的格式化數(shù)字(角點(diǎn)坐標(biāo)注記)
3.3 使用預(yù)定義塊制作共用圖形
圖幅整飾的各個(gè)要素均可通過VBA實(shí)現(xiàn)程序化繪制,但在實(shí)際作業(yè)中發(fā)現(xiàn)用程序?qū)崟r(shí)繪制所有要素并不是最佳方案。圖廓中有一部分要素在各圖幅是相同的(如圖例、圖解比例尺等),這些要素往往相對復(fù)雜,如果將這些的要素的繪制過程寫在程序里,程序編寫調(diào)試的工作量大、執(zhí)行效率也不高。實(shí)際上可以在AutoCAD中將共用圖形預(yù)先做好,而不必在代碼中逐一體現(xiàn)。本文在AutoCAD圖形界面預(yù)先完成共用圖形的制作,并保存為“.dwg”文件備用;程序生成圖廓時(shí)將這些“.dwg”文件以塊參照的形式插入到相應(yīng)位置,簡便快捷的完成共用圖形的配置,減少了代碼編寫的工作量。
基于上述分析和實(shí)驗(yàn),本文完成了AutoCAD地圖快速整飾工具的開發(fā),并在日常制圖生產(chǎn)中進(jìn)行了應(yīng)用,先后制作各類影像圖、暈渲圖、交通圖60余幅。
圖6 AutoCAD地圖快速整飾工具制作的專題圖成果
從應(yīng)用情況看,該工具可以根據(jù)用戶給定的任意一個(gè)矩形內(nèi)圖廓,自動完成圖幅整飾要素的配置,整飾速度快、成果規(guī)范準(zhǔn)確、噴繪輸出方便,顯著減少了圖幅整飾的工作量。工具生成的圖幅整飾文件為普通DWG文件,能夠方便的導(dǎo)入Illustrator等圖形圖像處理軟件;同時(shí),DWG數(shù)據(jù)作為通用的空間數(shù)據(jù),也能被多種地理信息系統(tǒng)平臺順利識別,成果適用性強(qiáng)。
[1] 王家耀, 孫群, 王光霞等. 地圖學(xué)原理與方法[M]. 北京: 科學(xué)出版社, 2006.
[2] 朱蕊, 孫群, 肖強(qiáng)等. 數(shù)字地圖制圖中地形圖整飾的自動實(shí)現(xiàn)[J]. 測繪工程, 2011(4): 40.
[3] 劉永波. 分析AutoCAD二次開發(fā)方法的研究[J]. 軟件, 2013, 34(5): 148-149
[4] 王大江. 基于VBA提高AutoCAD制圖效率的研究[J]. 電腦編程技巧與維護(hù), 2014(10): 95-96.
[5] 郭雷, 楊學(xué)峰, 武豐雷. AutoCAD二次開發(fā)應(yīng)用于地形圖符號轉(zhuǎn)換的研究[J]. 測繪通報(bào), 2012(增刊): 509-510.
[6] 張惠茹. 基于AutoCAD凸輪輪廓曲線設(shè)計(jì)[J]. 軟件, 2013, 34(1): 87-88.
[7] 王大江. 基于AutoCAD VBA的大比例尺地形圖制圖技術(shù)研究[D]. 鄭州: 解放軍信息工程大學(xué), 2015.
[8] 張曉莉, 王大江. AutoCAD2006中地圖符號庫的制作[J]. 測繪通報(bào)測繪科學(xué)前沿技術(shù)論壇摘要集, 2008(10).
[9] 李振星, 邵峰晶, 孫仁誠, 李淑靜, 吳舜堯. 基于分類的GIS地圖符號快速標(biāo)注算法[J]. 軟件, 2012, 33(2): 108-110.
Method of Map Decoration in AutoCAD by VBA
WANG Da-jiang, YANG Zhong-jie, ZHANG Xiao-li
(68029 Troop, LanZhou 730020)
This paper try to research methods of complex line-types definition and drawing by programs, to solve problems about common mapping software and geographic information system, which map decoration function is not flexible enough. Developed an automatic map decoration tool based on AutoCAD by VBA, which can draw map decoration contents automatically, especially can draw complex decorative lace, significantly improve the efficiency of cartography.
AutoCAD; Map decoration; VBA; Secondary development; Efficiency of mapping
TP317.4
A
10.3969/j.issn.1003-6970.2017.01.020
王大江(1984-),男,工程師/碩士,主要從事地圖制圖工作與研究。
本文著錄格式:王大江,楊忠杰,張曉莉. 基于VBA實(shí)現(xiàn)AutoCAD自動圖幅整飾的方法[J]. 軟件,2017,38(1):98-101