欧美日本高清一区_成人福利网站在线观看11_欧美日本在线视频中文字字幕_国产在线精品一区免费香蕉

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

   2005-11-06 網(wǎng)友推薦 黃少輝 9460

1 前言

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

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

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

2 VBA簡介

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

VBA最大特點(diǎn)和最大優(yōu)點(diǎn)是利用面向?qū)ο螅∣OP)的ActiveX Automation技術(shù),使語言的引擎在技術(shù)上與開發(fā)環(huán)境分離。它的功能在很大程度上依賴于它的客戶顯露的Automation接口。同時(shí),由于VBA是基于ActiveX Automation技術(shù),它可以使用任何Automation技術(shù)的應(yīng)用程序共同工作。

基于AutoCAD的VBA應(yīng)用程序就是高級(jí)程序語言的計(jì)算功能與AutoCAD的繪圖功能結(jié)合,使用VBA程序語句來控制對(duì)AutoCAD圖形的操作。

VBA作為一個(gè)集成的開發(fā)環(huán)境,它提供了高質(zhì)量的用戶化編程能力,能夠使AutoCAD數(shù)據(jù)與其它的VBA應(yīng)用程序,如Microsoft Excel軟件,直接共享,實(shí)現(xiàn)無縫連接,交換數(shù)據(jù)非常方便。

3 工作機(jī)理分析

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

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

4 具體實(shí)現(xiàn)方法

4.1 在AutoCAD中創(chuàng)建Excel應(yīng)用程序

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

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

4.1.2 選擇“工具”\“引用”項(xiàng),在彈出的“引用”對(duì)話框的“可使用的引用”列表框內(nèi),選擇“Microsoft Excel 8.0 Object Library”項(xiàng);

4.1.3 單擊“確定”按鈕;

4.1.4 接下來使用下列代碼可創(chuàng)建完整的應(yīng)用程序?qū)ο髮?shí)例:

Dim Excel As Excel.Application

'激活要與之通信的Excel應(yīng)用程序

On Error Resume Next


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

If Err <> 0 Then

Set Excel = CreateObject("Excel.Application")

End If

4.2 讀入坐標(biāo)點(diǎn)畫地面線

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

4.2.2 以(0,0,0)為原點(diǎn),以樁號(hào)里程為x坐標(biāo),以10倍所對(duì)應(yīng)的地面高程為y坐標(biāo),0為z坐標(biāo),定義某一樁號(hào)對(duì)應(yīng)的地面點(diǎn)坐標(biāo);然后循環(huán)讀取各里程樁號(hào)數(shù)據(jù)信息,定義各樁號(hào)所對(duì)應(yīng)的地面點(diǎn)坐標(biāo);最后以直線段連接各地面點(diǎn)坐標(biāo),則為地面線。

4.2.3 下述代碼可讀入Excel數(shù)據(jù)信息畫地面線

Dim i As Integer

Dim lineobj As AcadLine

Dim sPnt(0 To 2) As Double

Dim ePnt(0 To 2) As Double

‘讀入坐標(biāo)畫地面線

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 樁號(hào)及高程的寫入

4.3.1 定義文字的插入位置 以樁號(hào)里程為x坐標(biāo),0為y坐標(biāo),0為z坐標(biāo),確定文字的插入點(diǎn)。


4.3.2 以單行文字形式創(chuàng)建樁號(hào)及高程文字,定義文字的格式、字體、高度、傾斜角度。插入后的文字應(yīng)逆時(shí)針旋轉(zhuǎn)90度。

4.4 輔助網(wǎng)格線的繪制

4.4.1 輔助網(wǎng)格線能較為直觀地表示樁號(hào)及地面高程的對(duì)應(yīng)關(guān)系,有助于縱坡設(shè)計(jì);

4.4.2 以樁號(hào)里程為x坐標(biāo),0為y坐標(biāo),0為z坐標(biāo),確定網(wǎng)格線第一點(diǎn);以樁號(hào)里程為x坐標(biāo),10倍所對(duì)應(yīng)的地面高程為y坐標(biāo),0為z坐標(biāo),確定網(wǎng)格線第二點(diǎn);兩點(diǎn)連線,則為網(wǎng)格線。

5 實(shí)例

5.1 運(yùn)行AutoCAD2000程序;

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

5.3 創(chuàng)建成下面的過程及代碼,并運(yùn)行之:

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("標(biāo)注")

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

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

Dim atTxtobj As AcadTextStyle

