祁祥禮
【摘 要】本文針對水文測驗(yàn)潮流數(shù)據(jù)繪圖時(shí)間長,大量重復(fù)性工作等問題,通過Excel VBA編程語言,批量寫入AutoCAD腳本文件,實(shí)現(xiàn)自動(dòng)化繪制潮流羽狀圖。
【關(guān)鍵字】Excel VBA ;AutoCAD;潮流羽狀圖
中圖分類號: TP391.72 文獻(xiàn)標(biāo)識碼: A 文章編號: 2095-2457(2018)14-0063-002
DOI:10.19694/j.cnki.issn2095-2457.2018.14.027
Using Excel VBA to realize power flow feather diagram in AutoCAD
QI Xiang-li
(Tianjin water transport engineering survey and Design Institute Tianjin Key Laboratory of water transport engineering surveying and mapping, Tianjin 300456, China)
【Abstract】In this paper, in view of the long time of drawing the tidal current data and a lot of repetitive work, this paper writes the AutoCAD script file in batch through the programming language of Excel VBA, and realizes the automatic drawing of the tidal plume.
【Key words】Excel VBA; AutoCAD; Tidal plumes
0 引言
隨著計(jì)算機(jī)硬件和軟件技術(shù)的發(fā)展,各種編程及繪圖軟件應(yīng)運(yùn)而生,大大提高了繪圖效率和美觀度,在水文數(shù)據(jù)的成果展示中,Surfer、Tecplot、mapinfo等軟件都得到了廣泛的應(yīng)用[1],但有些觀測的數(shù)據(jù),如潮流、余流、懸沙粒徑級配曲線的繪制,繪圖處理非常復(fù)雜。
以繪制潮流羽狀圖為例,數(shù)據(jù)一般存儲(chǔ)于excel表格中,再利用AutoCAD根據(jù)數(shù)據(jù)進(jìn)行矢量繪圖,繪圖操作簡單,但報(bào)表中數(shù)據(jù)量大,手動(dòng)繪制重復(fù)勞動(dòng)多,耗時(shí)長,效率較低,且容易出現(xiàn)錯(cuò)誤,此外,這種繪制方式因個(gè)人繪圖習(xí)慣不同,沒有統(tǒng)一的出圖標(biāo)準(zhǔn),隨意性大。
AutoCAD提供SCR文件、DXF文件和AutoLisp等多種接口方式[2],其中SCR文件為腳本文件,可批量寫入繪圖命令,解決重復(fù)勞動(dòng)的弊端,本文即利用Excel VBA編程語言,編寫代碼程序?qū)⒊绷鲾?shù)據(jù)循環(huán)寫入SCR文件,方便AutoCAD程序調(diào)用。
1 圖形各要素的繪制方法
潮流羽狀圖包含潮流矢量起點(diǎn)位置、流速、流向、箭頭、坐標(biāo)軸及其刻度標(biāo)注、比例尺及其刻度標(biāo)注、圖名等要素組成。采用Excel VBA向腳本文件中寫入的相應(yīng)要素的命令分為畫圓、線段、文字標(biāo)注等命令,各要素涉及到的命令如下。
2 程序的實(shí)現(xiàn)
基于Excel成果報(bào)表,通過VBA編程語言,將羽狀圖各組成要素以AutoCAD的命令格式批量寫入SCR文件。代碼中采用的函數(shù)命令:
表1 潮流羽狀圖組成要素及AutoCAD命令代碼
1)在潮流報(bào)表所在文件夾新建腳本文件并進(jìn)行寫入操作:
Open ActiveWorkbook.Path & "\" & ActiveSheet.Name & ".scr" For Output As #1
…
…(文件寫入操作)
…
Close #1
2)圖中的各要素均是以圓、線段、文字等命令繪制,因此,將此三個(gè)命令以自定義函數(shù)表示,方便循環(huán)調(diào)用,優(yōu)化代碼結(jié)構(gòu)。
‘畫圓的自定義函數(shù):
Function Yuan(X As Single,Y As Single,Spd As Single)
Dim R As Single
R=0.02
If Spd >0Then
Print #1,"Circle"
Print #1,CStr(X)&","& CStr(Y)
Print #1,CStr(R)
End If
End Function
‘畫線段的自定義函數(shù)
Function XianDuan(X As Single,Y As Single,Spd As Single,Dir As Single)
If Spd>0 Then
Print #1,"Line"
Print #1,CStr(X) &","&CStr;(Y)
Print #1,"@"& CStr(Spd)&"<"&CStr;(Dir)&vbCrLf;
End If
End Function
‘文字標(biāo)注的自定義函數(shù)
Function BiaoZhu(X As Single,Y As Single,H As Single,Ang As Single,Str_bz As String)
Print #1,"-text "& CStr(X)&","& CStr(Y)& " "& CStr(H)& " "& CStr(Ang)&" "& Str_bz & " "
End Function
3 工程實(shí)例
以某水文測驗(yàn)項(xiàng)目為例,共9個(gè)測站同步進(jìn)行水文觀測,形成潮流成果報(bào)表,報(bào)表文件共9個(gè)工作表,每個(gè)工作表表示1個(gè)測站的全潮數(shù)據(jù),每個(gè)工作表共有26組數(shù)據(jù),代表26小時(shí)整點(diǎn)剖面流速數(shù)據(jù),每組共分6層。若采用普通的交互式CAD命令繪制圖形,需要花費(fèi)大量的時(shí)間進(jìn)行重復(fù)的畫圓、線段、文字標(biāo)注等,現(xiàn)通過本程序的程序代碼,導(dǎo)入報(bào)表的代碼窗體中,進(jìn)行自動(dòng)化繪圖。
(1)首先建立Excel VBA與Auto CAD的通信機(jī)制,在excel VBA 引用Auto CAD類型庫,操作流程為:在工作表頁面,同時(shí)按ALT+F11,點(diǎn)擊”工具”-”引用”,選擇Auto CAD 2005 Type Library,如下圖所示。
(2)按F5彈出程序界面如下圖所示,輸出流速值比例,圖名等后執(zhí)行代碼,輸出相應(yīng)SCR文件。
(3)打開Auto CAD,關(guān)閉對象捕捉功能,在”格式”-”單位”中自定義坐標(biāo)系,以北方向?yàn)?°,選中”順時(shí)針(C)”。通過”工具”- ”運(yùn)行腳本(R)”,選擇SCR文件,即可自動(dòng)化繪制潮流羽狀圖,如下圖所示:
4 結(jié)束語
在測繪工作中,內(nèi)業(yè)畫圖是整個(gè)測繪成果的一個(gè)重要組成部分,本文通過Excel VBA 編寫程序軟件,在水文測驗(yàn)項(xiàng)目中取得了很好的實(shí)用效果,實(shí)踐表明,程序操作簡單,自動(dòng)化程度高,可快速、有效的進(jìn)行繪制工作,節(jié)約了大量人工及時(shí)間成本,極大的提高了工作效率。
【參考文獻(xiàn)】
[1]羅文彪,栗金釗.VBA在水工模型試驗(yàn)流速分布圖繪制中的應(yīng)用[J].中國水運(yùn)月刊,2016,16(6):191-195.
[2]徐明,劉功平,徐寧生等.Excel VBA與DXF在農(nóng)配網(wǎng)線路路徑圖繪制中的輔助應(yīng)用[J].低碳世界,2017(33):139-140.