999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

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

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

張 坤

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

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

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

1 程序設計構架

1.1 程序設計思路

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

圖1 程序運行流程圖

程序運行完畢后,鉆孔的以上數據自動傳輸到Excel中,可以替代目前逐個量取鉆孔坐標、里程及偏移量繁瑣的工作。

1.2 程序的組成

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

宏啟動模塊代碼如下:

Sub RunMicro()

frmMain.Show

End Sub

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

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

圖2 程序窗體

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

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

Dim objCurve As Curve

Set objCurve=New Curve

objCurve.StartPoint

objCurve.EndPoint

objCurve.GetClosestPointTo(PntPick)

objCurve.GetDistanceAtPoint(PntPick)

2 程序設計

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

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

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

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

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

關鍵代碼實現如下:

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

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

關鍵代碼實現如下:

ThisDrawing.Utility.GetEntity Ent,PickedPoint,

"選擇線路"

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

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

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

關鍵代碼實現如下:

ThisDrawing.SetVariable"OSMODE",544

其中,在系統變量OSMODE中,最近點捕捉數值為512,交點捕捉數值為32,這兩個數值的和544即為選中這兩種捕捉模式。

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

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

關鍵代碼實現如下:

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

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

關鍵代碼實現如下:

ptPick=ssetObj.Item(i).InsertionPoint

ClosestPnt=objCurve.GetClosestPointTo(ptPick)

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

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

PtStar=objCurve.StartPoint

PtEnd=objCurve.EndPoint

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

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

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

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

3 程序應用

程序的應用實例選取蘭新第二雙線嘉峪關聯絡線左線和右線進行測試,線路方案穩定后,左線長約3.7 km,右線長約3.1 km,根據鐵路工程地質勘察規范布置鉆孔[6],共布設鉆孔53個。

程序運行步驟如下:

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

圖3 程序運行界面

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

圖4 消息提示框

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

圖5 消息提示框

圖6 線路點里程輸入框

④選擇將要投影的鉆孔,選擇完畢后,點擊Enter鍵,鉆孔的編號、x坐標、y坐標、里程和偏移量自動傳輸到Excel中,表格形式表1所示,表1中選取了其中8個鉆孔作為演示。表中數據可以直接用于鉆探任務書的下發,減少了工作量,節約了工作時間。

表1 鉆孔信息一覽

4 結論

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

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

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

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

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

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

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

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

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

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

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

猜你喜歡
程序
給Windows添加程序快速切換欄
電腦愛好者(2020年6期)2020-05-26 09:27:33
試論我國未決羈押程序的立法完善
人大建設(2019年12期)2019-05-21 02:55:44
失能的信仰——走向衰亡的民事訴訟程序
“程序猿”的生活什么樣
英國與歐盟正式啟動“離婚”程序程序
環球時報(2017-03-30)2017-03-30 06:44:45
基于VMM的程序行為異常檢測
偵查實驗批準程序初探
我國刑事速裁程序的構建
創衛暗訪程序有待改進
中國衛生(2015年3期)2015-11-19 02:53:32
恐怖犯罪刑事訴訟程序的完善
主站蜘蛛池模板: а∨天堂一区中文字幕| 91午夜福利在线观看| 国产网站一区二区三区| 69视频国产| 亚洲毛片一级带毛片基地| 久久77777| 国产原创自拍不卡第一页| 国产成年无码AⅤ片在线| 最新国产麻豆aⅴ精品无| 在线免费亚洲无码视频| 啪啪永久免费av| 国产日本视频91| 免费人成网站在线观看欧美| 波多野结衣一区二区三区四区视频| 日本人又色又爽的视频| 丁香婷婷综合激情| 波多野结衣爽到高潮漏水大喷| 亚洲一区网站| 亚洲色无码专线精品观看| 国产免费高清无需播放器| 国产乱人激情H在线观看| 91破解版在线亚洲| 青青草a国产免费观看| 男女精品视频| 国产欧美在线| 无码高清专区| 国产中文一区二区苍井空| 婷婷午夜天| 色窝窝免费一区二区三区| 亚洲女同一区二区| 在线视频一区二区三区不卡| 国产成人a毛片在线| 欧美一级在线看| 成人亚洲国产| 国产一区二区三区精品欧美日韩| 欧美中文字幕在线视频| 国模在线视频一区二区三区| 强乱中文字幕在线播放不卡| 免费高清a毛片| 久热99这里只有精品视频6| 一级毛片a女人刺激视频免费| 91免费观看视频| 国产无码高清视频不卡| 日韩毛片免费视频| 色有码无码视频| 欧美日韩激情在线| 亚洲天堂首页| 另类重口100页在线播放| 日韩色图区| 又黄又湿又爽的视频| 亚洲精品第五页| 国产h视频免费观看| 亚洲av无码人妻| 国产乱视频网站| 国产精品99在线观看| 亚洲国产成人综合精品2020| 色欲色欲久久综合网| 456亚洲人成高清在线| 香蕉国产精品视频| 国产精品福利尤物youwu | 国产精品性| 国产黑丝视频在线观看| 自拍偷拍欧美日韩| 麻豆国产精品一二三在线观看| 伊人福利视频| 成人免费午间影院在线观看| 国产91丝袜| 亚洲二区视频| 国产成人免费高清AⅤ| 亚洲婷婷在线视频| www.亚洲一区二区三区| 国产欧美视频综合二区| 久久综合AV免费观看| 在线免费看片a| 免费人成黄页在线观看国产| 欧美亚洲激情| 国产网友愉拍精品| 日韩高清一区 | 免费视频在线2021入口| 国内精品自在欧美一区| 九色综合伊人久久富二代| 最新亚洲av女人的天堂|