祁祥禮
【摘 要】本文針對水文測驗潮流數(shù)據(jù)繪圖時間長,大量重復性工作等問題,通過Excel VBA編程語言,批量寫入AutoCAD腳本文件,實現(xiàn)自動化繪制潮流羽狀圖。
【關(guān)鍵字】Excel VBA ;AutoCAD;潮流羽狀圖
中圖分類號: TP391.72 文獻標識碼: 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 引言
隨著計算機硬件和軟件技術(shù)的發(fā)展,各種編程及繪圖軟件應(yīng)運而生,大大提高了繪圖效率和美觀度,在水文數(shù)據(jù)的成果展示中,Surfer、Tecplot、mapinfo等軟件都得到了廣泛的應(yīng)用[1],但有些觀測的數(shù)據(jù),如潮流、余流、懸沙粒徑級配曲線的繪制,繪圖處理非常復雜。
以繪制潮流羽狀圖為例,數(shù)據(jù)一般存儲于excel表格中,再利用AutoCAD根據(jù)數(shù)據(jù)進行矢量繪圖,繪圖操作簡單,但報表中數(shù)據(jù)量大,手動繪制重復勞動多,耗時長,效率較低,且容易出現(xiàn)錯誤,此外,這種繪制方式因個人繪圖習慣不同,沒有統(tǒng)一的出圖標準,隨意性大。
AutoCAD提供SCR文件、DXF文件和AutoLisp等多種接口方式[2],其中SCR文件為腳本文件,可批量寫入繪圖命令,解決重復勞動的弊端,本文即利用Excel VBA編程語言,編寫代碼程序?qū)⒊绷鲾?shù)據(jù)循環(huán)寫入SCR文件,方便AutoCAD程序調(diào)用。
1 圖形各要素的繪制方法
潮流羽狀圖包含潮流矢量起點位置、流速、流向、箭頭、坐標軸及其刻度標注、比例尺及其刻度標注、圖名等要素組成。采用Excel VBA向腳本文件中寫入的相應(yīng)要素的命令分為畫圓、線段、文字標注等命令,各要素涉及到的命令如下。
2 程序的實現(xiàn)
基于Excel成果報表,通過VBA編程語言,將羽狀圖各組成要素以AutoCAD的命令格式批量寫入SCR文件。代碼中采用的函數(shù)命令:
表1 潮流羽狀圖組成要素及AutoCAD命令代碼
1)在潮流報表所在文件夾新建腳本文件并進行寫入操作:
Open ActiveWorkbook.Path & "\" & ActiveSheet.Name & ".scr" For Output As #1
…
…(文件寫入操作)
…
Close #1
2)圖中的各要素均是以圓、線段、文字等命令繪制,因此,將此三個命令以自定義函數(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
‘文字標注的自定義函數(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 工程實例
以某水文測驗項目為例,共9個測站同步進行水文觀測,形成潮流成果報表,報表文件共9個工作表,每個工作表表示1個測站的全潮數(shù)據(jù),每個工作表共有26組數(shù)據(jù),代表26小時整點剖面流速數(shù)據(jù),每組共分6層。若采用普通的交互式CAD命令繪制圖形,需要花費大量的時間進行重復的畫圓、線段、文字標注等,現(xiàn)通過本程序的程序代碼,導入報表的代碼窗體中,進行自動化繪圖。
(1)首先建立Excel VBA與Auto CAD的通信機制,在excel VBA 引用Auto CAD類型庫,操作流程為:在工作表頁面,同時按ALT+F11,點擊”工具”-”引用”,選擇Auto CAD 2005 Type Library,如下圖所示。
(2)按F5彈出程序界面如下圖所示,輸出流速值比例,圖名等后執(zhí)行代碼,輸出相應(yīng)SCR文件。
(3)打開Auto CAD,關(guān)閉對象捕捉功能,在”格式”-”單位”中自定義坐標系,以北方向為0°,選中”順時針(C)”。通過”工具”- ”運行腳本(R)”,選擇SCR文件,即可自動化繪制潮流羽狀圖,如下圖所示:
4 結(jié)束語
在測繪工作中,內(nèi)業(yè)畫圖是整個測繪成果的一個重要組成部分,本文通過Excel VBA 編寫程序軟件,在水文測驗項目中取得了很好的實用效果,實踐表明,程序操作簡單,自動化程度高,可快速、有效的進行繪制工作,節(jié)約了大量人工及時間成本,極大的提高了工作效率。
【參考文獻】
[1]羅文彪,栗金釗.VBA在水工模型試驗流速分布圖繪制中的應(yīng)用[J].中國水運月刊,2016,16(6):191-195.
[2]徐明,劉功平,徐寧生等.Excel VBA與DXF在農(nóng)配網(wǎng)線路路徑圖繪制中的輔助應(yīng)用[J].低碳世界,2017(33):139-140.