久久精品国产精品亚洲_日韩国产高清视频在线_国产日韩中文在线中文字幕_国产精品91一区二区三区

利用VBA程序語言繪制公路縱斷面圖

   2005-11-06 網友推薦 黃少輝 8940

1 前言

縱斷面設計圖是道路縱斷面設計的主要成果,也是道路設計的重要技術文件之一。在縱斷面設計圖上有兩條主要的線:一條是地面線,它是根據中線上各樁點的高程而點繪的一條不規則的折線,反映了沿著中線地面的起伏變化;另一條是設計線,它是經過技術上、經濟上以及美學上等多方面比較后定出的一條規則形狀的幾何線。

公路設計中,在沒有專業設計軟件輔助的情況下,繪制公路縱斷面圖是很繁瑣的事,需要進行大量的、重復的操作,既勞神,又容易出錯。特別在公路外業勘測階段,需要在短時間內將所測量的中樁高程轉化成縱斷面圖上的地面線,才可以進行路線縱坡設計,分析測量成果(選線)是否合理。

如何快速繪制公路縱斷面地面線呢?答案是:利用Microsoft Excel、AutoCAD都提供的VBA功能,編制程序進行繪制,即把Microsoft Excel表格中的樁號、地面高程等信息讀取出來,在AutoCAD文件里以文字、線條的方式寫出來,就可繪出中樁地面線。

2 VBA簡介

Visual Basic for Application(VBA)是Microsoft面向最終用戶的應用軟件編程語言。它最早出現于Microsoft的Excel和Project中,如今VBA已成為VB和所有Office產品的組件。常用的繪圖軟件AutoCAD也已支持VBA作為二次開發工具。

VBA最大特點和最大優點是利用面向對象(OOP)的ActiveX Automation技術,使語言的引擎在技術上與開發環境分離。它的功能在很大程度上依賴于它的客戶顯露的Automation接口。同時,由于VBA是基于ActiveX Automation技術,它可以使用任何Automation技術的應用程序共同工作。

基于AutoCAD的VBA應用程序就是高級程序語言的計算功能與AutoCAD的繪圖功能結合,使用VBA程序語句來控制對AutoCAD圖形的操作。

VBA作為一個集成的開發環境,它提供了高質量的用戶化編程能力,能夠使AutoCAD數據與其它的VBA應用程序,如Microsoft Excel軟件,直接共享,實現無縫連接,交換數據非常方便。

3 工作機理分析

在Microsoft Excel中,與表對應的對象是工作表(Sheet或Worksheet),與每一個表格方格對應的對象是單元格區域(range),它可以僅包括一個單元格(cell),也可以由多個單元格合并而成。工作表對象中的cells屬性,在單元格的選擇方面可以達到與range相同的效果,它是以行(row)和列(gol)作為參數的,對于行和列的選擇可以采用變量的形式。在本例中,可設定工作表(Worksheet)的每一行第一列(cells(i,1))為中樁樁號,每一行第二列(cells(i,2))為對應的地面高程。

在AutoCAD中,沒有與表對應的對象,但可以根據表中前后樁號定義水平距離,根據地面高程定義垂直距離,將表中數據理解為線條與文字對象的集合。這樣,通過讀取Microsoft Excel文件中的最小對象—單元格區域(cells(i,j))的主要信息,利用VBA建立AutoCAD與Excel的通信,然后在AutoCAD文件里指定的圖層、位置畫線條,書寫文字。通過循環,遍歷所有單元格區域(cells(i,j)),邊讀邊寫,最終完成縱斷面地面線的繪制及樁號、地面高程的書寫。

4 具體實現方法

4.1 在AutoCAD中創建Excel應用程序

要編寫存取Excel的應用程序,必須通過VBA將Excel中的對象能夠讓用戶使用,這就需要參考Excel對象的數據庫。其步驟如下:

4.1.1 打開AutoCAD的VBA編輯器(命令:VBAIDE);