Set atTxtobj = ThisDrawing.ActiveTextStyle

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


'創(chuàng)建Excel應(yīng)用程序

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

'讀入坐標(biāo)點(diǎn)畫地面線

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

'畫輔助網(wǎng)格線及插入數(shù)據(jù)

i = 3

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

'畫輔助網(wǎng)格線

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("網(wǎng)格線")

ThisDrawing.ActiveLayer = newLayer

newLayer.Color = acGreen

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

'插入樁號(hào)

Set newLayer = ThisDrawing.Layers("標(biāo)注")

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

'該語句用來等待查看顯示結(jié)果

MsgBox "按‘確定’鍵將關(guān)閉Excel的運(yùn)行!"

'保存?zhèn)鬟^來的數(shù)據(jù)

ExcelWorkbook.Close

ExcelWorkbook.Save

'關(guān)閉Excel應(yīng)用程序

Excel.Application.Quit

'刪除Excel應(yīng)用程序?qū)嵗?o:p>

Set Excel = Nothing

End Sub

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

5.5 本程序需要Microsoft Excel 2000和AutoCAD2000運(yùn)行環(huán)境,編譯后通過。

6 結(jié)束語

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

6.2 公路工程設(shè)計(jì)中,經(jīng)常遇到許多類似的大量的、重復(fù)的、有邏輯性的操作,只要合理利用VBA,發(fā)揮其強(qiáng)大的功能,實(shí)現(xiàn)AutoCAD與Excel應(yīng)用程序的無縫連接,快速交換數(shù)據(jù),就可以在短時(shí)間內(nèi)完成所需的設(shè)計(jì)工作,達(dá)到事半功倍的效果。

 
舉報(bào)收藏 0打賞 0評(píng)論 0
更多>相關(guān)評(píng)論
暫時(shí)沒有評(píng)論,來說點(diǎn)什么吧
更多>同類論文
推薦圖文
推薦論文
點(diǎn)擊排行
網(wǎng)站首頁  |  隱私政策  |  版權(quán)隱私  |  使用協(xié)議  |  聯(lián)系方式  |  關(guān)于我們  |  排名推廣  |  廣告服務(wù)  |  積分換禮  |  網(wǎng)站留言  |  幫助中心  |  網(wǎng)站地圖  |  違規(guī)舉報(bào)
津ICP備20006083號(hào)-112010502100290
 
