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

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

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

1 前言

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

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

如何快速繪制公路縱斷面地面線呢?答案是:利用Microsoft Excel、AutoCAD都提供的VBA功能,編制程序進(jìn)行繪制,即把Microsoft Excel表格中的樁號、地面高程等信息讀取出來,在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接口。同時,由于VBA是基于ActiveX Automation技術(shù),它可以使用任何Automation技術(shù)的應(yīng)用程序共同工作。

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

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

3 工作機(jī)理分析

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

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

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

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

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

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

4.1.2 選擇“工具”\“引用”項(xiàng),在彈出的“引用”對話框的“可使用的引用”列表框內(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))為中樁樁號,每一行第二列(cells(i,2))為對應(yīng)的地面高程。由于公路路線縱斷面圖水平方向比例為1:2000,垂直方向比例為1:200,故讀入時,y坐標(biāo)應(yīng)乘以10倍。

4.2.2 以(0,0,0)為原點(diǎn),以樁號里程為x坐標(biāo),以10倍所對應(yīng)的地面高程為y坐標(biāo),0為z坐標(biāo),定義某一樁號對應(yīng)的地面點(diǎn)坐標(biāo);然后循環(huán)讀取各里程樁號數(shù)據(jù)信息,定義各樁號所對應(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 樁號及高程的寫入

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


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

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

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

4.4.2 以樁號里程為x坐標(biāo),0為y坐標(biāo),0為z坐標(biāo),確定網(wǎng)格線第一點(diǎn);以樁號里程為x坐標(biāo),10倍所對應(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)

'插入樁號

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)行上述代碼后,將會彈出窗口,提示輸入Excel文件的路徑;輸入后回車,就可以生成縱斷面地面線,可以進(jìn)行路線縱坡設(shè)計。

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

6 結(jié)束語

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

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

 
舉報收藏 0打賞 0評論 0
更多>相關(guān)評論
暫時沒有評論,來說點(diǎn)什么吧
更多>同類論文
推薦圖文
推薦論文
點(diǎn)擊排行
網(wǎng)站首頁  |  隱私政策  |  版權(quán)隱私  |  使用協(xié)議  |  聯(lián)系方式  |  關(guān)于我們  |  排名推廣  |  廣告服務(wù)  |  積分換禮  |  網(wǎng)站留言  |  幫助中心  |  網(wǎng)站地圖  |  違規(guī)舉報
津ICP備20006083號-112010502100290
 