4.1.2 選擇“工具”\“引用”項,在彈出的“引用”對話框的“可使用的引用”列表框內,選擇“Microsoft Excel 8.0 Object Library”項;

4.1.3 單擊“確定”按鈕;

4.1.4 接下來使用下列代碼可創建完整的應用程序對象實例:

Dim Excel As Excel.Application

'激活要與之通信的Excel應用程序

On Error Resume Next


Set Excel = GetObject(, "Excel.Application")

If Err <> 0 Then

Set Excel = CreateObject("Excel.Application")

End If

4.2 讀入坐標點畫地面線

4.2.1 設定工作表(Worksheet)的每一行第一列(cells(i,1))為中樁樁號,每一行第二列(cells(i,2))為對應的地面高程。由于公路路線縱斷面圖水平方向比例為1:2000,垂直方向比例為1:200,故讀入時,y坐標應乘以10倍。

4.2.2 以(0,0,0)為原點,以樁號里程為x坐標,以10倍所對應的地面高程為y坐標,0為z坐標,定義某一樁號對應的地面點坐標;然后循環讀取各里程樁號數據信息,定義各樁號所對應的地面點坐標;最后以直線段連接各地面點坐標,則為地面線。

4.2.3 下述代碼可讀入Excel數據信息畫地面線

Dim i As Integer

Dim lineobj As AcadLine

Dim sPnt(0 To 2) As Double

Dim ePnt(0 To 2) As Double

‘讀入坐標畫地面線

Worksheets("sheet1").Activate

i = 3 ‘由第三行起

Do Until cells(i, 1).Value = ""

If cells(i + 1, 1) = 0 Then

Exit Do

End If

sPnt(0) = cells(i, 1).Value

sPnt(1) = 10 * cells(i, 2).Value

sPnt(2) = 0

ePnt(0) = cells(i + 1, 1).Value

ePnt(1) = 10 * cells(i + 1, 2).Value

ePnt(2) = 0

Set lineobj = ThisDrawing.ModelSpace.AddLine(sPnt, ePnt)

i = i + 1

Loop

4.3 樁號及高程的寫入

4.3.1 定義文字的插入位置 以樁號里程為x坐標,0為y坐標,0為z坐標,確定文字的插入點。


4.3.2 以單行文字形式創建樁號及高程文字,定義文字的格式、字體、高度、傾斜角度。插入后的文字應逆時針旋轉90度。

4.4 輔助網格線的繪制

4.4.1 輔助網格線能較為直觀地表示樁號及地面高程的對應關系,有助于縱坡設計;

4.4.2 以樁號里程為x坐標,0為y坐標,0為z坐標,確定網格線第一點;以樁號里程為x坐標,10倍所對應的地面高程為y坐標,0為z坐標,確定網格線第二點;兩點連線,則為網格線。

5 實例

5.1 運行AutoCAD2000程序;

5.2 打開AutoCAD的VBA編輯器(命令:VBAIDE);

5.3 創建成下面的過程及代碼,并運行之:

Sub ZDM()

Dim Excel As Excel.Application

Dim ExcelSheet As Object

Dim ExcelWorkbook As Object

Dim i As Integer

Dim lineobj As AcadLine

Dim klineobj As AcadLine

Dim sPnt(0 To 2) As Double

Dim ePnt(0 To 2) As Double

Dim kPnt(0 To 2) As Double

Dim hPnt(0 To 2) As Double

Dim ksPnt(0 To 2) As Double

Dim kePnt(0 To 2) As Double

Dim dmPnt(0 To 2) As Double

Dim textObj As AcadText

Dim txtStr As String

Dim insPnt As Variant

Dim txtHeight As Double

Dim layObj As AcadLayer

Dim newLayer As AcadLayer

Set layObj = ThisDrawing.Layers.Add("標注")

Set layObj = ThisDrawing.Layers.Add("地面線")

