張福利,丁亞南,何立新
(河南省中緯測(cè)繪規(guī)劃信息工程有限公司,河南焦作 454000)
AutoCAD具有開(kāi)放的體系結(jié)構(gòu),允許用戶和開(kāi)發(fā)者采用高級(jí)編程語(yǔ)言對(duì)其進(jìn)行擴(kuò)充和修改,能最大限度地滿足用戶的特殊要求。目前國(guó)內(nèi)許多地形圖成圖軟件均基于AutoCAD平臺(tái)開(kāi)發(fā)而成,在地形測(cè)繪的過(guò)程中使用了大量的獨(dú)立地物符號(hào)、行樹(shù)行灌木和面狀填充等點(diǎn)狀符號(hào),在地形圖整飾或編繪專(zhuān)題地形圖時(shí)往往遇到這些點(diǎn)狀符號(hào)遮擋其他地物,手工刪除這些符號(hào)費(fèi)工費(fèi)時(shí)。本文詳細(xì)論述了使用VBA快速刪除遮擋符號(hào)的程序思路和代碼組織編寫(xiě),在生產(chǎn)實(shí)踐中取得了良好的效果。在地形圖自動(dòng)化整飾領(lǐng)域進(jìn)行了有益的探索,符合數(shù)字測(cè)繪產(chǎn)品程序化、自動(dòng)化和智能化的發(fā)展方向。
VBA即Mcrosoft Office中的Visual Basic for Applications,自2000版本開(kāi)始它便集成到了AutoCAD中。VBA為用戶訪問(wèn)AutoCAD中豐富的技術(shù)框架打開(kāi)了一條新的通道,它利用AutoCAD強(qiáng)大的ActiveX自動(dòng)化對(duì)象模型,代表了一種新型的定制AutoCAD的模式構(gòu)架。通過(guò)VBA我們可以操作AutoCAD幾乎所有的內(nèi)部功能,控制ActiveX使之相互之間發(fā)生互動(dòng),為自動(dòng)刪除AutoCAD中的各類(lèi)實(shí)體提供了強(qiáng)大的技術(shù)支持。
地形圖上的符號(hào)一般由點(diǎn)、線、面、文字符號(hào)組成,若按符號(hào)與地物的比例關(guān)系分類(lèi),點(diǎn)狀符號(hào)又稱(chēng)為不依比例符號(hào)。點(diǎn)狀符號(hào)按定位情況分為G兩類(lèi):
①定位性符號(hào):它在地形圖上具有確定的位置,一般不能任意移動(dòng),如煙囪、水塔、檢修井等,它們可以根據(jù)符號(hào)的位置,確定其所代表的地物及實(shí)地位置。
②說(shuō)明性符號(hào):它在地形圖上一般是為了說(shuō)明地物的質(zhì)量和數(shù)量特征而附加的符號(hào),它們依附于定位范圍或定位線而存在,如旱地、林地符號(hào)配置于地類(lèi)界范圍內(nèi),行樹(shù)依附定位線而存在,一般呈規(guī)則或不規(guī)則狀排列,但無(wú)定位意義。對(duì)于無(wú)實(shí)際定位意義的點(diǎn)狀符號(hào)或?qū)n}地圖上無(wú)需表示的點(diǎn)狀符號(hào)若遮擋了重要地物,在地形圖內(nèi)業(yè)整飾時(shí),一般為保持圖面整潔要?jiǎng)h除這些符號(hào)。
地形圖上的點(diǎn)狀符號(hào)一般以圖塊的形式存在于DWG文件的圖形空間中,每種符號(hào)(圖塊)均具有特定的內(nèi)部名稱(chēng)(塊名),在特定的比例尺下,符號(hào)有特定的比例因子和大小,每個(gè)符號(hào)插入點(diǎn)的三維坐標(biāo)是固定不變的。AutoCAD中的快速選擇功能可以方便的選擇某類(lèi)實(shí)體對(duì)象并添加到選擇集中,用VBA代碼建立選擇集時(shí)可以同時(shí)設(shè)定選擇過(guò)濾器的多個(gè)條件,從而更精確、快速的選擇到所需的實(shí)體對(duì)象,進(jìn)而用代碼控制選中實(shí)體的移動(dòng)、復(fù)制、刪除等操作。建立選擇集的方法很多,有“屏幕”選擇集,“封閉區(qū)域”選擇集、擴(kuò)展屬性選擇集等,本文用到的主要是“封閉區(qū)域”選擇集,如圖1所示。
程序能自動(dòng)刪除遮擋地物的點(diǎn)狀符號(hào)主要是基于AutoCAD選擇集的操作進(jìn)行的。設(shè)想存在一個(gè)點(diǎn)狀符號(hào),無(wú)論其形狀如何,總能有一個(gè)平行于坐標(biāo)軸的最小矩形框可以將符號(hào)完整包圍(如圖1所示)。如果以這個(gè)矩形框?yàn)檫x擇集的邊界,如果這個(gè)“封閉區(qū)域”內(nèi)不包含其他實(shí)體,那么選擇集選中的就是點(diǎn)狀符號(hào)自身,實(shí)體的數(shù)量為1個(gè)。如果這個(gè)封閉區(qū)域內(nèi)有其他符號(hào)、文字存在或有多段線、直線穿越,那么“封閉區(qū)域”內(nèi)就包括了多個(gè)實(shí)體,如圖2中的選擇集1包含了2個(gè)實(shí)體,實(shí)體數(shù)量為2。圖2中的選擇集2包含了3個(gè)實(shí)體,實(shí)體數(shù)量為3。
分析可知:通過(guò)點(diǎn)狀符號(hào)最小矩形包圍框建立的選擇集所選中的實(shí)體數(shù)量,如果數(shù)量大于1,那么可以判定該符號(hào)壓蓋了其他的地物,就可以將自身刪除掉。
圖1 封閉區(qū)域選擇集示意圖
圖2 包含多個(gè)實(shí)體的選擇集
①建立一個(gè)維數(shù)固定的靜態(tài)數(shù)組用于存儲(chǔ)需要?jiǎng)h除的點(diǎn)狀符號(hào)的基本信息,如塊名稱(chēng)及基于插入點(diǎn)的左高度、右高度、左寬度和右寬度等信息;
②在代碼中提供人機(jī)對(duì)話,便于用戶在CAD命令行輸入選擇集過(guò)濾條件,如符號(hào)所在的圖層等;
③依據(jù)輸入的過(guò)濾條件對(duì)整個(gè)圖形建立一個(gè)全局選擇集,例如選擇“ZBTZ”層上的所有點(diǎn)狀符號(hào);
④循環(huán)讀取全局選擇集中的每個(gè)符號(hào)的塊名稱(chēng)并和數(shù)組中存儲(chǔ)的符號(hào)信息進(jìn)行字符比較,確定該符號(hào)是否為程序確定刪除的符號(hào);
⑤以每個(gè)點(diǎn)狀符號(hào)的插入點(diǎn)為基點(diǎn),以數(shù)組中存儲(chǔ)該符號(hào)的長(zhǎng)度信息構(gòu)建一個(gè)矩形選擇區(qū)域,建立一個(gè)局部選擇集;
⑥對(duì)局部選擇集內(nèi)的實(shí)體數(shù)量進(jìn)行判斷,如果數(shù)量等于1則保留符號(hào),否則便刪除符號(hào)自身。
在圖3的地形圖中,陡坎線、文字和高程注記均不同程度地被旱地填充符號(hào)壓蓋,圖面質(zhì)量較差,程序運(yùn)行后壓蓋地物的旱地符號(hào)均自動(dòng)的被刪除了,圖面效果明顯得到改善,如圖4的處理前后對(duì)比。
圖3 程序運(yùn)行前的地形圖
圖4 程序運(yùn)行后的地形圖
程序投入使用后,在大面積的大比例尺地形圖內(nèi)業(yè)整飾中,短短幾分鐘的時(shí)間便可完成獨(dú)立符號(hào)遮蓋地物的刪除工作,相比傳統(tǒng)的人工查找刪除,效率大大的提高,節(jié)約了人力資源的投入。限于篇幅,文中僅論述了程序的設(shè)計(jì)理論基礎(chǔ)、開(kāi)發(fā)思路和關(guān)鍵代碼的編寫(xiě)過(guò)程。
[1]張帆,鄭立楷,王華杰等.AutoCAD VBA開(kāi)發(fā)精彩實(shí)例教程[M].北京:清華大學(xué)出版社,2004.
[2]張曜,張青,李丁.Visual Basic函數(shù)實(shí)用手冊(cè)[M].北京:冶金工業(yè)出版社,2002.
[3]CJJ8-99.城市測(cè)量規(guī)范[S].
[4]GB/T 7929-1995.1∶500 1∶1000 1∶2000地形圖圖式[S].
[5]鄭殿軍,付翔等.地圖制圖[M].哈爾濱:哈爾濱地圖出版社,2001.
[6]CASS 7.0成圖軟件參考手冊(cè)[R].