• 
    

    
    

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

      ?

      基于VBA自動(dòng)繪制時(shí)間-沉降量曲線(xiàn)插件的設(shè)計(jì)

      2014-06-26 07:41:12王衛(wèi)華柯于衡
      城市勘測(cè) 2014年5期
      關(guān)鍵詞:時(shí)間跨度縱軸橫軸

      王衛(wèi)華 ,柯于衡

      (宜昌市測(cè)繪大隊(duì),湖北 宜昌 443100)

      1 引 言

      “時(shí)間-沉降量曲線(xiàn)圖”作為測(cè)繪單位必須提供客戶(hù)的要資料之一,在很多地區(qū)是不能簡(jiǎn)單運(yùn)用Excel軟件提供的圖表繪制功能來(lái)完成的,生產(chǎn)單位往往是結(jié)合AutoCAD 的繪圖功能和Excel 的統(tǒng)計(jì)計(jì)算功能來(lái)手工繪制,不僅費(fèi)事費(fèi)力,而且在作業(yè)過(guò)程中容易引入人為誤差或錯(cuò)誤。因此,借助AutoCAD 二次開(kāi)發(fā)編寫(xiě)插件無(wú)疑是解決此類(lèi)問(wèn)題最好的方法。

      Visual Lisp 和VBA 是常用的AutoCAD 二次開(kāi)發(fā)工具,兩者各有所長(zhǎng),互為補(bǔ)充。Visual Lisp 適合描述人機(jī)交互的工程,長(zhǎng)于編寫(xiě)模擬設(shè)計(jì)師思路的專(zhuān)業(yè)設(shè)計(jì)程序,對(duì)于各種用戶(hù)的輸入、錯(cuò)誤的識(shí)別與恢復(fù)等有相當(dāng)強(qiáng)大的功能,能充分發(fā)揮交互操作的特長(zhǎng),同時(shí)具有最多樣式的程序運(yùn)行模式和很好的兼容性。缺點(diǎn)是編譯困難,DCL的設(shè)計(jì)編寫(xiě)很難熟練掌握,因?yàn)槠渚幾g困難,很難編寫(xiě)大型程序。VBA 可以很方便的使用Windows 系統(tǒng)資源,使AutoCAD 很容易和Windows 下的Excel 等應(yīng)用程序交互;對(duì)話(huà)框功能比Lisp DCL 好很多,多文檔視圖環(huán)境下的應(yīng)用程序也比Visual Lisp 提供了更多的支持,且VBA 代碼有較好的可讀性,能進(jìn)行復(fù)雜計(jì)算公式的編制。不足之處是不能像Visual Lisp 一樣隨心所欲的調(diào)用CAD 的命令,許多交互操作的技巧在VBA 中不能直接調(diào)用。綜上所述,熟練、靈活的掌握兩種語(yǔ)言的技巧和精髓,能幫助我們寫(xiě)出實(shí)用高效,強(qiáng)壯性好的程序,本文中時(shí)間-沉降曲線(xiàn)自動(dòng)繪制插件的主體用VBA 編寫(xiě),局部借用了Visual Lisp 的一些功能,詳細(xì)情況見(jiàn)文中代碼。

      2 實(shí)例和編程思路

      2.1 工程概況

      某小區(qū)2#樓為18 層剪力墻結(jié)構(gòu),建筑總高度50.7 m,該樓共埋設(shè)了14 個(gè)沉降觀(guān)測(cè)點(diǎn),12 次觀(guān)測(cè)沉降數(shù)據(jù)如表1所示:

      表1 2#樓沉降量統(tǒng)計(jì)表

      2.2 編程思路

      時(shí)間-沉降曲線(xiàn)圖如圖1所示,橫軸代表時(shí)間跨度,縱軸代表各時(shí)間點(diǎn)對(duì)應(yīng)的沉降量,除了曲線(xiàn)主體之外,還必須注明時(shí)間刻度、沉降量刻度、曲線(xiàn)對(duì)應(yīng)點(diǎn)號(hào)等輔助要素。為了方便闡述插件的編寫(xiě)過(guò)程,將插件實(shí)現(xiàn)過(guò)程分為以下5 個(gè)步驟來(lái)分別說(shuō)明:

      圖1 標(biāo)準(zhǔn)時(shí)間-沉降量曲線(xiàn)

      (1)沉降曲線(xiàn)數(shù)據(jù)的讀取;

      (2)自動(dòng)判斷監(jiān)測(cè)數(shù)據(jù)信息中的時(shí)間跨度、點(diǎn)號(hào)、有效取值區(qū)域;

      (3)根據(jù)最大日期和最大沉降量定義橫縱軸刻度;

      (4)繪制坐標(biāo)軸、標(biāo)注文字;

      (5)生成時(shí)間-沉降量點(diǎn)陣,將點(diǎn)陣連成的折線(xiàn)擬合為曲線(xiàn)。

      3 程序的實(shí)現(xiàn)

      為了實(shí)現(xiàn)數(shù)據(jù)自動(dòng)讀取,完全不需要人為干預(yù)自動(dòng)繪制沉降曲線(xiàn),需要根據(jù)沉降觀(guān)測(cè)外業(yè)結(jié)束后歷次觀(guān)察數(shù)據(jù)統(tǒng)計(jì)出合格的時(shí)間-沉降量表格,以此為基礎(chǔ)來(lái)完成插件的編寫(xiě),如表2所示:

      表2 時(shí)間-沉降量基礎(chǔ)表格

      3.1 數(shù)據(jù)讀取

      需要借用Excel VBA 的部分功能,讀取的對(duì)象是當(dāng)前打開(kāi)的Excel 工作簿中的數(shù)據(jù),如果找不到激活狀態(tài)的工作簿,程序會(huì)自動(dòng)提醒打開(kāi)需要繪制時(shí)間-沉降曲線(xiàn)的表格,代碼如下:

      3.2 判斷有效數(shù)據(jù)區(qū)域,提取點(diǎn)號(hào)、時(shí)間跨度等數(shù)據(jù)信息

      通過(guò)一個(gè)循環(huán)語(yǔ)句的使用,根據(jù)其是否為空來(lái)判斷當(dāng)前工作簿的有效范圍,這對(duì)后面所有工作都至關(guān)重要。觀(guān)測(cè)點(diǎn)的點(diǎn)號(hào)需要在曲線(xiàn)末端注明,點(diǎn)號(hào)的讀取位置為表一中單元格(3,A)至(k1,A)。時(shí)間跨度需要確定表格有效區(qū)域的最大列數(shù)“m1”,表格中單元格“excelSheet.cells(2,m1)”的值就是沉降觀(guān)測(cè)對(duì)應(yīng)的時(shí)間跨度,實(shí)現(xiàn)代碼如下:

      3.3 判斷橫軸和縱軸刻度大小

      為了圖形的美觀(guān)、突出沉降變化的特征和打印方便,橫軸和縱軸的長(zhǎng)度比例關(guān)系設(shè)定為2∶1,橫軸每格代表的天數(shù)要根據(jù)時(shí)間跨度自動(dòng)調(diào)整,時(shí)間跨度(“excelSheet.cells(2,m1).Value”)在3.2 操作中已經(jīng)得到,通過(guò)函數(shù)關(guān)系來(lái)調(diào)整橫軸刻度的大小;同樣,縱軸每格代表沉降量也需要根據(jù)整棟建筑最大的沉降量來(lái)調(diào)整,需要比較各個(gè)觀(guān)測(cè)點(diǎn)沉降量來(lái)獲得最大沉降量的值,再通過(guò)函數(shù)關(guān)系來(lái)調(diào)整縱軸刻度的大小,實(shí)現(xiàn)代碼如下:

      3.4 橫縱坐標(biāo)軸、輔助元素的繪制

      如圖2,橫軸的繪制包括坐標(biāo)軸、刻度分劃、日期標(biāo)注和文本等內(nèi)容。因?yàn)槊總€(gè)項(xiàng)目有若干個(gè)觀(guān)測(cè)點(diǎn),需要引入一個(gè)三維點(diǎn)pt1(2)作為單個(gè)觀(guān)測(cè)點(diǎn)沉降曲線(xiàn)繪制的基點(diǎn),使各觀(guān)測(cè)點(diǎn)曲線(xiàn)成果整齊排列,互不干擾。定義代碼如下:

      圖2 橫軸標(biāo)準(zhǔn)樣式

      同理可以繪出縱軸及其輔助元素,此處不再贅述。

      3.5 繪制曲線(xiàn)

      繪制曲線(xiàn)為本插件的主要功能,是最核心也是最有難度的部分。一種方案是先根據(jù)時(shí)間和沉降量組成的點(diǎn)陣畫(huà)出一列點(diǎn),用輕量級(jí)多義線(xiàn)連接所有點(diǎn),最后對(duì)多義線(xiàn)進(jìn)行擬合成沉降曲線(xiàn)。另外一種方案是用“樣條曲線(xiàn)”直接連接點(diǎn)列,兩種方案大同小異,差異之處就是第一種方案所繪曲線(xiàn)是二維曲線(xiàn),而第二種方案繪制為三維曲線(xiàn),表現(xiàn)出來(lái)的效果是完全一致的,本文采用第一種方案編程。由于實(shí)際監(jiān)測(cè)過(guò)程中,經(jīng)常遇到少數(shù)點(diǎn)被破壞的情況,如果出現(xiàn)了表3所示“202”點(diǎn)在第9 次觀(guān)測(cè)前被破壞或毀損的情況,需要中斷對(duì)該點(diǎn)的觀(guān)測(cè),這樣繪制曲線(xiàn)時(shí)點(diǎn)pt 的維數(shù)需要根據(jù)實(shí)際觀(guān)測(cè)的次數(shù)來(lái)決定,所以pt 的定義必須是一個(gè)不指定維數(shù)的雙精度數(shù)組,具體維數(shù)要看沉降量取值為“0”時(shí)候“列”的值,用redim 命令來(lái)重新定義。

      表3 有缺損觀(guān)測(cè)點(diǎn)的表格

      圖3 未經(jīng)擬合的沉降曲線(xiàn)

      這樣繪制的輕量多義線(xiàn)是一條折線(xiàn),如圖3所示,還需要擬合成一條光滑的曲線(xiàn),這里需要結(jié)合Visual Lisp 的相關(guān)知識(shí),具體實(shí)現(xiàn)過(guò)程如下:通過(guò)所繪折線(xiàn)的handle 屬性得到該折線(xiàn)的句柄,組合成lisp 能識(shí)別的AutoCAD 命令來(lái)對(duì)折線(xiàn)編輯擬合,代碼如下:

      擬合后就得到圖1所示沉降曲線(xiàn)圖成果。

      通過(guò)設(shè)置行變量j 從3 到k1 的循環(huán),可以實(shí)現(xiàn)依次畫(huà)出整個(gè)項(xiàng)目所有觀(guān)測(cè)點(diǎn)的功能。所有成果圖會(huì)自動(dòng)排列成一列,由于本例觀(guān)測(cè)點(diǎn)偏多,不再一一列舉。

      4 結(jié) 語(yǔ)

      本文基于VBA 編程技術(shù),充分結(jié)合AutoCAD 軟件,所編寫(xiě)插件能很好完成滿(mǎn)足宜昌市沉降報(bào)告要求的時(shí)間-沉降量曲線(xiàn)的繪制,在本單位內(nèi)部使用節(jié)省了沉降內(nèi)業(yè)工作時(shí)間。同時(shí)再根據(jù)使用過(guò)程中遇到的新情況,比如觀(guān)測(cè)點(diǎn)被破壞,觀(guān)測(cè)被迫中斷等預(yù)先沒(méi)有考慮的情況,經(jīng)過(guò)不斷改進(jìn)完善,使插件的強(qiáng)壯性和穩(wěn)定得到提高。

      [1]張帆.Autocad VBA 二次開(kāi)發(fā)教程[M].北京:清華大學(xué)出版社,2006.

      [2]張帆,鄭立凱,王華杰.Autocad VBA 開(kāi)發(fā)精彩實(shí)例教程[M].北京:清華大學(xué)出版社,2004.

      [3]李風(fēng)華.Autocad 2002/2000 VBA 開(kāi)發(fā)指南[M].北京:清華大學(xué)出版社,2001.

      [4]曾洪飛,張帆,盧擇臨.Autocad VBA&VB.NET 開(kāi)發(fā)基礎(chǔ)與實(shí)例教程[M].北京:中國(guó)電力出版社,2008.

      [5]二代龍震工作室.Autocad VBA 函數(shù)庫(kù)查詢(xún)辭典[M].北京:中國(guó)鐵路出版社,2003.

      [6]Micrsoft 公司.Microsoft visual basic 6.0 程序員指南[M].北京:希望電子出版社,1998.

      [7]Micrsoft 公司.Microsoft visual basic 6.0 語(yǔ)言參考手冊(cè)[M].北京:希望電子出版社,1998.

      猜你喜歡
      時(shí)間跨度縱軸橫軸
      請(qǐng)您診斷
      如虎
      ——黃胄畫(huà)貓賀歲展
      電視劇《父母愛(ài)情》受歡迎的原因探析
      淺談回顧性成就報(bào)道的創(chuàng)作思路
      請(qǐng)您診斷 病例126
      傳感器網(wǎng)絡(luò)分簇時(shí)間跨度優(yōu)化聚類(lèi)算法
      請(qǐng)您診斷
      流動(dòng)管理:一種班級(jí)管理的實(shí)踐模式
      縱軸曝氣氧化溝在城鎮(zhèn)污水處理中的應(yīng)用
      從時(shí)間縱軸研究大學(xué)生身體素質(zhì)狀況及對(duì)策
      阿城市| 洛浦县| 营山县| 汉寿县| 河南省| 锦屏县| 临澧县| 读书| 湘阴县| 如皋市| 汉寿县| 灌云县| 翁牛特旗| 商水县| 金寨县| 法库县| 永安市| 潼南县| 邳州市| 平邑县| 稷山县| 马边| 盘山县| 蕉岭县| 长兴县| 德安县| 阿克| 万州区| 南安市| 姜堰市| 安阳市| 印江| 吉林省| 永修县| 丰都县| 仁寿县| 家居| 华坪县| 古蔺县| 肥东县| 牡丹江市|