付少波,王 超
(廣東省水利水電科學研究院,廣東省水動力學應用研究重點實驗室,廣東 廣州 510635)
?
VBA在AutoCAD渠道橫斷面繪圖中的應用
付少波,王 超
(廣東省水利水電科學研究院,廣東省水動力學應用研究重點實驗室,廣東 廣州 510635)
通過VBA編程,建立AutoCAD的模型空間和Excel表格中特征參數聯系,批量繪制渠道橫斷面。通過實例證明該方法可有效減少工作量,提高工作效率。
AutoCAD;VBA;Excel;橫斷面
渠道設計是農田水利設計的重要組成部分。在渠道設計中,設計人員常以Excel為工具來進行渠道各項水利特征數據計算與試算,并根據有關計算結果利用AutoCAD繪制圖紙。渠道橫斷面繪圖過程存在操作步驟重復率高、準確度差且批量修改困難等問題,給繪圖人員帶來很大困擾。
經過筆者探索與實踐,通過AutoCAD 內嵌的VBA(Visual Basic For Applications)進行二次開發,可以實現Excel中有關特征參數直接批量導入AutoCAD中[1-2],并以此為依據繪制渠道橫斷面圖。這種方法提高了繪圖效率,形成了統一格式,提高了繪圖準確度,便于批量修改。
1.1 渠道橫斷面繪圖中遇到的問題
渠道橫斷面設計的過程中,為滿足各設計階段橫斷面間距的要求,常常存在斷面形式變化不大的情況下,繪制許多尺寸不同,形式類似圖形的問題。渠道橫斷面繪圖過程中要反復參照Excel表格計算出的數據,再根據相關特征參數進行繪圖。例如設計渠底高程、設計水位、渠道幾何尺寸等。
以廣東省仁化縣農田水利重點縣(2013年度)灌區明渠改造為例,項目區有1條總長12.886 km干渠需要進行改造,施工圖方案為在原有矩形渠道基礎上,襯砌擋墻并將渠道加高至設計值,部分渠段根據需要加設蓋板。根據施工圖出圖要求每隔50 m繪制1張渠道橫斷面圖,該干渠全段需繪制258個橫斷面,繪圖任務工作量很大[3]。
1.2 程序編制思路
以AutoCAD中內嵌的VBA為工具,建立Excel表格中相關數據與AutoCAD的模型空間連接,通過參數(見圖1)的調用與循環,依次分圖層完成繪圖、標注、位移等操作,設計思路見圖2。

圖1 基礎數據表