欧美日本高清一区_成人福利网站在线观看11_欧美日本在线视频中文字字幕_国产在线精品一区免费香蕉
亚洲精品高清国产一线久久| 国产日韩欧美另类| 99三级在线| 色999五月色| 九九九久久久| 欧美 日韩 国产在线观看| 国产精品久久久影院| 国产在线视频在线| 亚洲自偷自拍熟女另类| 久久婷婷人人澡人人喊人人爽| 日韩**中文字幕毛片| 日韩有码片在线观看| 激情视频一区二区| 九九热精品视频| 久久久女女女女999久久 | 日本在线精品视频| 色青青草原桃花久久综合| 韩国成人一区| 一级一片免费播放| 日韩视频亚洲视频| 高清国语自产拍免费一区二区三区| 色狠狠久久av五月综合|| 久久精品中文字幕| www.亚洲天堂网| 欧美怡春院一区二区三区| 久久99亚洲精品| 久久精品日产第一区二区三区乱码| 黄色片一级视频| 亚洲中文字幕无码中文字| 久久久久久久久久网| 国产日韩精品入口| 日本韩国在线不卡| 精品综合久久久久久97| 久久国产亚洲精品无码| 国产无套粉嫩白浆内谢的出处| 午夜欧美性电影| 国产精品免费观看高清| 91国产高清在线| 国内精品久久久久影院优| 欧美一区二区三区四区在线 | 青草热久免费精品视频| 最新国产精品久久| www.欧美精品| 91免费国产网站| 精品一区二区三区免费毛片| 色一情一乱一伦一区二区三区| 久久中文字幕国产| 久久久久久久一| 99久热re在线精品视频| 黄色免费福利视频| 日本伊人精品一区二区三区介绍| 色综合久综合久久综合久鬼88| 久久综合福利| 国产精品一区二区三区久久| 欧美高清视频一区| 日本午夜精品电影| 欧美亚洲免费在线| 国产不卡av在线| 国产又黄又猛视频| 痴汉一区二区三区| 国产精品久久av| 久久久日本电影| 国产一区二区高清视频| 午夜精品三级视频福利| 久久天天躁狠狠躁老女人| 久久精品国产久精国产一老狼| 欧美极品日韩| 青青青国产在线视频| 伊人久久婷婷色综合98网| 久久亚洲精品毛片| 国产精品偷伦免费视频观看的| 久久riav二区三区| 久久人人九九| 91av在线播放| 91av福利视频| 7777奇米亚洲综合久久| 91九色蝌蚪国产| 91久久偷偷做嫩草影院| av 日韩 人妻 黑人 综合 无码| 国产日韩av高清| 国产日韩欧美综合| 久久久免费观看| 国产一区二区精品免费| 亚州精品天堂中文字幕| 精品国产91亚洲一区二区三区www| 久久精品xxx| 91免费看蜜桃| 国产青春久久久国产毛片| 欧美中日韩一区二区三区| 午夜精品美女自拍福到在线| 国产精品都在这里| 久久久久久这里只有精品| 91免费看片网站| 国产伦精品一区二区三区免费视频 | 久久久国产视频| 97久久精品午夜一区二区| 免费国产在线精品一区二区三区| 色狠狠久久av五月综合| 亚洲一区二区免费在线| 久久综合88中文色鬼| 精品国模在线视频| 久久久久久久久久婷婷| 久久婷婷国产综合尤物精品| 99视频日韩| 成人av色在线观看| 国产伦精品一区二区三| 国产色婷婷国产综合在线理论片a| 91成人免费观看网站| 成人免费福利视频| 91精品国产99久久久久久| 阿v天堂2017| 91成人福利在线| 久久久久久久久四区三区| 久久天堂电影网| 欧美激情图片区| 午夜精品一区二区三区在线观看 | 午夜精品久久久久久久男人的天堂| 日日鲁鲁鲁夜夜爽爽狠狠视频97| 青青草视频国产| 国产在线视频2019最新视频| 国产美女三级视频| 久久伦理网站| 国产精品爽爽ⅴa在线观看| 国产精品丝袜久久久久久高清| 久久五月天综合| 亚洲精品蜜桃久久久久久| 秋霞在线一区二区| 精品视频无码一区二区三区| 成人精品视频99在线观看免费| 久久久之久亚州精品露出| 久久精品这里热有精品| 精品麻豆av| 性色av香蕉一区二区| 欧美中文字幕在线视频| 国产女人精品视频| 国产成人精品免高潮在线观看| 国产精品丝袜久久久久久消防器材| 欧美日韩国产成人在线| 欧美一区二区三区免费观看| 欧洲午夜精品久久久| 国产欧美日韩一区二区三区| 久久久久久草| 久久国产精品久久久久| 人妻熟女一二三区夜夜爱| 国产精品中文在线| 丝袜一区二区三区| 亚洲在线免费看| 狠狠色综合网站久久久久久久| 国产精品∨欧美精品v日韩精品| 国产精品久久久久久久久久99| 亚洲a区在线视频| 国产一区二区在线免费| 国产夫妻自拍一区| 欧美成年人网站| 日韩三级在线播放| 成人精品视频久久久久| 久久九九热免费视频| 亚洲欧美精品| 精品一区二区三区无码视频| 国产成人亚洲综合91精品| 色综合久久久888| 欧美激情专区| 国产成人精品久久二区二区 | 日本亚洲欧洲色α| 国产日韩精品在线播放| 精品国产一区二区三区在线观看| 亚洲精品人成| 国产精品综合网站| 国产精品免费一区二区三区在线观看| 欧美一区二区色| 成人免费视频97| 国产精品美女xx| 日韩精品xxxx| 久久久国产精品一区二区三区| 欧美激情区在线播放| 免费毛片一区二区三区久久久| 久久久久久久久久久91| 婷婷久久五月天| 99久久精品免费看国产一区二区三区 | 久久精品国产精品亚洲精品色| 中文字幕日韩精品一区二区| 麻豆一区二区三区在线观看| www.久久久久| 日本高清不卡三区| 国产精品99久久久久久久久| 中文字幕在线乱| 国产伦精品一区二区三区高清| 国产精品久久精品| 免费在线观看毛片网站| 久久综合伊人77777蜜臀| 日韩国产小视频| 久久久视频免费观看| 亚洲va国产va天堂va久久| 97久久精品在线| 亚洲一区二区免费在线| 91九色精品视频| 天天综合五月天| 久久久综合香蕉尹人综合网| 日韩一级片免费视频| 久久天堂国产精品|