

作者簡介:許杰(1989—),男,本科,工程師,主要從事水文測驗整編及測量工作。
摘? 要:水文圖形標準化要求較高,樣式很多,包括斷面圖、水位流量關系線圖,以及每月的水位過程、流量過程等圖形。傳統手工繪制節點較多,工作量大且容易出錯,水文圖線的自動繪制及圖形存儲是水文工作中的難點。本文利用Visual Basic編制界面友好、操作方便的圖線自動繪制程序程序,將繪制圖形的參數自動轉換成AutoCAD中所需的坐標數據組和格式,在AutoCAD相應的模板中批量展點和識別,從而快速地繪制出水文各類圖形,提高工作效率和準確率,實現水文繪圖工作無紙化。
關鍵詞:Visual Basic? AutoCAD? 水文? 圖形繪制
中圖分類號:P25
DOI:10.16660/j.cnki.1674-098X.2201-5640-2097
Abstract: The standardization requirements of hydrological graphics are high, and there are many styles, including section diagram, water level and flow relationship diagram, monthly water level process, flow process and other graphics. The traditional manual drawing has many nodes, heavy workload and easy to make mistakes. The automatic drawing and graphic storage of hydrological map line are the difficulties in hydrological work. In this paper, Visual Basic is used to compile an automatic drawing program with friendly interface and convenient operation. The parameters of drawing graphics are automatically converted into the coordinate data group and format required in AutoCAD, and the points are displayed and identified in batch in the corresponding template of AutoCAD, so as to quickly draw various hydrological graphics and improve work efficiency and accuracy, Realize paperless hydrological mapping.
Key Words: Visual Basic; AutoCAD ; Hydrology; Graphic drawing
隨著計算機技術的發展,水文數據已進入現代化信息管理時代,雨量、水位、流量等均可通過軟件進行整匯編,大大減輕了工作量。但是大斷面、水位過程線、水位流量關系線等水文圖線卻仍以手工繪制為主,并作為原始檔案進行存貯。采用手工繪制,費工費時,點繪過程中極易出錯,在每年的各級資料審查過程中,審核工作量巨大,而且檔案存貯、查詢及應用極不方便[1]。
AutoCAD是由美國Autodesk(歐特克)公司開發的自動計算機輔助設計軟件,可以使用它來創建、瀏覽、管理、打印、輸出、共享及準確應用富含信息的設計圖形。利用AutoCAD強大的繪圖功能,逐漸用高效率、高精度的CAD繪圖技術替代傳統的水文繪圖工作優勢明顯[2]。由于水文圖形樣式很多,水文圖形數據與CAD繪圖坐標比例的轉換較為繁瑣,利用Visual Basic編制繪圖程序,可以大大簡化數據轉換工作。下文以繪制實測大斷面圖為例,說明Visual Basic和CAD繪制水文圖形的方法[3]。
1 繪制底圖
在AutoCAD中,所有繪制的對象物體都是繪制在各自圖層上,在圖層之上可以分別存放各種不同的繪圖信息,并且可以極其便捷地對這些圖層進行編輯、刪除并且不影響其他圖層數據。故為了便于圖形標準化繪制、管理及保存,需在CAD中建立不同圖層,繪制厘米格紙作為底圖,同時根據擬繪制圖形的要求進行標注[4]。
1.1 圖層設置
根據實際需要設置五十分線、五分線、厘米線、網格線、軸線等若干圖層,同時根據年份測次設置不同斷面圖層,便于管理和修改。各土層線型采用默認,線寬及顏色設置如下。
五十線:線寬0.30mm,顏色134(索引),RGB(0,153,153)。
五分線:線寬0.13mm,顏色4(索引),RGB(0,255,255)。
厘米線:線寬0.20mm,顏色132(索引),RGB(0,204,204)。
網格線:線寬0.05mm,顏色4(索引),RGB(0,255,255)。
軸線:線寬0.05mm,顏色255(索引),RGB(255,255,255)。
1.2 確定坐標原點
繪制好底圖之后,利用“ucs”命令指定坐標原點。具體方法是:直接輸入“ucs”回車,“N”回車,然后在屏幕上點擊底圖左下角點即可。
1.3 繪制厘米格紙
選擇“5厘米”圖層,勾選“正交”,選擇“工具”菜單-“畫直線”-“線段”,然后輸入“0,0,0”回車,再輸入“75”回車,這樣得到一個長度為75cm的水平直線。右鍵重復直線,選擇直線左端點鼠標稍向上移輸入“50”回車。使用偏移或者陣列命令繪制圖線,其他間距的網格線用同樣的方法便可簡單完成,將不同層的方格網制成后,在同一窗口打開就得到了一張完整的底圖。
1.4 確定比例、繪制坐標軸、圖例等
按照水文整編規范要求確定起點距、高程的比例和曲線位置,結合總體圖線布局合理、美觀,然后選擇“坐標軸”圖層,在合適位置繪制坐標軸,利用文字工具進行比例標注。在同一窗口打開各圖層就得到了一張完整的底圖。
2 程序設計與實現
利用Visual Basic簡易的操作界面和強大的數據處理功能將起點距、高程等數據進行處理,并根據設定的坐標比例和斷面在圖紙上的位置進行比例換算,從而得到CAD軟件能夠識別的數組[5]。
2.1 程序界面
程序主要由數據轉換、信息錄入和圖形展示3個部分組成。“數據轉換”中錄入需繪制的斷面數據,包括起點距和高程,同時能顯示轉換后的CAD坐標數據。信息錄入包括斷面信息、圖形尺寸、參數錄入和說明4項,其中“斷面信息”包括斷面圖的測站和日期、測次,方便斷面圖數據中數據庫中的保存和提取;“圖形尺寸”根據水文常用圖紙分為35cm×50cm和50cm×75cm,可在繪圖時進行選擇;“參數錄入”包括擬繪制圖形的原點坐標和坐標比例尺;“說明”則是對4項錄入參數的解釋說明,方便操作者理解。圖形展示則可以在斷面數據和轉換參數錄入后生成斷面圖,可以直觀地展示斷面繪制的成果,同時也方便參數的調整。程序運行界面如圖1所示。
2.2 轉換原理
數據的處理要以CAD圖紙中原點坐標的定位為基礎,根據繪制的斷面樣式,選擇確定轉換參數“原點坐標”和“比例尺”。
“原點坐標”分為起點距和高程兩部分,為設置米厘格紙坐標軸原點的圖上坐標,如上圖原點坐標為(-5,-1)。
“比例尺”也分為起點距和高程兩部分,為設置米厘格紙中5cm(一大格)代表的圖上起點距(或高程)的長度,如上圖起點距和高程的比例尺分別為5和1。
在CAD底圖繪制中,原點坐標為(0,0),CAD底圖中50為圖上5cm,將斷面圖數據轉換成CAD繪圖數據,即圖形坐標(起點距,高程)轉換為CAD坐標(X,Y)。假設斷面圖零點位置坐標為(A0,B0),起點距和高程比例尺分別為m、n,斷面起點距、高程數據為(A,B),轉換成CAD坐標為(X,Y),則:
X=(A×(50/m))-(A0×(50/m))
Y=(B×(50/n))-(B0×(50/n))
2.3 代碼實現
程序主要包括繪圖、轉換CAD數據和保存數據3個模塊,具體示例如下。
2.3.1 繪圖模塊
錄入斷面數據和轉換參數后,點擊“繪圖”按鈕,即可在圖形展示界面查看圖形繪制成果,主要使用的是MSChart控件,圖形設置為二維散點圖,主要代碼為(以50×75為例):
'設置圖形的外觀及網格
MSChart1.ChartType = VtChChartType2dXY
With MSChart1
.Plot.SeriesCollection(1).Pen.Width = 40
.Plot.SeriesCollection(1).Pen.Style = VtPenStyleSolid
.Plot.Axis(VtChAxisIdX).ValueScale.MajorDivision = 15
.Plot.Axis(VtChAxisIdY).ValueScale.MajorDivision = 10
.Plot.Axis(VtChAxisIdX).ValueScale.MinorDivision = 5
.Plot.Axis(VtChAxisIdY).ValueScale.MinorDivision = 5
End With
'繪制圖形
MyData(i, 0) = Val(Flex1.TextMatrix(i + 1, 1))
MyData(i, 1) = Val(Flex1.TextMatrix(i + 1, 2))
MSChart1.ChartData = MyData
3.3.2 轉換模塊
將斷面數據轉換成CAD繪圖數據,并在數據轉換表格中顯示,主要代碼如下:
Flex1.TextMatrix(o, 3) = Format(Flex1.TextMatrix(o, 1) * (50 / Val(Txt10.Text)) - Val(Txt3.Text) * (50 / Val(Txt10.Text)), "0.0")
Flex1.TextMatrix(o, 4) = Format(Flex1.TextMatrix(o, 2) * (50 / Val(Txt11.Text)) - Val(Txt4.Text) * (50 / Val(Txt11.Text)), "0.00")
3.2.3 保存模塊
經數據轉換后,得到的是CAD坐標數據,而CAD展圖需要的數據為dat文本數據,主要格式為(序號,,X,Y,Z),本功能根據上述轉換的CAD坐標數據生成能供CAD讀取的dat文本文件,主要代碼為:
'將表格中的序號、X、Y三列數據存入數組
For i = 2 To d + 1
a(i) = Flex1.TextMatrix(i, 0)
x(i) = Flex1.TextMatrix(i, 3)
y(i) = Flex1.TextMatrix(i, 4)
Next i
'將數組數據以固定格式存入dat文件中
Open App.Path & "CAD展點.dat" For Output As #1
Print #1, a(2) & ","; "l"; ","; x(2) & ","; y(2) & "," & "0"
For i = 3 To d + 1
Print #1, a(i) & ","; "+"; ","; x(i) & ","; y(i) & "," & "0"
Next i
Close
4 圖形繪制與輸出
利用軟件將斷面數據經轉換生成dat數據后,只需打開前述繪制的底圖,點擊“繪圖處理”“簡碼識別”,再選中生成的dat數據,斷面圖便完成了繪制,只需要將繪制的斷面圖線編入之前新建的圖層即可。
AutoCAD不僅允許將所繪圖形以不同樣式通過繪圖儀或打印機輸出,還能夠將不同格式的圖形導入AutoCAD或將AutoCAD圖形以其他格式輸出,如JPG格式、PDF格式等,如圖2所示。因此,當圖形繪制完成之后可以使用多種方法將其輸出[6],可以將圖形打印在圖紙上,也可以創建成JPG或PDF文件以供其他應用程序使用。
5 結語
利用Visual Basic和CAD進行數據轉換并繪制圖形,還可用于水流線、水位過程等水文圖形的繪制。本程序采用良好的人機交互界面,利用了VB和CAD的良好耦合性,大大提升了在站整編的工作效率,減少了差錯率和工作量,能夠提供美觀、整潔的成果,并提高成果的遞送、保存、查詢、對照等便捷實用性。利用VB和AutoCAD繪制水文圖形在本隊已得到了較廣泛的應用,并取得了良好的效果。
參考文獻
[1] 王靜,岳成鯤,楊釗,等.山東黃河水文曲線系統的開發及應用[J].人民黃河,2018,40(4):5-8.
[2] 陳浩,歲秀珍,虞獻軍,等.利用ObjectARX.NET技術的地下管線成圖及屬性管理軟件的實現及應用[J].測繪地理信息,2021,46(6):150-153.
[3] 趙祥岍,于洋,陳定超.基于VB的AutoCAD自動繪圖技術在隧道工程中的應用[J].山西建筑,2019,45(11):193-194.
[4]司萌,余霞,李登峰,等.基于VB的電機沖片圖形自動繪制技術[J].機械設計與制造,2019(9):176-180.
[5]程相琛,郭進平,李角群,等.基于Auto CAD的三維巷道可視化建模及應用[J].采礦技術,2021,21(6):150-154.
[6]徐利麗,鄔京虹,夏棟.建筑CAD與建筑工程制圖的融合——評《建筑CAD》[J].建筑結構,2021,51(13):153.