圖2 關鍵方法實現的流程示意
2.1 數據提取
利用循環嵌套語句將Excel數據表中與繪圖有關的數據讀取到二維數組內。主要代碼如下:
Setxlapp=CreateObject(“excel.application”)
Setxlbook=xlapp.workbooks.Open(“C:Desktop1.xlsx”)′打開Excel工作簿的路徑
xlapp.Visible=False
Set xlsheet=xlbook.worksheets(“渠道改造特性表”) ′打開Excel中的工作表
Dim w(1 To 259, 10) As String′建立二維數組讀取數據
For j=1 To 10
For i=2 To 259 Step 1
w(i, j)=xlsheet.cells(i, j)
Val (w(i, j)) ′將讀取的數據轉化為數值型
i=i+1
Next i
j=j+1
Next j
2.2 圖形繪制
通過讀取變量定出繪制圖形坐標,用劃線命令[4]完成繪圖。以渠道底邊為例,主要代碼部分如下:
Dim mospace As AcadModelSpace
Set mospace=ThisDrawing.ModelSpace
Dim lineobj As AcadLine
DimiAs Integer
For i=2 To 259 Step 1
j=5
startpoint(0)=0+a
startpoint(1)=0+c
startpoint(2)=0
endpoint(0)=startpoint(0)+w(i, j)
endpoint(1)=0+c
endpoint(2)=0
′ThisDrawing.ActiveLayer=ThisDrawing.Layers.Item(“原有渠道斷面”)′將當前圖層設置為原有渠道斷面圖層
Set lineobj=mospace.AddLine(startpoint, endpoint) ′底邊
i=i+1
Next i
其他線位置以此為基準點,依次引用相關變量繪出,代碼不重復列出。
2.3 尺寸標注繪制
定義標注樣式,尺寸界限位置,偏移值等屬性,通過標注命令完成標注。以底邊標注[5]為例,主要代碼部分如下:
ThisDrawing.ActiveLayer=ThisDrawing.Layers.Item(“標注”)′將當前圖層設置為標注圖層
ThisDrawing.ActiveDimStyle=ThisDrawing.DimStyles.Item(“TestDimStyle”)’將TestDimStyle視為當前標樣式
Dim retval As AcadDimAligned
Dim ExtLinelPoint(0 To 2) As Double
Dim ExtLine2Point(0 To 2) As Double
Dim textposition(0 To 2) As Double
ExtLinelPoint(0)=startpoint(0)
ExtLinelPoint(1)=startpoint(1)-0.6 ′尺寸界限偏移值
ExtLinelPoint(2)=0
ExtLine2Point(0)=endpoint(0)
ExtLine2Point(1)=endpoint(1)-0.6 ′尺寸界限偏移值
ExtLine2Point(2)=0
textposition(0)=1
textposition(1)=startpoint(1)-0.8 ′尺寸標注文字位置
textposition(2)=1
Set retval=ThisDrawing.ModelSpace.AddDimAligned(ExtLinelPoint, ExtLine2Point, textposition)’添加尺寸標注
2.4 塊類型標注添加
在模型空間添加塊,定義塊名稱,通過相關參數調用確定位置,執行插入塊命令。以添加水位標識為例,主要代碼部分如下:
ThisDrawing.ActiveLayer= ThisDrawing.Layers.Item(“水位”) ′將當前圖層設置為水位標志圖層
Dim blockObj As AcadBlockReference
Dim insertblock1(0 To 2) As Double
insertblock1(0)=startpoint(0)+kd(i) / 2′確定水位標識位置
insertblock1(1)=startpoint(1)+sw(i)+0.1
insertblock1(2)=startpoint(2)
Set blockObj=ThisDrawing.ModelSpace.InsertBlock(insertblock1, “water level”, 1, 1, 1, 0) ′ 插入塊
根據需要可完成添加打斷線、漿砌石等塊類型符號的插入,代碼不重復列出。
2.5 文字類標注添加
調用樁號變量并加上指定字符串,組成要求的格式,確定插入位置,通過添加文字命令,添加樁號文字。以添加樁號為例,主要代碼部分如下:
ThisDrawing.ActiveLayer=ThisDrawing.Layers.Item(“樁號”) ′將當前圖層設置為樁號圖層
Dim textObj As AcadText ′增加樁號
Dim textString As String
Dim insertionPoint(0 To 2) As Double
Dim height As Double
textString=zh(i) & “改造斷面圖”
insertionPoint(0)=startpoint(0)
insertionPoint(1)=startpoint(1)-1.03
insertionPoint(2)=0
height=0.15’文字高度
Set textObj=ThisDrawing.ModelSpace.AddText(textString, insertionPoint, height)’插入樁號文字
根據需要可添加其它文字類標注信息,代碼不重復列出。
2.6 圖形位置的判定
在循環外定義a、b、c、d,初始值均為0。進入循環則進行累加和計數,用來判斷是否換行,是否執行完畢。主要代碼如下:
在繪圖循環內
a=a+9.1 ′x軸間距
b=b+1
d=d+1
If b=3 Then ′換行
a=0 ′x的值
b=0 ′計數歸零
c=c-6.36 ′y軸間距
End If
If d=8 Then ′計數除圖簽位置的圖形
a=0 ′x的值
c=c-8.28 ′y軸間距
b=0
d=0 ′計數歸零
End If

圖3 執行結果示意
通過基于AutoCAD的VBA二次開發,建立Excel數據表與AutoCAD模型空間連接,實現了批量化、標準化、快速化、屬性化作圖。本例如按普通方法繪圖,1人需要10 d左右完成繪制。采用上述方法程序開發時間1 d,執行時間約2 min,節約了時間,提高了效率,程序執行結果見圖3。
圖形各部分間采用分圖層繪圖,各圖層屬性易修改。如遇方案調整可根據修改后的參數直接執行程序,進行重新繪圖,提高了繪圖的效率和準確性。但此方法對于一些比較短的渠道,編程部分略顯瑣碎,效率提升并不明顯。此方法在較長的渠道繪圖的處理中,有明顯優勢。對河堤、公路等其它線性工程橫斷面繪制有參考意義。
[1] 李長勛.AutoCAD VBA 程序開發技術[M].北京:國防工業出版社,2004.
[2] 張帆.AutoCAD 二次開發教程[ M] .北京:清華大學出版社,2006.
[3] 廣東省水利廳.廣東省中型灌區續建配套與節水改造工程初步設計報告編制指南[R].廣州: 廣東省水利廳,2011.
[4] 符裕紅,張代杰. AutoCAD VBA 在渠道縱斷面設計中的應用[J].中國農村水利水電,2009,9(1):133-136.
[5] 黎富忠, 顏景順. 在AutoCAD 中實現斷面數據的自動生成與繪圖[J].廣西水利水電,2011(1):32-34.
(本文責任編輯 王瑞蘭)
Application of VBA to AutoCAD Channel Cross Section Drawing
FU Shaobo, WANG Chao
(Guangdong Research Institute of Water Resources and Hydropower, Key Laboratory of Hydrodynamics Research, Guangzhou 510635, China)
This paper carries on procedural programming by using VBA. It connects the model space of AutoCAD with the characteristic data in the Excel that the programming draws the batch construction of ditches at one shot. It is proved that this method can both reduce workload and improve work efficiency.
AutoCAD, VBA, Excel, cross-section
2016-07-18;
2016-07-30
付少波(1990),男,本科,助理工程師,從事水利水電工程設計工作。
TV391.72
A
1008-0112(2016)08-0061-04