Set layObj = ThisDrawing.Layers.Add("網格線")

Dim atTxtobj As AcadTextStyle

Set atTxtobj = ThisDrawing.ActiveTextStyle

atTxtobj.fontFile = "c:\windows\fonts\simfang.ttf"


'創建Excel應用程序

On Error Resume Next

Set Excel = GetObject(, "Excel.Application")

If Err <> 0 Then

Set Excel = CreateObject("Excel.Application")

End If

'打開Excel表

ExcelName = InputBox("路徑:")

Excel.Workbooks.Open ExcelName

'表格不可見

Excel.Visible = False

'讀入坐標點畫地面線

Worksheets("sheet1").Activate

i = 3

Do Until cells(i, 1).Value = ""

If cells(i + 1, 1) = 0 Then

Exit Do

End If

sPnt(0) = cells(i, 1).Value

sPnt(1) = 10 * cells(i, 2).Value

sPnt(2) = 0

ePnt(0) = cells(i + 1, 1).Value

ePnt(1) = 10 * cells(i + 1, 2).Value

ePnt(2) = 0

Set newLayer = ThisDrawing.Layers("地面線")

ThisDrawing.ActiveLayer = newLayer

newLayer.Color = acWhite

Set lineobj = ThisDrawing.ModelSpace.AddLine(sPnt, ePnt)

If cells(i, 2) = "" Then lineobj.Delete

i = i + 1


Loop

'畫輔助網格線及插入數據

i = 3

Do Until cells(i, 1).Value = ""

'畫輔助網格線

ksPnt(0) = cells(i, 1).Value: ksPnt(1) = 0: ksPnt(2) = 0

kePnt(0) = cells(i, 1).Value: kePnt(1) = 10 * cells(i, 2).Value: kePnt(2) = 0

dmPnt(0) = cells(i, 1).Value: dmPnt(1) = 48: dmPnt(2) = 0

Set newLayer = ThisDrawing.Layers("網格線")

ThisDrawing.ActiveLayer = newLayer

newLayer.Color = acGreen

Set klineobj = ThisDrawing.ModelSpace.AddLine(ksPnt, kePnt)

'插入樁號

Set newLayer = ThisDrawing.Layers("標注")

ThisDrawing.ActiveLayer = newLayer

newLayer.Color = acCyan

a = cells(i, 1).Value

b = Int(a / 1000)

c = Format((a - b * 1000), "000.000")

'd = a - Int(a)

E = "+" + Format(c, "000.000")

If c = 0 Then E = "K" + LTrim(Str(b))

txtStr = E

txtHeight = 4

textObj.Rotation = 3.14159 / 2

insPnt = ksPnt

Set textObj = ThisDrawing.ModelSpace.AddText(txtStr, insPnt, txtHeight)

If cells(i, 2) = "" Then textObj.Delete

'插入地面高程


txtStr = Format(cells(i, 2).Value, "###0.##0")

txtHeight = 4

textObj.Rotation = 3.14159 / 2

insPnt = dmPnt

Set textObj = ThisDrawing.ModelSpace.AddText(txtStr, insPnt, txtHeight)

i = i + 1

Loop

ZoomAll

'該語句用來等待查看顯示結果

MsgBox "按‘確定’鍵將關閉Excel的運行!"

'保存傳過來的數據

ExcelWorkbook.Close

ExcelWorkbook.Save

'關閉Excel應用程序

Excel.Application.Quit

'刪除Excel應用程序實例

Set Excel = Nothing

End Sub

5.4 運行上述代碼后,將會彈出窗口,提示輸入Excel文件的路徑;輸入后回車,就可以生成縱斷面地面線,可以進行路線縱坡設計。

5.5 本程序需要Microsoft Excel 2000和AutoCAD2000運行環境,編譯后通過。

6 結束語

