• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看

      ?

      基于VBA 的線路縱斷面圖的自動(dòng)繪制

      2010-01-01 01:44:42邱榮茂王大鳴張德瑩
      圖學(xué)學(xué)報(bào) 2010年2期
      關(guān)鍵詞:圖塊路肩縱斷面

      邱榮茂, 王大鳴, 張 濤, 張德瑩

      (1. 石家莊鐵道學(xué)院土木工程分院,河北 石家莊 050043; 2. 石家莊鐵道學(xué)院機(jī)械工程分院,河北 石家莊 050043; 3. 同濟(jì)大學(xué)土木工程學(xué)院建筑工程系虛擬建筑教研室,上海 200092)

      1 概 述

      線路縱斷面圖包括圖樣和資料表兩部分,圖樣包括地面縱斷面線、設(shè)計(jì)路肩線以及橋涵、隧道、車站、水準(zhǔn)點(diǎn)等構(gòu)造物的標(biāo)識(shí)等內(nèi)容;資料表包括線路平面、里程樁號(hào)、地面高程、設(shè)計(jì)坡度、路肩高程、工程地質(zhì)特征等[1-2]。圖1 是某鐵路線路的一段縱斷面圖。

      由于線路縱斷面圖包含的內(nèi)容較多,手工繪圖或者直接用AutoCAD 命令逐步繪制的效率很低,工作量極大,需要進(jìn)行大量繁復(fù)的操作,非常容易出錯(cuò),而且繪圖精度不高。本文介紹利用VBA 對(duì)AutoCAD 進(jìn)行自主定制,從而實(shí)現(xiàn)自動(dòng)繪制線路縱斷面圖的方法。

      圖1 線路縱斷面圖實(shí)例

      2 線路縱斷面圖的數(shù)據(jù)組織

      線路縱斷面圖是線路設(shè)計(jì)的最終成果,在縱斷面設(shè)計(jì)過(guò)程中已經(jīng)得到了有關(guān)的設(shè)計(jì)數(shù)據(jù),例如,不同里程的地面高程、路肩高程、設(shè)計(jì)坡度以及橋、涵等構(gòu)筑物的結(jié)構(gòu)類型等,所有這些設(shè)計(jì)數(shù)據(jù)都與里程有關(guān)。從便于對(duì)數(shù)據(jù)進(jìn)行處理的角度出發(fā),可將縱斷面圖的設(shè)計(jì)數(shù)據(jù)組織成以里程為主數(shù)據(jù)的Excel 數(shù)據(jù)表。以圖1 為例,可以組織成下面的4 個(gè)表(表1~表4)。

      在表3 中,第六列是根據(jù)橋涵的不同類型創(chuàng)建的帶有屬性的圖塊的塊名,第四列表示橋涵的結(jié)構(gòu)類型。對(duì)于大中橋有可能采用兩種不同類型的梁,此時(shí)第四列為梁一的類型特征,第五列為梁二的類型特征;若只有一種梁,則第五列為空。

      表1 里程-地面高程、路肩高程

      表2 里程-設(shè)計(jì)坡度

      表3 里程-橋涵

      表4 里程-平面曲線

      3 AutoCAD VBA 和Excel 之間的交互

      3.1 AutoCAD VBA 對(duì)Excel 的引用[3]

      進(jìn)入VBA 集成開(kāi)發(fā)環(huán)境,選擇“工具”→“引用”菜單項(xiàng),打開(kāi)如圖2 所示的對(duì)話框,鉤選Microsoft Excel 11.0 Object Library(Excel 類型庫(kù),其版本與計(jì)算機(jī)上安裝的Office 版本有關(guān),11.0 是Office 2003 對(duì)應(yīng)的版本)、Microsoft Visual Basic for Applications Extensibility 5.3(VBA 類型庫(kù))兩項(xiàng)。

      3.2 從Excel 表中讀取數(shù)據(jù)

      在引用了Excel 和VBA 類型庫(kù)后,就可以編寫(xiě)VBA 代碼對(duì)Excel 數(shù)據(jù)表進(jìn)行訪問(wèn)。

      首先聲明一個(gè)指定類ID 的對(duì)象變量,并用CreateObject 函數(shù)創(chuàng)建下面Microsoft Excel 引用:

      在 CreateObject 函數(shù)創(chuàng)建并返回一個(gè)對(duì)Microsoft Excel 對(duì)象的引用后,可以用集合Workbooks 的Open 方法打開(kāi)一個(gè)Excel 文檔,其位置就是Excel 數(shù)據(jù)表所在位置。例如,在上面創(chuàng)建Microsoft Excel 引用后欲打開(kāi)絕對(duì)路徑為“F:數(shù)據(jù)匯總.xls”的工作簿文件(假設(shè)該文件中包含上述4 個(gè)Excel 數(shù)據(jù)表),可以運(yùn)用下面的語(yǔ)句:

      ExcelApp.Workbooks.Open “F: 數(shù) 據(jù) 匯總.xls”

      圖2 引用Excel 類型庫(kù)和VBA IDE 類型庫(kù)

      要訪問(wèn)已經(jīng)打開(kāi)的工作簿中的工作表可以使用工作簿的Sheets 屬性,例如下面代碼將打開(kāi)當(dāng)前活動(dòng)工作簿“F:數(shù)據(jù)匯總.xls”中名為“里程-地面高程、路肩高程”的工作表,并賦予對(duì)象變量ExcelSheet:

      Dim ExcelSheet As Excel.Worksheet

      Set ExcelSheet = ExcelApp.ActiveWorkbook. Sheets("里程-地面高程、路肩高程")

      最后用ExcelSheet 的Cells 屬性從打開(kāi)的工作表中讀取指定的單元格的數(shù)據(jù)。例如:

      ExcelSheet.Cells(i, j).value 可獲得Excel 的“里程-地面高程、路肩高程”表第i 行第j 列的單元格的值。利用讀出的數(shù)據(jù),AutoCAD 就可以在繪圖窗口中繪圖。

      4 線路縱斷面圖構(gòu)成要素的數(shù)字分析及VBA 實(shí)現(xiàn)

      4.1 線路縱斷面示意圖

      線路縱斷面圖的上半部為線路縱斷面示意圖,表示線路縱斷面概貌和沿線建筑物特征。細(xì)線表示地面線,粗線表示路肩線。線路上相應(yīng)的里程位置應(yīng)該標(biāo)出大小橋涵、中間站和立體交叉等圖形符號(hào)。

      4.1.1 地面線及路肩線

      地面線和路肩線只是高程不同,繪制的方法相同,用AutoCAD 中的多段線來(lái)繪制,可以實(shí)現(xiàn)地面線和路肩線的連貫和一致,便于管理和修改。

      在當(dāng)前AutoCAD 文檔的模型空間中創(chuàng)建二維多段線的方法為:

      Set plineObj=ThisDrawing.ModelSpace. AddLightWeightPolyline(points)

      其中plineObj 為所創(chuàng)建的二維多段線的對(duì)象變量,points 為存儲(chǔ)二維多段線頂點(diǎn)二維坐標(biāo)的數(shù)組名,它所含有的坐標(biāo)值個(gè)數(shù)必須為偶數(shù)且至少為4 個(gè)(即兩個(gè)頂點(diǎn))。

      在這里不是把構(gòu)成二維多段線的所有頂點(diǎn)坐標(biāo)一次性放入points 數(shù)組,而是采用了向多段線添加頂點(diǎn)的方法AddVertex[4]:

      plineObj.AddVertex VertexNumber, newVertex

      newVertex 為存儲(chǔ)了新加入頂點(diǎn)二維坐標(biāo)值的數(shù)組,VertexNumber 是新加入頂點(diǎn)在整個(gè)多段線頂點(diǎn)順序數(shù)列中的號(hào)碼,以初始點(diǎn)為0、累計(jì)遞增所得。

      4.1.2 橋涵的標(biāo)識(shí)與大、中橋示意圖

      (1) 橋、涵的標(biāo)識(shí)

      橋、涵的標(biāo)識(shí)采用AutoCAD 屬性塊的方式插入。

      首先定義如圖3 所示的幾種類型的圖塊,分別代表立體交叉(如框架涵)、涵洞(包括圓涵和蓋板涵)、大中橋,每種圖塊都包含中間的圖素和兩側(cè)的屬性,左側(cè)的屬性代表橋梁或涵洞的類型特征,右側(cè)的屬性代表該涵洞的里程標(biāo)記(離開(kāi)百米樁的距離)或橋梁的名稱和里程;由于有些大、中橋采用兩種不同類型的梁,所以統(tǒng)一在圖素的左側(cè)定義兩個(gè)屬性,第一個(gè)代表梁1 的類型特征,第二個(gè)代表梁2 的類型特征。如果只有一種類型的梁,則左側(cè)第二個(gè)屬性(梁2 的類型特征)為空。

      圖3 帶屬性的圖塊

      上述圖塊在插入時(shí),它們的插入點(diǎn)的橫、縱坐標(biāo)可分別從它們的里程、路肩高程得到。

      1) VBA 在AutoCAD 中插入圖塊的方法

      Set objBlkRef = ThisDrawing.ModelSpace. InsertBlock(BlkInsertPnt, BlkName, 1, 1, 1, 0)

      其中BlkInsertPnt 為保存插入點(diǎn)三維坐標(biāo)的數(shù)組名,BlkName 為所要插入的塊名(表3 中第六列的數(shù)據(jù)),后面4 個(gè)常數(shù)分別為X、Y、Z 向的比例因子和圖塊插入時(shí)的旋轉(zhuǎn)角度。

      2) 取得圖塊屬性,然后更改圖塊屬性值

      varAttributes = objBlkRef.GetAttributes

      用圖塊對(duì)象的GetAttributes 方法獲得插入圖塊的屬性,varAttributes 是用于存儲(chǔ)圖塊objBlkRef 屬性的變體數(shù)組。

      接著就可以逐個(gè)更改屬性值:

      varAttributes(0).textstring = “+” & excelsheet. Cells(i , 3)

      varAttributes(1).textstring = excelsheet.Cells (i , 4)

      若插入的圖塊名為“DZHQ”,則

      varAttributes(0).textstring = excelsheet.Cells (i , 7)

      varAttributes(2).textstring = excelsheet.Cells (i , 5)

      (2) 大中橋示意圖

      大中橋示意圖的繪制比標(biāo)識(shí)要復(fù)雜些。Excel數(shù)據(jù)表“里程-橋涵表”只是給出了大中橋的中心里程和橋長(zhǎng),當(dāng)需要繪制大中橋的前后橋臺(tái)時(shí)需要計(jì)算出它們各自的里程,而“里程-橋涵表”數(shù)據(jù)表里并不能正好設(shè)有此里程,從而也并不能得出橋臺(tái)插入點(diǎn)的高程,并且橋梁的上下承結(jié)構(gòu)需要在前后橋臺(tái)之間繪制距橋面一定距離的橋面平行線,此平行線兩個(gè)端點(diǎn)高程的獲得存在同樣的問(wèn)題。

      繪制橋臺(tái)的方法如下:

      1) 中心里程增減一半的橋長(zhǎng)即可得出前后橋臺(tái)的里程。

      2) 在繪制路肩線的數(shù)據(jù)表里搜索比前橋臺(tái)插入里程稍大的百米樁號(hào)i1和比后橋臺(tái)插入里程稍小的百米樁號(hào)i2。

      3) 從這兩個(gè)百米樁號(hào)即可得到前后橋臺(tái)的近似高程,其精度已足夠滿足繪圖要求。

      4) 利用得到的前后橋臺(tái)里程和高程,繪制前后橋臺(tái)。

      橋面平行線兩個(gè)端點(diǎn)的里程和前后橋臺(tái)的里程一致,而兩個(gè)端點(diǎn)的高程需要將橋臺(tái)上端點(diǎn)的高程同時(shí)向下(或上)移動(dòng)少量距離(約1~1.5m);橋面平行線的繪制可根據(jù)i1和i2的關(guān)系分為3 種情況:① i1<i2:此情況如圖4(a)所示。首先需要連接前端點(diǎn)和i1處、后端點(diǎn)和i2處的橋面平行線,最后用和繪制路肩線同樣的方法補(bǔ)充出從i1到i2的橋面平行線;② i1=i2和i1>i2:此兩種情況分別如圖4(b)、圖4(c)所示。只需要連接前端點(diǎn)和后端點(diǎn)(只是統(tǒng)一地前端點(diǎn)取i2處的高程、后端點(diǎn)取i1處的高程)即可。

      圖4 橋臺(tái)與百米樁的3 種相對(duì)位置

      (3) 橋涵標(biāo)識(shí)符號(hào)的挪動(dòng)

      當(dāng)前后兩個(gè)標(biāo)識(shí)符號(hào)的插入點(diǎn)距離較近時(shí),前后標(biāo)識(shí)符號(hào)的顯示會(huì)相互影響,因此需要將標(biāo)識(shí)符號(hào)挪動(dòng)一定距離,如圖5 所示。方法是:

      先從理論插入點(diǎn)引出一條折線,向后面牽引一個(gè)適當(dāng)距離,然后以此處作為圖塊的真正插入點(diǎn),和其它地方一樣正常插入,即可實(shí)現(xiàn)標(biāo)識(shí)符號(hào)的挪動(dòng)。

      為了圖形繪制的緊湊,挪動(dòng)的距離可按下列的方法計(jì)算:

      L=n×字高×1.2-d

      其中 n 為前后兩個(gè)圖形符號(hào)之間描述文字行數(shù)(有些大中橋采用兩種類型的梁架設(shè),這時(shí)描述文字為3 行),其值等于屬性個(gè)數(shù);d 為前后兩個(gè)標(biāo)識(shí)符號(hào)的理論插入點(diǎn)間的距離。

      4.2 線路資料和數(shù)據(jù)

      線路縱斷面圖的下半部為線路資料和數(shù)據(jù),自下而上順序有:線路平面、里程樁號(hào)、地面高程、設(shè)計(jì)坡度、路肩高程、工程地質(zhì)特征等欄目。其中,地面高程和路肩高程實(shí)現(xiàn)繪制的方法雷同,而工程地質(zhì)和它們的標(biāo)記方法也基本一致,均是書(shū)寫(xiě)文本,而文本的內(nèi)容就是Excel 數(shù)據(jù)表中的數(shù)據(jù)(因?yàn)槠拗?,本文未給出地質(zhì)特征的Excel 數(shù)據(jù)表)。例如,書(shū)寫(xiě)地面高程、路肩高程所需要的數(shù)據(jù)就是表1 中的第二、三列數(shù)據(jù);表中的第一列(里程)數(shù)據(jù)既是橫坐標(biāo),要書(shū)寫(xiě)的里程樁號(hào)文本也可從中稍加處理而得到。下面主要分析線路平面示意圖和設(shè)計(jì)坡度的實(shí)現(xiàn)方法。

      圖5 橋涵標(biāo)識(shí)符號(hào)的挪動(dòng)

      4.2.1 線路平面示意圖

      如圖6,線路平面示意圖主要由左曲線、右曲線、夾直線、里程標(biāo)記、曲線要素等組成,它們的繪圖數(shù)據(jù)來(lái)自“里程-平面曲線”表。

      圖6 線路平面示意圖

      (1) 緩圓點(diǎn)和圓緩點(diǎn)里程的確定

      緩圓點(diǎn)的里程=曲線起點(diǎn)里程+緩和曲線長(zhǎng)度l。

      圓緩點(diǎn)的里程=曲線終點(diǎn)里程–緩和曲線長(zhǎng)度l。

      (2) 里程標(biāo)記

      因?yàn)閵A直線均在左曲線或右曲線之間,所以左曲線或右曲線的終點(diǎn)便是夾直線的起點(diǎn),夾直線的終點(diǎn)便是左曲線或右曲線的起點(diǎn),不論左曲線、右曲線還是夾直線,它們交界處(緩直點(diǎn)或直緩點(diǎn))均需要繪制比里程標(biāo)記稍長(zhǎng)的豎向短線,它們的長(zhǎng)度均一致,在豎線的左側(cè)要標(biāo)注該點(diǎn)的里程標(biāo)記(該點(diǎn)到百米標(biāo)的距離且字頭向左)。因此,要截取Excel 數(shù)據(jù)表里完整里程數(shù)的后4位,并換算單位成m。其實(shí)現(xiàn)的VBA 代碼如下:

      textstring =Format_

      (Val(Right(Format(excelsheet.Cells(i , 1).Value, "0.00000"), 4)) * 0.01, "00.00")

      1) 用Format(excelsheet.Cells(i , 1).Value, "0.00000")將取出的單元格數(shù)值統(tǒng)一成5 位小數(shù)的千米數(shù)。

      2) 在其中取右邊后4 位用Right(…, 4),顯然此時(shí)這4 個(gè)數(shù)字的單位已經(jīng)變成了cm 。

      3) 變換單位成m,需要將上邊的數(shù)縮小0.01倍。

      4) 顯示成小數(shù)點(diǎn)前后均為2 位的形式用Format 函數(shù)實(shí)現(xiàn):Format(…, "00.00")。

      然后,即可在緩直點(diǎn)(或圓直點(diǎn))及直緩點(diǎn)(或直圓點(diǎn))處標(biāo)記里程,應(yīng)用添加文字的方法

      Txtpt 為文字插入點(diǎn)坐標(biāo)數(shù)組,25000 規(guī)定了字高。

      接著用Rotation 方法將它們逆時(shí)針旋轉(zhuǎn)π/2: textObj.Rotation = Atn(1) * 2

      Atn(1)是1 的反正切值,即π/4,所以上式將得到π/2 的精確值。

      (3) 曲線要素

      曲線要素包括轉(zhuǎn)向角(α)、曲率半徑(R)、緩和曲線長(zhǎng)(l)、切線長(zhǎng)(T)和曲線長(zhǎng)(L)等。它們均是直接從Excel 數(shù)據(jù)表讀出,可以逐個(gè)用添加文字的方法將其繪出。但為了省略每次均為它們獨(dú)立設(shè)置文字位置的麻煩,本程序的實(shí)現(xiàn)依然采用插入圖塊的方法,只不過(guò)這個(gè)圖塊不含有任何圖形元素,只含有由文本組成的塊屬性。各文本屬性在圖塊中的顯示位置設(shè)置好以后,只需定位好該圖塊的插入點(diǎn),然后更改屬性即可。

      4.2.2 設(shè)計(jì)坡度

      只需將前后兩個(gè)變坡點(diǎn)連線即可得坡度線。變坡點(diǎn)的x 坐標(biāo)可由里程得到,y 坐標(biāo)則固定在上下兩條水平線上。在變坡點(diǎn)處需要設(shè)置和平面曲線一樣的短豎線,并標(biāo)記變坡點(diǎn)里程,所以實(shí)現(xiàn)的方法也一樣,但需要注意的是緊跟在平坡后面的變坡點(diǎn)的標(biāo)記不能和其它變坡點(diǎn)一樣標(biāo)記在豎線的左側(cè),應(yīng)該調(diào)整到右側(cè),否則其顯示會(huì)與坡度線重疊。

      坡度線的上方應(yīng)顯示坡度值(以‰為單位);坡度線的下方應(yīng)顯示其坡長(zhǎng)。為了使整個(gè)標(biāo)記顯示完整而勻稱,平坡的坡度和坡長(zhǎng)可顯示在該段坡度線的中部上側(cè)和下側(cè);上坡的坡度顯示在該段坡度線的上方中部偏左位置,坡長(zhǎng)顯示在該段坡度線的下方中部偏右位置;下坡的坡度顯示在該段坡度線的上方中部偏右位置,坡長(zhǎng)標(biāo)記顯示在該段坡度線的下方中部偏左位置。

      5 結(jié) 束 語(yǔ)

      (1) 根據(jù)上述方法研制開(kāi)發(fā)的線路縱斷面圖自動(dòng)繪圖軟件,已經(jīng)用于朔黃鐵路竣工圖詳細(xì)縱斷面圖的繪制,用戶反映良好;本文圖1 就是用所開(kāi)發(fā)的程序自動(dòng)繪制的。

      (2) 由于篇幅所限,本文只對(duì)線路縱斷面圖中的主要要素進(jìn)行較詳細(xì)的分析并給出VBA實(shí)現(xiàn)方法,還有一些要素(如水準(zhǔn)點(diǎn)、斷鏈、車站等的標(biāo)識(shí),這些要素在縱斷面圖中所占的比重較?。┍疚奈醋鹘榻B,但繪制的方法與橋涵標(biāo)識(shí)的繪制類似。

      [1] 楊春風(fēng). 道路工程[M]. 北京: 中國(guó)建材工業(yè)出版社, 2000. 34-50.

      [2] 張新來(lái). 工程制圖(第2 版)[M]. 北京: 中國(guó)鐵道出版社, 2001. 224-226.

      [3] 張 帆, 鄭立楷, 盧擇臨, 等. AutoCAD VBA 二次開(kāi)發(fā)教程[M]. 北京: 清華大學(xué)出版社, 2006. 313-316.

      [4] 王 鈺. 用VBA 開(kāi)發(fā)AutoCAD 2000 應(yīng)用程序[M]. 北京: 人民郵電出版社, 1999. 153-155.

      [5] 潘學(xué)英. 北京鐵路局京九線縱斷面繪圖軟件的研制與應(yīng)用[J]. 鐵路航測(cè), 2001, 4l(2): 32-33.

      [6] 王永輝, 胡青泥, 李紅彩. AutoCAD 二次開(kāi)發(fā)方法的研究[J]. 計(jì)算機(jī)系統(tǒng)應(yīng)用, 2007, (3): 94-96, 100.

      [7] 張 鋒, 陳愛(ài)萍. AutoCAD 二次開(kāi)發(fā)環(huán)境的探討[J]. 機(jī)械設(shè)計(jì)與制造, 2005, (9): 125-127.

      猜你喜歡
      圖塊路肩縱斷面
      基于車體加速度的超大跨度橋上線路縱斷面優(yōu)化方法
      地鐵線路縱斷面優(yōu)化系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)
      多車道高速左側(cè)硬路肩寬度的取值分析
      AutoCAD中圖塊命令的應(yīng)用分析
      優(yōu)化A算法搜索連連看圖塊配對(duì)和消除次序
      三維可視化技術(shù)在道路縱斷面設(shè)計(jì)及土方量算中的應(yīng)用
      香港、臺(tái)灣地區(qū)及國(guó)外有關(guān)應(yīng)急車道的規(guī)定
      茶壺難題
      基于ZDM軟件淺談土地整治中縱斷面圖的繪制
      高速公路硬路肩緩解擁堵的措施
      蓝山县| 滁州市| 黄龙县| 陆良县| 星座| 岳普湖县| 富源县| 监利县| 阿鲁科尔沁旗| 改则县| 新余市| 印江| 广宗县| 绥宁县| 维西| 大化| 康马县| 自贡市| 夹江县| 奉新县| 南溪县| 乌鲁木齐市| 封丘县| 高平市| 宁乡县| 汪清县| 安徽省| 西安市| 修水县| 安庆市| 余江县| 德化县| 林甸县| 怀宁县| 雷山县| 明水县| 谢通门县| 富川| 隆子县| 满洲里市| 宝应县|