欧美日本高清一区_成人福利网站在线观看11_欧美日本在线视频中文字字幕_国产在线精品一区免费香蕉
欧美资源在线观看| 国产极品尤物在线| 亚洲精品中文字幕无码蜜桃| 精品九九九九| 蜜月aⅴ免费一区二区三区| 精品国产一二三四区| 欧美激情精品久久久久久| 欧美日本啪啪无遮挡网站| 久久成人精品视频| 中日韩在线视频| 午夜精品久久久久久久无码| 日韩在线观看a| 人人干视频在线| 日韩一级免费看| 欧美日韩国产高清视频| 狠狠色狠狠色综合人人| 国产精品一区二区3区| 97精品免费视频| 国产a级片免费看| 久久精品国产久精国产一老狼| 国产精品涩涩涩视频网站| 久久成人精品一区二区三区| 亚洲欧美日韩不卡| 日韩亚洲欧美一区二区| 精品无码av无码免费专区| 成人精品久久av网站| 国产成人亚洲综合青青| 国产精品偷伦视频免费观看国产| 久久亚洲电影天堂| 亚洲精品欧洲精品| 欧美精品一区二区三区免费播放| 国产亚洲综合视频| 久久免费国产视频| 国产精品第100页| 亚洲高清精品中出| 欧美精品与人动性物交免费看| 国产肉体ⅹxxx137大胆| 久久综合中文色婷婷| 国产精品美乳一区二区免费| 一区二区免费在线视频| 欧美综合激情| 91免费国产视频| 国产精品久久中文字幕| 亚洲在线播放电影| 国语自产精品视频在线看| 久久久女人电视剧免费播放下载| 国产精品毛片一区视频| 视频在线99| 国产嫩草一区二区三区在线观看| 久久久久亚洲精品| 亚洲精品女av网站| 国产在线观看一区二区三区| 久久精品国产精品亚洲色婷婷| 欧美日本在线视频中文字字幕| 日韩国产一级片| 国产精品99久久久久久久久久久久| 国产精品极品美女在线观看免费| 欧美一级日本a级v片| 国产伦精品一区二区三区视频免费| 日韩一二三在线视频播| 亚洲精品国产精品国自产观看| 国内视频一区| 色偷偷噜噜噜亚洲男人| 亚洲国产精品www| 国产伦理久久久| 久久夜色精品亚洲噜噜国产mv| 欧美一区免费视频| 久久国产精品视频在线观看| 无码人妻aⅴ一区二区三区日本 | 少妇久久久久久被弄到高潮| 国产美女视频免费| 国产精品日韩欧美一区二区三区| 性高潮久久久久久久久| 99免费在线视频观看| 欧美日韩国产999| 国产中文欧美精品| 国产精品久久久久77777| 欧美第一黄网| 国产精品免费一区二区三区| 欧美亚洲免费在线| 久久精品国产免费观看| 欧美性一区二区三区| 俺去了亚洲欧美日韩| 欧美性猛交久久久乱大交小说| 色久欧美在线视频观看| 欧美视频免费播放| 国产精品日韩三级| 黄页网站大全在线观看| 国产精品久久亚洲7777| 国产综合久久久久久| 久久资源免费视频| 国产精品一区=区| 中文字幕一区二区三区精彩视频| av 日韩 人妻 黑人 综合 无码| 亚洲影影院av| 国产成人亚洲综合青青| 人妻久久久一区二区三区| 国产成人av网| 欧美性在线观看| 国产精品电影网| 国产精品香蕉av| 午夜精品在线视频| 久久精彩视频| 欧美日本韩国一区二区三区| 国产精品久久久久久av| 国产精品一区二区三区不卡| 亚洲一区二区在| 久久99精品久久久久久久久久| 青青在线视频观看| 国产精品久久99久久| 国产精选在线观看91| 亚洲精品第一区二区三区| 久久精品二区| 韩国v欧美v日本v亚洲| 欧美激情亚洲精品| 久久综合色一本| 精品人妻人人做人人爽| 久久99亚洲热视| 国产二级片在线观看| 欧美人与性禽动交精品| 美女av一区二区三区| 91久久久精品| 欧美 国产 综合| 亚洲色精品三区二区一区| 久久久久久免费看| 国产一区国产精品| 日本一区二区久久精品| 国产精品老女人视频| 91成人福利在线| 免费看黄在线看| 视频一区亚洲| 美日韩精品免费视频| 久久久国产精品一区二区三区| 激情五月亚洲色图| 亚洲va欧美va国产综合久久| 国产精品久久在线观看| 久久久人人爽| 国产欧美久久久久久| 日韩精品久久一区二区三区| 精品国产乱码久久久久| 久久久久久亚洲精品中文字幕| 国产女大学生av| 欧美精品一区二区三区三州| 亚洲欧美日韩精品综合在线观看| xxx一区二区| 91国产精品91| 国产欧美综合精品一区二区| 日本高清一区| 一区二区日本伦理| 国产精品电影久久久久电影网| 国产a级全部精品| 成人免费91在线看| 韩日午夜在线资源一区二区| 日韩欧美在线电影| 亚洲精品影院| 欧美片一区二区三区| 国产精品无码电影在线观看| 久久这里只有精品23| 国产精品一 二 三| 国产这里只有精品| 欧美变态另类刺激| 日韩欧美一区二区三区久久婷婷| 久久99视频精品| 久久国产精品电影| 久久久精品电影| 日韩中文字幕视频| 国产a级黄色大片| 久久人人97超碰精品888 | 国产精品96久久久久久又黄又硬| 日韩午夜视频在线观看| 亚洲精品永久www嫩草| 欧美激情视频网| 欧美久久久精品| 精品不卡在线| 欧美成年人在线观看| 久久精品夜夜夜夜夜久久| 日本不卡免费新一二三区| 婷婷亚洲婷婷综合色香五月| 亚洲一区尤物| 亚洲精品高清视频| 欧美一区二区色| 少妇av一区二区三区无码 | 久久久久久国产精品美女| 国产精品麻豆va在线播放| 久久久久欧美| 北条麻妃一区二区三区中文字幕 | 欧美一区二区三区电影在线观看| 亚洲欧洲国产精品久久| 亚洲乱码国产一区三区| 亚洲永久激情精品| 亚洲精品国产精品久久| 亚洲 中文字幕 日韩 无码| 亚洲第一精品区| 视频一区二区综合| 日本在线观看一区二区| 青青草影院在线观看| 欧美日韩成人一区二区三区| 国内精品久久影院| 成人一区二区在线| 国产精品69久久久久|