6.1 在經過綜合分析、反復比較定出設計縱坡之后,可以確定各變坡點及其高程、豎曲線要素。在上述代碼中,加入合適的詞句,可以完整地繪制公路縱斷面設計圖。

6.2 公路工程設計中,經常遇到許多類似的大量的、重復的、有邏輯性的操作,只要合理利用VBA,發揮其強大的功能,實現AutoCAD與Excel應用程序的無縫連接,快速交換數據,就可以在短時間內完成所需的設計工作,達到事半功倍的效果。

 
舉報收藏 0打賞 0評論 0
更多>相關評論
暫時沒有評論,來說點什么吧
更多>同類論文
推薦圖文
推薦論文
點擊排行
網站首頁  |  隱私政策  |  版權隱私  |  使用協議  |  聯系方式  |  關于我們  |  排名推廣  |  廣告服務  |  積分換禮  |  網站留言  |  幫助中心  |  網站地圖  |  違規舉報
津ICP備20006083號-112010502100290
 
久久精品国产精品亚洲_日韩国产高清视频在线_国产日韩中文在线中文字幕_国产精品91一区二区三区
一区二区精品在线| 亚洲欧洲日韩综合二区| 国产精品麻豆va在线播放| 国产毛片一区| 亚洲第一页自拍| 一区二区三区免费看| 欧美亚洲三区| 欧美.日韩.国产.一区.二区| 欧美午夜电影完整版| 国产视频在线观看一区二区| 91久久夜色精品国产网站| 亚洲网友自拍| 久热综合在线亚洲精品| 欧美视频导航| 在线观看成人av| 亚洲午夜一区| 免费成人av在线看| 国产精品视频久久久| 亚洲国产精品va在看黑人| 亚洲网站在线观看| 免费美女久久99| 国产乱码精品| 日韩亚洲在线| 久久综合九色综合久99| 国产精品视频yy9299一区| 91久久在线视频| 欧美一区二区在线免费观看| 欧美区一区二| 亚洲成色www8888| 欧美一区网站| 亚洲亚洲精品三区日韩精品在线视频| 欧美一站二站| 欧美三区不卡| 亚洲高清免费在线| 欧美一区二区在线观看| 欧美三级欧美一级| 亚洲黄网站在线观看| 久久精品动漫| 国产精品美女久久久浪潮软件 | 欧美日韩亚洲综合在线| 国内欧美视频一区二区| 亚洲视频在线观看| 欧美精品国产精品| 在线观看日韩av| 欧美在线观看网站| 国产精品久久久久久模特 | 亚洲激情视频在线播放| 欧美中文在线观看国产| 国产精品大片| 一本一本久久a久久精品综合麻豆| 裸体素人女欧美日韩| 国产亚洲欧美一级| 亚洲欧美日韩直播| 老鸭窝91久久精品色噜噜导演| 国产精品女人网站| 一区二区电影免费在线观看| 久久综合99re88久久爱| 国产一区二区三区电影在线观看| 一本色道久久88综合亚洲精品ⅰ| 欧美大秀在线观看| 亚洲电影免费观看高清完整版在线观看 | 国产欧美日韩一级| 一本色道精品久久一区二区三区 | 在线精品一区| 亚洲一线二线三线久久久| 欧美日韩国产丝袜另类| 亚洲欧洲日本一区二区三区| 久久久精品国产一区二区三区| 欧美三级视频| 一区二区三区欧美在线观看| 欧美精品一区二| 亚洲国产综合91精品麻豆| 欧美一区二区三区视频在线观看| 欧美日韩一卡| 艳妇臀荡乳欲伦亚洲一区| 国产一区在线观看视频| 香蕉尹人综合在线观看| 国产精品久久波多野结衣| 亚洲伦理精品| 欧美成人一区二区三区在线观看 | 一区在线免费观看| 午夜日韩激情| 国产亚洲一区二区三区在线播放 | 欧美精品国产一区二区| 亚洲黄色免费电影| 久久人人看视频| 在线高清一区| 久久久久久色| 在线激情影院一区| 久久久久久久一区二区三区| 国内精品**久久毛片app| 久久国产一区二区| 国产一区在线播放| 另类综合日韩欧美亚洲| 亚洲国产精品va在线看黑人动漫| 久久久综合网站| 在线免费观看日本一区| 老司机成人网| 亚洲精品综合| 欧美黄色aa电影| 国产精品99久久久久久白浆小说| 欧美网站在线| 亚洲主播在线播放| 国产乱肥老妇国产一区二| 亚洲欧美日韩国产精品| 国产欧美日韩精品在线| 久久精品欧美| 亚洲黄色av一区| 欧美人与性禽动交情品| 日韩亚洲欧美成人一区| 国产精品青草久久| 久久精品国产69国产精品亚洲| 国内精品久久久久伊人av| 欧美成人午夜77777| 亚洲精品一区二区三区在线观看| 欧美色图首页| 欧美一二区视频| 亚洲国产黄色| 欧美日韩一区二区国产| 香蕉久久一区二区不卡无毒影院| 激情久久久久久久久久久久久久久久| 欧美精品免费观看二区| 亚洲欧美国产高清| 精品va天堂亚洲国产| 欧美日韩国产一区精品一区| 中文av一区二区| 国产午夜精品福利| 欧美紧缚bdsm在线视频| 亚洲欧美成人网| 亚洲电影第1页| 国产精品高潮久久| 久久久久天天天天| 91久久午夜| 国产精品久久久久久久浪潮网站| 久久精品99国产精品日本| 亚洲精品在线免费| 国产精品久久久久久久午夜| 欧美在线在线| 在线综合欧美| 国产午夜亚洲精品不卡| 欧美精品一区二区三区在线看午夜| 午夜精品一区二区三区电影天堂 | 国产精品黄色| 久久偷看各类wc女厕嘘嘘偷窃| 一个色综合导航| 国产精品影音先锋| 美女91精品| 午夜精品久久久久| 亚洲国产精品热久久| 国产视频一区在线观看| 欧美丰满少妇xxxbbb| 亚洲中午字幕| 亚洲欧洲一区二区三区在线观看| 国产精品久久久一区二区| 欧美gay视频激情| 亚洲天堂久久| 在线精品国产成人综合| 国产欧美一区二区三区在线老狼 | 亚洲国产合集| 国产精品久99| 欧美另类videos死尸| 欧美有码在线观看视频| 日韩一级视频免费观看在线| 国内精品伊人久久久久av一坑| 欧美日韩免费看| 欧美一区二区三区免费视频| 亚洲伦理在线免费看| 今天的高清视频免费播放成人 | 亚洲电影av| 国产日韩久久| 欧美天天影院| 欧美国产日产韩国视频| 久久精品91久久久久久再现| 亚洲视频在线一区观看| 亚洲福利一区| 国产欧美日韩在线| 国产精品任我爽爆在线播放| 欧美风情在线| 久久综合一区二区| 久久久久久久久蜜桃| 亚洲欧美日韩视频一区| 亚洲天堂av在线免费观看| 亚洲精品网址在线观看| 国产自产高清不卡| 国产精品婷婷午夜在线观看| 欧美四级电影网站| 欧美日韩成人在线视频| 欧美国产在线电影| 久久久久久久尹人综合网亚洲| 欧美一区二区三区精品| 小辣椒精品导航| 亚洲一级在线| 亚洲性视频网址| 亚洲一区三区电影在线观看| 亚洲网站视频福利| 一区二区电影免费在线观看| 亚洲电影欧美电影有声小说| 国产一区二区精品久久99| 国产欧美日韩专区发布| 国产午夜精品全部视频播放| 国产亚洲欧美另类中文| 国产一区视频在线观看免费| 国产一区二区成人久久免费影院| 国产小视频国产精品|