亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        基于VBA的鉆孔投影里程程序初步探索

        2012-11-29 01:24:44
        鐵道勘察 2012年5期
        關(guān)鍵詞:程序

        張 坤

        (中鐵第一勘察設(shè)計院集團(tuán)有限公司,陜西西安 710043)

        AutoCAD是目前勘察設(shè)計行業(yè)最常用的設(shè)計軟件之一,廣泛應(yīng)用于鐵路、公路、水利等行業(yè)。作為一種通用的輔助設(shè)計軟件,在面對特殊用途的設(shè)計中,如果僅僅利用CAD自身提供的功能,往往造成人工工作量大,而且很多工作量都是重復(fù)性勞動。在此情況下,只是會用軟件的基本功能是不夠的,根據(jù)專業(yè)性質(zhì)和用戶要求進(jìn)行CAD二次開發(fā)就成了解決問題的有效途徑。

        目前工作中,勘探孔編號、坐標(biāo)、里程及偏移量多是通過人機(jī)交互的方式直接在CAD中測量讀取,工作量大且具有重復(fù)性。人工讀取數(shù)據(jù)有以下三個不足,一是費(fèi)時,二是錯誤率高,三是精度無法保證。為了解決這些問題,選擇VBA對CAD進(jìn)行二次開發(fā)就成了必要。VBA入門簡單,開發(fā)速度快。在鉆孔投影里程程序的開發(fā)中,鉆孔以帶屬性的塊的形式存在,程序能夠很方便的獲取鉆孔圖塊的編號和插入點(diǎn),然后通過VBA調(diào)用Lisp的曲線類函數(shù),能夠獲取鉆孔圖塊的插入點(diǎn)在線路上的投影里程和偏移量,最后在VBA中調(diào)用Excel的類型庫,將鉆孔的相關(guān)數(shù)據(jù)保存在Excel中。程序運(yùn)行方便,準(zhǔn)確度高,減少了專業(yè)人員的工作量,取得了良好的效果,值得推廣和運(yùn)用。

        1 程序設(shè)計構(gòu)架

        1.1 程序設(shè)計思路

        程序主要包括一個讀過程和一個寫過程,讀取鉆孔信息全部操作均在CAD中完成,并且在CAD命令窗口中有信息提示;在數(shù)據(jù)存儲方面,程序采用了大家習(xí)慣的Excel文件來保存鉆孔的編號、坐標(biāo)、里程及偏移量(如圖1所示)。

        圖1 程序運(yùn)行流程圖

        程序運(yùn)行完畢后,鉆孔的以上數(shù)據(jù)自動傳輸?shù)紼xcel中,可以替代目前逐個量取鉆孔坐標(biāo)、里程及偏移量繁瑣的工作。

        1.2 程序的組成

        鉆孔投影里程程序主要由三部分組成:宏啟動程序、用戶窗體和類模塊。

        宏啟動模塊代碼如下:

        Sub RunMicro()

        frmMain.Show

        End Sub

        該程序的目的是調(diào)用主窗口,其中窗體的名稱為frmMain。

        窗體包括一個里程冠號輸入框,兩個命令按鈕:運(yùn)行和退出。程序的運(yùn)行的所有代碼都包含在運(yùn)行命令按鈕的過程中(如圖2所示)。

        圖2 程序窗體

        類模塊主要包含Vlax和Curve兩個類模塊。在VBA中對于曲線的操作是一個弱項(xiàng),因?yàn)锳ctiveX沒有太多有關(guān)曲線方面的內(nèi)容,但LISP中很多有用的函數(shù)在ActiveX中都沒有對應(yīng)的屬性方法。為了解決這一個問題,已經(jīng)有前人用該類型庫編寫成為VLAX類模塊,這樣就可以在VBA中可以直接調(diào)用該類,然后實(shí)現(xiàn)該類型庫中提供的重要功能,也即在程序中引用了VLAX和Curve兩個類模塊。

        這兩個類模塊適合的曲線類型包括:直線、多段線、弧線等,鉆孔投影里程程序中利用的功能主要包括:返回曲線的起點(diǎn)和終點(diǎn)坐標(biāo),曲線上一點(diǎn)到曲線起點(diǎn)的長度,曲線外一點(diǎn)到曲線距離最近點(diǎn)坐標(biāo),也即點(diǎn)到線的垂足。代碼主要部分如下:

        Dim objCurve As Curve

        Set objCurve=New Curve

        objCurve.StartPoint

        objCurve.EndPoint

        objCurve.GetClosestPointTo(PntPick)

        objCurve.GetDistanceAtPoint(PntPick)

        2 程序設(shè)計

        AutoCAD中塊有以下優(yōu)勢,便于建立塊圖形庫;能夠節(jié)約磁盤空間;圖形修改方便;能夠攜帶屬性信息。塊屬性是從屬塊的非圖形信息,它是塊的一個組成部分,實(shí)際上,也可以說屬性是塊中的文本實(shí)體,即:塊=若干實(shí)體+屬性。

        在平時工作中,CAD中鉆孔的標(biāo)示方法是鉆孔圖形和編號獨(dú)立存在,但是這樣做有一個缺點(diǎn)就是程序不能將鉆孔和與之對應(yīng)的編號一一聯(lián)系起來。為了解決這個問題,可以用鉆孔塊和塊屬性的方法來表示鉆孔信息。

        因此,程序開發(fā)中將鉆孔做成塊的形式,編號做成塊屬性,這樣就能夠很容易獲取相關(guān)的鉆孔編號和塊插入點(diǎn)坐標(biāo),也即鉆孔的平面位置坐標(biāo)。

        (1)建立CAD-VBA與Excel程序連接

        在“工具”-“引用”里面引用Excel對象庫,這樣就可以在 CAD-VBA中實(shí)現(xiàn) CAD和 Excel的數(shù)據(jù)通信[4-5]。

        關(guān)鍵代碼實(shí)現(xiàn)如下:

        (2)選擇需要投影里程的線路

        該方法要求用戶在圖形屏幕上拾取一個點(diǎn)來選中線路實(shí)體,一旦選擇成功后有消息提示框提示線路選擇成功。

        關(guān)鍵代碼實(shí)現(xiàn)如下:

        ThisDrawing.Utility.GetEntity Ent,PickedPoint,

        "選擇線路"

        (3)選取線路上一點(diǎn)并輸入里程

        在選擇線路上一點(diǎn)時,對象捕捉模式設(shè)置為最近點(diǎn)捕捉和交點(diǎn)捕捉,目的是為了選取線路上標(biāo)示里程樁號與線路的交點(diǎn),根據(jù)線路上一點(diǎn)的里程和任意一點(diǎn)的相對距離,就可以算出線路上該點(diǎn)的里程。

        計算原理如下:假設(shè)線路上所選取A點(diǎn)的里程數(shù)為X0,需要計算B點(diǎn)的里程數(shù)為X1,A點(diǎn)距離線路起點(diǎn)的線路上L0,B點(diǎn)距離線路起點(diǎn)的距離為L1,很容易計算得B點(diǎn)的里程

        關(guān)鍵代碼實(shí)現(xiàn)如下:

        ThisDrawing.SetVariable"OSMODE",544

        其中,在系統(tǒng)變量OSMODE中,最近點(diǎn)捕捉數(shù)值為512,交點(diǎn)捕捉數(shù)值為32,這兩個數(shù)值的和544即為選中這兩種捕捉模式。

        (4)確保程序中只有唯一的選擇集

        需要注意的是,這里的選擇集名為“test1”,第2次運(yùn)行時程序不能還用此名創(chuàng)建選擇集,否則就要出錯。因此,在程序中運(yùn)行時需要判斷CAD中選擇集是否存在,如果存在,則刪除此選擇集,并且創(chuàng)建一個新的選擇集。

        關(guān)鍵代碼實(shí)現(xiàn)如下:

        (5)獲取鉆孔坐標(biāo)和偏移量

        選取鉆孔塊后,通過訪問鉆孔塊InsertionPoint屬性能夠得到該點(diǎn)的坐標(biāo),假設(shè)該插入點(diǎn)為C,然后通過GetClosestPointTo函數(shù)能夠求得曲線上距離該插入點(diǎn)距離最近點(diǎn)D坐標(biāo),同時D點(diǎn)也為垂足,然后根據(jù)C點(diǎn)和D點(diǎn)坐標(biāo)求出CD間的距離,也即鉆孔離線路的偏移量。

        關(guān)鍵代碼實(shí)現(xiàn)如下:

        ptPick=ssetObj.Item(i).InsertionPoint

        ClosestPnt=objCurve.GetClosestPointTo(ptPick)

        (6)鉆孔在線路左右側(cè)的判斷

        線路畫線方向一般是從小里程到大里程,通過

        PtStar=objCurve.StartPoint

        PtEnd=objCurve.EndPoint

        能夠獲取線路的起點(diǎn)和終點(diǎn)坐標(biāo),在XY坐標(biāo)系中,假如起點(diǎn)坐標(biāo)分量X1小于終點(diǎn)坐標(biāo)分量X2,在CAD中線路小里程到大里程表現(xiàn)為從左往右,當(dāng)鉆孔插入點(diǎn)C坐標(biāo)分量 Y1大于垂足 D點(diǎn)的坐標(biāo)分量Y2時,返回一個字符”左”;當(dāng)Y1小于垂足D點(diǎn)的坐標(biāo)分量Y2時,返回一個字符”右”;當(dāng)Y1等于垂足D點(diǎn)的坐標(biāo)分量Y2時,返回一個空字符””,即鉆孔在線路上。根據(jù)同樣的道理,可以很容易判斷出線路從小里程到大里程表現(xiàn)為從右往左的情況。

        (7)將里程轉(zhuǎn)換為鐵路表示方法

        假如獲得某一鉆孔的里程為1 100m,左偏1m,然后將此改寫成符合工作中的表達(dá)習(xí)慣,如“DK1+100左1m”。

        計算原理如下:假設(shè)里程為 X,首先X/1000取整,即Y=Int(X/1000),Y為里程千米數(shù),然后計算百米部分,即Z=X-1000×Int(X/1000),Z為百米部分,最后用連接符“&”將各字符連接即可。

        3 程序應(yīng)用

        程序的應(yīng)用實(shí)例選取蘭新第二雙線嘉峪關(guān)聯(lián)絡(luò)線左線和右線進(jìn)行測試,線路方案穩(wěn)定后,左線長約3.7 km,右線長約3.1 km,根據(jù)鐵路工程地質(zhì)勘察規(guī)范布置鉆孔[6],共布設(shè)鉆孔53個。

        程序運(yùn)行步驟如下:

        ①打開cad圖,并且新建一張Excel表格,用來存儲鉆孔的相關(guān)信息。運(yùn)行宏,界面如圖3所示。

        圖3 程序運(yùn)行界面

        ②點(diǎn)擊運(yùn)行,選中所要投影的線路,一旦線路實(shí)體選擇成功,會有消息提示,然后點(diǎn)擊確定,如圖4所示。

        圖4 消息提示框

        ③選擇線路上任意一點(diǎn)里程已知的位置,初始化整條線路的里程,并且在彈出的對話框中輸入該點(diǎn)的里程,如選擇的點(diǎn)A的里程是DK1+100,輸入1 100,點(diǎn)擊確定。程序運(yùn)行界面如圖5、圖6所示。

        圖5 消息提示框

        圖6 線路點(diǎn)里程輸入框

        ④選擇將要投影的鉆孔,選擇完畢后,點(diǎn)擊Enter鍵,鉆孔的編號、x坐標(biāo)、y坐標(biāo)、里程和偏移量自動傳輸?shù)紼xcel中,表格形式表1所示,表1中選取了其中8個鉆孔作為演示。表中數(shù)據(jù)可以直接用于鉆探任務(wù)書的下發(fā),減少了工作量,節(jié)約了工作時間。

        表1 鉆孔信息一覽

        4 結(jié)論

        (1)鉆孔投影里程程序能夠自動獲取鉆孔的坐標(biāo)和里程信息,并保存于大家習(xí)慣的Excel工作表中,操作簡單,極大提高了工作自動化程度,減少了相關(guān)人員的工作量。

        (2)VBA程序能夠在VB6.0中編譯生成.exe可執(zhí)行文件,不需安裝,運(yùn)行方便,且有利于源代碼的保護(hù)。

        (3)雖然程序中只實(shí)現(xiàn)了鉆孔的投影里程,根據(jù)同樣的道理,可以將其他勘探孔信息,例如試坑、靜探孔等的坐標(biāo)和投影線路里程讓程序自動讀出,并保存在Excel中,需要做的只是完善相關(guān)塊及塊屬性庫,方便以后調(diào)用。

        (4)本程序暫時支持CAD2004與Excel2003的通信,其中 Excel2003對象庫引用的是 Microsoft Excel 11.0 Object Library,其他版本的Excel類型庫運(yùn)行會報錯,要重新編譯,才能重新運(yùn)行。

        (5)Vlax類和Curve類模塊中,要在VBA中調(diào)用Lisp庫函數(shù),Lisp和VBA兩者通信過程中在其他計算機(jī)上會出現(xiàn)一些未知錯誤,程序運(yùn)行的穩(wěn)定性有待進(jìn)一步提高。

        [1]張晉西.Visual Basic與AutoCAD二次開發(fā)[M].北京:清華大學(xué)出版社,2002

        [2]二代龍震工作室.AutocAD VBA函數(shù)庫查詢辭典[M].北京:中國鐵道出版社,2003

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

        [4]閆海濤,岳全貴,詹才平.基于VBA的地質(zhì)勘察CAD軟件開發(fā)[J].交通科技,2010(7)

        [5]李景健,楊安.AutoCAD表格和Excel表格的相互轉(zhuǎn)換[J].交通科技,2010(7)

        [6]鐵道部第一勘測設(shè)計院.鐵路工程地質(zhì)手冊[M].北京:中國鐵道出版社,2005

        猜你喜歡
        程序
        給Windows添加程序快速切換欄
        電腦愛好者(2020年6期)2020-05-26 09:27:33
        試論我國未決羈押程序的立法完善
        失能的信仰——走向衰亡的民事訴訟程序
        “程序猿”的生活什么樣
        英國與歐盟正式啟動“離婚”程序程序
        基于VMM的程序行為異常檢測
        偵查實(shí)驗(yàn)批準(zhǔn)程序初探
        我國刑事速裁程序的構(gòu)建
        創(chuàng)衛(wèi)暗訪程序有待改進(jìn)
        恐怖犯罪刑事訴訟程序的完善
        天堂在线观看av一区二区三区 | 亚洲自偷精品视频自拍| 国产又a又黄又潮娇喘视频| 亚洲人成无码网站久久99热国产| 人妻少妇精品无码系列| 亚洲韩日av中文字幕| 亚洲va久久久噜噜噜久久天堂| 麻麻张开腿让我爽了一夜| 最新精品国偷自产在线婷婷| 加勒比久草免费在线观看| 久久久精品国产亚洲av网深田| 亚洲国产精品va在线看黑人| 夜夜综合网| 精品专区一区二区三区| 一个色综合中文字幕人妻激情视频| 免费人成再在线观看视频| 国产AV无码专区亚洲AV桃花庵 | 97精品人妻一区二区三区在线| 国产肉体xxxx裸体784大胆| 女同av一区二区三区| 久久国产人妻一区二区| 日韩乱码人妻无码中文字幕视频| 亚洲精品成人网线在线播放va| 亚洲啪啪色婷婷一区二区| 亚洲av成人片在线观看| 久久久久久av无码免费看大片| 网友自拍人妻一区二区三区三州| 亚洲sm另类一区二区三区| 青春草在线视频免费观看| 亚洲综合欧美在线| 亚洲一区二区三区资源| 成 人色 网 站 欧美大片在线观看| 黑人玩弄人妻中文在线| 久久人妻公开中文字幕| 免费国人成人自拍视频| 人妻熟女翘屁股中文字幕| 成人国内精品久久久久一区| 国产一区二区牛影视| 视频国产一区二区在线| 免费国产a国产片高清网站| 在教室伦流澡到高潮hnp视频|