彭秋萍
(廣東省水文局汕頭水文分局,廣東 汕頭 515041)
AutoCAD二次開發(fā)在測(cè)量中的應(yīng)用
彭秋萍
(廣東省水文局汕頭水文分局,廣東 汕頭 515041)
AutoCAD是目前應(yīng)用較為廣泛的計(jì)算機(jī)輔助繪圖軟件,擁有良好的用戶界面,較完善的繪圖功能,操作簡(jiǎn)單的特點(diǎn),但是僅僅基于AutoCAD繪圖是不能滿足測(cè)量繪圖中的特殊需要。為此,概述了AutoCAD的一些基本知識(shí),并用VBA對(duì)AutoCAD進(jìn)行二次開發(fā),解決繪圖中一些實(shí)際的問題:批量展繪點(diǎn),批量構(gòu)造多段線、直線,批量變換點(diǎn)樣式等。實(shí)現(xiàn)了水文岸邊地形測(cè)量中,自動(dòng)繪制岸邊道路及建筑物功能。
AutoCAD;VBA;開發(fā);地形測(cè)量
AutoCAD是制圖人員常用的繪圖軟件,以其強(qiáng)大的繪圖功能在建筑、測(cè)量及機(jī)械等領(lǐng)域廣泛應(yīng)用[1],基于AutoCAD的環(huán)境下,可以繪制多種圖形,但是要批量展繪野外測(cè)量點(diǎn)和構(gòu)造線是不能實(shí)現(xiàn)的,同時(shí),在繪圖過程中,常常需要修改文本的屬性,基于AutoCAD對(duì)于個(gè)別的文字修改起來并不難,但是如果是想一次性對(duì)文本進(jìn)行修改卻是一件費(fèi)時(shí)又費(fèi)力的事情,如果可以對(duì)AutoCAD進(jìn)行二次開發(fā),編寫一些程序就可以實(shí)現(xiàn)這一功能,將大大減少繪圖員的工作時(shí)間,提高繪圖員的繪圖效率。將Auto?CAD的繪圖功能與程序開發(fā)語(yǔ)言相結(jié)合,利用VBA語(yǔ)言技術(shù)對(duì)AutoCAD進(jìn)行二次開發(fā),實(shí)現(xiàn)AutoCAD圖形的自動(dòng)繪制或修改功能[2]。
本文主要論述了AutoCAD開發(fā)的一些基本知識(shí)以及利用VBA對(duì)AutoCAD進(jìn)行二次開發(fā):①介紹了一些關(guān)于AutoCAD開發(fā)需了解到一些基本知識(shí);②用VBA實(shí)現(xiàn)了AutoCAD的展點(diǎn)功能,即實(shí)現(xiàn)批量畫點(diǎn)并修改點(diǎn)的樣式;③實(shí)現(xiàn)了批量繪制直線與多段線,可采用手工方式輸入點(diǎn)名自動(dòng)繪制直線或多段線,同時(shí)可采用導(dǎo)入的形式自動(dòng)繪制直線或多段線;④對(duì)文字高度實(shí)現(xiàn)了批量修改功能。
2.1 application對(duì)象
用戶訪問AutoCAD圖形時(shí),需通過AutoCA?DActiveXAutomation對(duì)象,而這個(gè)對(duì)象的根是Appli?cation對(duì)象,當(dāng)用戶要通過某種方法或特性來訪問圖形中的對(duì)象時(shí)都需要通過Application對(duì)象,同時(shí)Application對(duì)象還提供了指向VBAIDE(通過VBE特性)、AutoCAD工具欄(通過MenuGroups和Menu?Bar集合)和菜單以及AutoCAD圖形(通過Docu?ments集合)的鏈接。
2.2 Document對(duì)象
通過Document對(duì)象可以訪問CAD中所有圖形和大部分非圖形對(duì)象。當(dāng)用戶需訪問圖形對(duì)象時(shí)(點(diǎn)、線、圓等圖形)可通過ModelSpace和PaperSpace集合來訪問,訪問非圖形對(duì)象時(shí)(文本樣式、線型、圖層等)可通過具有類似名稱的集合來訪問,訪問圖形特性時(shí)可通過Document對(duì)象的SummaryInfo特性。通過Document對(duì)象還可訪問Utility和Plot對(duì)象。
2.3 Utility對(duì)象
Utility對(duì)象提供應(yīng)用程序中使用的輸入函數(shù)和轉(zhuǎn)換函數(shù),這些輸入函數(shù)可以用來提示用戶在Auto?CAD命令行上輸入各種類型的數(shù)據(jù),例如字符串、整數(shù)、實(shí)數(shù)和點(diǎn)等。
2.4 選擇集
在VBA開發(fā)過程中,如何實(shí)現(xiàn)用戶和AutoCAD之間的交互是需要解決的重點(diǎn),這種交互方式可通過兩種途徑解決:①Utility對(duì)象的Get系列方法;②選擇集。當(dāng)用戶需同時(shí)選擇多個(gè)圖形對(duì)象時(shí),只有通過選擇集的方式才可實(shí)現(xiàn),另外,選擇集還提供了豐富的手段供用戶選擇符合某種特定條件下的實(shí)體對(duì)象。
在水文測(cè)量中常常需要大量導(dǎo)入高程點(diǎn)或是地物特征點(diǎn),特別是用全站儀測(cè)得測(cè)量點(diǎn)后需要導(dǎo)入AutoCAD制圖,而AutoCAD無(wú)法實(shí)現(xiàn)批量展點(diǎn)的功能,同時(shí),岸上測(cè)量的主要構(gòu)筑物又是以道路及建筑物為主。本文的設(shè)計(jì)思路是將現(xiàn)場(chǎng)這些地物的特征點(diǎn)采集后,把采集的地形點(diǎn)批量展繪在CAD上,對(duì)需要連成多段線或是直線的地物地貌的特征點(diǎn)號(hào)存在txt文本中,通過VBA程序?qū)AD進(jìn)行二次開發(fā)實(shí)現(xiàn)自動(dòng)繪圖,實(shí)現(xiàn)了批量的展繪點(diǎn),批量的構(gòu)造多段線、直線,對(duì)點(diǎn)樣式的批量修改,對(duì)文本高度的批量修改,其思路如圖1所示。
圖1 展點(diǎn)、畫線思路
在具備二維點(diǎn)坐標(biāo)數(shù)據(jù)文件的前提下,通過對(duì)文本文件中全部點(diǎn)的讀操作來批量創(chuàng)建點(diǎn)圖元,在點(diǎn)圖元的信息中包括點(diǎn)號(hào)、點(diǎn)坐標(biāo)、點(diǎn)的高程值??紤]其中某幾個(gè)點(diǎn)按順序構(gòu)成直線或多段線,方法有兩種,第一方法是通過讀取文本文件批量構(gòu)造多條直線或是多段線;第二種方法是通過在CAD的命令窗口里輸入點(diǎn)號(hào),讓它自動(dòng)按輸入點(diǎn)號(hào)的順序構(gòu)成直線或是多段線。
應(yīng)用循環(huán)的語(yǔ)句批量創(chuàng)建點(diǎn)、多段線、直線、點(diǎn)號(hào)文字、高程文字,存在VBA宏里,加載在菜單欄上運(yùn)行。下面是主要的程序代碼:
(1)創(chuàng)建點(diǎn)坐標(biāo)
Setpointobject=ThisDrawing.ModelSpace.Ad ?dPoint(point)
(2)創(chuàng)建點(diǎn)號(hào)單行文字
Settextobject=ThisDrawing.ModelSpace.AddText(pn(i),interpoint,1)
(3)創(chuàng)建點(diǎn)高程值單行文字
Settextobject1=ThisDrawing.ModelSpace.AddText(pz(i),interpoint1,1)
(4)在命令窗口上輸入字符串,獲取字符串
inputname (i) =ThisDrawing.Utility.GetString(False,vbNewLine&"請(qǐng)輸入點(diǎn)號(hào)")
3.1 批量展點(diǎn)
把全站儀存儲(chǔ)的觀測(cè)的原始數(shù)據(jù)存入電腦,其格式如表1。
表1 原始數(shù)據(jù)存入表
通過編制的程序,可直接將數(shù)據(jù)導(dǎo)入并將點(diǎn)展示在CAD界面中,如圖2所示。
圖2 批量展點(diǎn)
展繪在AutoCAD的點(diǎn),根據(jù)不同的需要,常常會(huì)改變點(diǎn)的樣式。在水文測(cè)量繪圖中常用的點(diǎn)樣式有:圖根點(diǎn)、埋石圖根點(diǎn)、注記點(diǎn)、十字絲、方塊點(diǎn)。點(diǎn)樣式圖形是以外塊的形式存儲(chǔ)起來,當(dāng)選擇點(diǎn)樣式的時(shí)候,程序會(huì)找到圖紙上點(diǎn)的坐標(biāo),然后賦給圖塊的插入點(diǎn)坐標(biāo),即就在點(diǎn)的坐標(biāo)上插入點(diǎn)樣式圖塊。
在模型空間中插入塊
RetVal=object.InsertBlock(InsPoint,
Name,Xscale,Yscale,ZScale,Rotation[,Password])
批量改變點(diǎn)的點(diǎn)樣式,程序中設(shè)計(jì)的窗體如圖3(a)所示,以埋石圖根點(diǎn)作為例子改變點(diǎn)的樣式,如圖3(b)所示。
圖3 點(diǎn)樣式修改
3.2 批量畫線
在展繪好的地形點(diǎn)上,把需要連成多段線或是直線的地物地貌的特征點(diǎn)號(hào)存在txt文本中,通過VBA程序?qū)崿F(xiàn)繪圖。txt文本如圖4(a)所示,多段線的效果圖如圖4(b)所示。
圖4 批量畫線
(1)創(chuàng)建多段線
Setplineobject1=ThisDrawing.ModelSpace.Ad ?dPolyline(points)
(2)創(chuàng)建直線
Setlineobject1=ThisDrawing.ModelSpace.Ad ?dLine(point1,point2)
3.3 文字變換高度
在CAD圖形中,文字是一個(gè)很重要的屬性信息。在繪圖當(dāng)中,對(duì)文字的修改是經(jīng)常需要的,特別是在需要對(duì)岸上一些構(gòu)筑物的標(biāo)注時(shí),往往不知道哪個(gè)高度大小比較合適,經(jīng)常需要修改比例,想要選中高度在兩個(gè)值之間的文本,或是把選中的文字高度統(tǒng)一加上一個(gè)值,如果能在AutoCAD批量的修改它的高度,這樣就可以大大提高繪圖的效率。筆者針對(duì)CAD的文本的編輯功能比較弱,對(duì)Auto?CAD的文字編輯功能進(jìn)行了二次開發(fā)。文字高度變換的程序流程下:
(1)創(chuàng)建選擇集,從AutoCAD屏幕上框選得到Setsset=ThisDrawing.SelectionSets.Add("name")
創(chuàng)建選擇集的時(shí)候需要注意的是:及時(shí)刪掉不需要的選擇集,不然程序運(yùn)行時(shí)會(huì)出現(xiàn)錯(cuò)誤。創(chuàng)建時(shí)可以防止存在已有的選擇集得代碼如下:
IfNotIsNull (ThisDrawing.SelectionSets.Item("name"))Then
Setsset=ThisDrawing.SelectionSets.Item("name")
sset.Delete
EndIf
sset.SelectOnScreen
(2)把從選擇集里得到得對(duì)象存儲(chǔ)在一個(gè)Ex?portEntity函數(shù),以便調(diào)用對(duì)象:
ExportEntity(ByRefobjCollection()AsVariant,nAsInteger,ByRefEntitys()AsVariant)
在AutoCAD上選擇到的選擇集對(duì)象會(huì)顯示虛線。
(3)程序可以只處理單行文字,也可以只處理多行文字,還可以單多行文字一起處理。
(4)調(diào)用窗體根據(jù)不同的過濾條件得到要做變換的文字對(duì)象。過濾條件有:大于、小于、等于、不等于、在兩個(gè)值之間,窗體如圖6。
在一幅已經(jīng)標(biāo)好尺寸的構(gòu)筑物平面圖,當(dāng)要出圖的時(shí)候發(fā)現(xiàn)他們圖形和尺寸標(biāo)注大小比例不好,需要批量的修改尺寸的高度,原圖有些標(biāo)注尺寸的字壓到了線,如果用手工去改變這些標(biāo)注尺寸的大小值,是一件很費(fèi)時(shí)的事情,但如果用程序去實(shí)現(xiàn)這一過程就簡(jiǎn)單了。用程序操作的效果圖和原圖對(duì)比如圖7。
圖6 文字高度過濾條件窗體
圖7 文字修改效果對(duì)比
在本程序中實(shí)現(xiàn)批量創(chuàng)建點(diǎn)和線,批量展繪地形點(diǎn),點(diǎn)信息包括點(diǎn)的坐標(biāo)、點(diǎn)號(hào)及高程值,根據(jù)地物特征的需要,批量的把這些點(diǎn)連成多段線和直線,也可以在命令行上輸入點(diǎn)號(hào)自動(dòng)繪制多段線和直線。同時(shí),程序?qū)崿F(xiàn)批量變換點(diǎn)的樣式和文字高度,通過本文中程序的實(shí)現(xiàn),在熟悉AutoCAD實(shí)體和對(duì)象集合、它們的屬性和操作方法的前提下,可以充分利用VBA對(duì)AutoCAD進(jìn)行二次開發(fā),明顯地提高繪圖的效率。
[1] 劉克福,牟有忠.VBA與AutoCAD中的二次開發(fā)[J].科技資訊,2007,(15):87-88.
[2] 李 建.利用AutoCADVBA獲取等高線上高程點(diǎn)的方法[J].實(shí)驗(yàn)室研究與探索,2009,28(10):172-175.
[3] 丁國(guó)軍.VBA的二次開發(fā)在工程測(cè)繪中的應(yīng)用[J].科技經(jīng)濟(jì)市場(chǎng),2007(2):9-10.
[4] 李長(zhǎng)勛.AutoCADVBA程序開發(fā)技術(shù)[M].北京:國(guó)防工業(yè)出版社,2005.
[5] 張 帆,鄭立楷,盧擇臨,等.AutoCADVBA二次開發(fā)教程/實(shí)例通系列[M].北京:清華大學(xué)出版社,2006.
[6] 吳業(yè)紅.應(yīng)用VBA技術(shù)進(jìn)行AutoCAD二次開發(fā)[J].電腦知識(shí)與技術(shù),2009,5(10):7950-7951.
(責(zé)任編輯:周 群)
Application of AutoCAD secondary development achievements in survey
PENG Qiu-ping
(Shantou Branch of Guangdong Hydrology Bureau,Shantou 515041,China)
As the computer-aided drawing software that is now widely used,AutoCAD provides good user interface,relatively perfect drawing functions and permits simple operation,but fails to meet the special requirements for sur?vey drawing.Based on a brief introduction of the basic knowledge of AutoCAD,secondary development of AutoCAD was conducted with VBA to solve the actual problems of drawing such as batch plotting points,batch structural poly?lines and lines,batch conversion of point style etc.,so as to permit automatic drawing of bank roads and buildings required for shore topographic survey.
AutoCAD;VBA;development;topographical survey
TP391.72
B
1003-1510(2016)02-0047-04
2016-01-22
彭秋萍(1987-),女,廣東汕頭人,廣東省水文局汕頭水文分局工程師,學(xué)士,主從事水利水電測(cè)量工程。