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
恐怖犯罪刑事訴訟程序的完善
主站蜘蛛池模板: 久久久久无码精品| 五月天综合婷婷| 亚洲水蜜桃久久综合网站| 无码中文字幕乱码免费2| 囯产av无码片毛片一级| 精品人妻AV区| 成人免费网站在线观看| 国产精品无码一二三视频| 天天做天天爱天天爽综合区| 成人免费午夜视频| 精品天海翼一区二区| 国产成人精品免费视频大全五级| 伊人激情综合网| 国产精品浪潮Av| 尤物亚洲最大AV无码网站| 国产综合精品一区二区| 欧美三级不卡在线观看视频| 国产chinese男男gay视频网| 2020极品精品国产 | 在线播放国产99re| 欧美成人午夜视频免看| 久久一本精品久久久ー99| 无码高潮喷水在线观看| 久草青青在线视频| 欧美另类第一页| 精品精品国产高清A毛片| 无码丝袜人妻| 3D动漫精品啪啪一区二区下载| 国产大片喷水在线在线视频| 一区二区三区成人| 免费国产高清精品一区在线| a级毛片网| 国产精品亚洲专区一区| 天堂va亚洲va欧美va国产| 日韩精品无码一级毛片免费| 国产白浆在线观看| 一级毛片基地| 四虎永久免费网站| 精品成人一区二区三区电影 | 亚洲中久无码永久在线观看软件 | 久热精品免费| 国产精品污视频| 欧美A级V片在线观看| 免费人成网站在线观看欧美| 福利在线一区| 内射人妻无码色AV天堂| 日本一区高清| 久无码久无码av无码| 国内老司机精品视频在线播出| 久久福利片| 亚洲成年网站在线观看| 精品久久久久成人码免费动漫| 亚洲狠狠婷婷综合久久久久| 最新亚洲av女人的天堂| 色网站在线视频| 免费又黄又爽又猛大片午夜| …亚洲 欧洲 另类 春色| 99草精品视频| 国产成人亚洲日韩欧美电影| 国产一区二区三区在线无码| 欧美成在线视频| 无码有码中文字幕| 久久久精品久久久久三级| 天天综合亚洲| 人妻精品久久无码区| 国产一区二区三区精品久久呦| 91娇喘视频| 日韩人妻少妇一区二区| 99在线观看免费视频| 91精品国产情侣高潮露脸| 久久综合色88| 欧美一区二区三区国产精品| 91在线精品麻豆欧美在线| 国产黑丝视频在线观看| 亚洲性日韩精品一区二区| 日本一区二区三区精品国产| 国产91丝袜在线播放动漫 | 91青青草视频在线观看的| 亚洲热线99精品视频| 欧美区一区| 久久亚洲欧美综合| 成人午夜网址|