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

基于VBA的牽引計算用坡度坡長自動提取

2023-11-06 01:37:54劉超湯人杰尹竹瑩
科技資訊 2023年20期
關(guān)鍵詞:圖紙

劉超 湯人杰 尹竹瑩

(中車株洲電力機車有限公司 湖南株洲 412001)

軌道交通車輛牽引計算需要使用線路的坡度和坡長數(shù)據(jù)。傳統(tǒng)的提取方式為人工讀取CAD文件,將數(shù)據(jù)逐一錄入到Excel 中。在CAD 文件中,與整條線路相比,坡度坡長數(shù)據(jù)的字體不大;相鄰數(shù)據(jù)間隔較大。若放大圖紙,一次讀取的數(shù)據(jù)較少,將大幅增加錄入時間;若不放大圖紙,某些數(shù)字容易讀錯,將直接影響牽引計算的精度。

基于VBA的CAD二次開發(fā)功能,可以使用程序批量處理大量文檔數(shù)據(jù),已經(jīng)用于軟件及插件開發(fā)[1-2]、圖紙繪制及修改[3-8]、數(shù)據(jù)提取[9-11]等。

為自動提取坡度坡長數(shù)據(jù),本文編寫了VBA 程序。讀取設(shè)計坡度和設(shè)計標(biāo)高所在圖層的數(shù)據(jù),將其導(dǎo)出到Excel,排序后確定上行線、下行線和環(huán)線數(shù)據(jù),通過設(shè)計標(biāo)高得到坡度值的正負號。實際應(yīng)用結(jié)果驗證了程序的有效性和可行性。

1 原始數(shù)據(jù)獲取

1.1 獲取設(shè)計坡度、設(shè)計標(biāo)高的圖層名稱

通過InputBox( )得到手動輸入的設(shè)計坡度、設(shè)計標(biāo)高圖層名稱。

一張圖紙中可能同時存在上行線、下行線、環(huán)線,不同線路設(shè)計坡度、設(shè)計標(biāo)高所在圖層的名稱可能不同,故需要判定是否包含多個圖層,若存在多個圖層,分離出每個圖層名稱和圖層總數(shù)。

1.2 讀取設(shè)計坡度、設(shè)計標(biāo)高所在圖層的數(shù)據(jù)

對于設(shè)計標(biāo)高圖層的數(shù)據(jù),若圖層名稱和設(shè)計標(biāo)高圖層名稱相同、類型為文本,則將字符串、坐標(biāo)保存到數(shù)組中,通過計數(shù)器變量實時更新總數(shù)。

設(shè)計坡度圖層中除了坡度和坡長以外,還存在旋轉(zhuǎn)了90°的數(shù)據(jù),如圖1 所示,故除了圖層名稱和類型需滿足要求外,還需限定旋轉(zhuǎn)角度為0。

圖1 圖紙示例

設(shè)計坡度圖層中,每一段路程的起點和終點有一條豎線,如圖1 所示,讀取豎線的坐標(biāo),用于匹配坡度坡長數(shù)據(jù)、更新起點站和終點站的坡長。

本文使用的是中望CAD,文本、線條類型分別為ZcadText和ZcadLine。不同類型的對象的屬性不完全相同,故在獲取數(shù)據(jù)時,滿足類型相同后才判斷其他條件。

1.3 讀取起點站、終點站、設(shè)計坡度、設(shè)計標(biāo)高的坐標(biāo)

一般圖紙中起點站左邊、終點站右邊均存在少量線路數(shù)據(jù),故需要獲取起點站、終點站的坐標(biāo),用于標(biāo)記有用數(shù)據(jù)。

每條線路最左側(cè)會有注釋,如圖1 中的“設(shè)計坡度”和“設(shè)計標(biāo)高”。獲取“設(shè)計坡度”和“設(shè)計標(biāo)高”的坐標(biāo),用于分離每條線路的數(shù)據(jù)。

圖紙中文字可能存在空格,如“設(shè) 計 標(biāo) 高”,故對于文本類型的對象,需要對每個字符進行匹配,同時滿足時將坐標(biāo)存儲于數(shù)組中。

2 豎線數(shù)據(jù)處理

若圖紙只有一條線路,默認為上行線;若包含環(huán)線且終點站在環(huán)線上,默認環(huán)線位于上行線或下行線的右側(cè)。

2.1 創(chuàng)建Excel文件并寫入數(shù)據(jù)

CAD VBA 讀取數(shù)據(jù)的原則是根據(jù)數(shù)據(jù)放置的先后順序,則讀取的數(shù)據(jù)不一定按照橫坐標(biāo)從小到大的順序排列,本文借助Excel 對其進行排序。通過CAD VBA 新建Excel 文件,新增3 個空白工作簿,分別保存坡度坡長、標(biāo)高、豎線的數(shù)據(jù)。

寫入數(shù)據(jù)時,先將保存在數(shù)組中的變量賦值給Variant變量,再賦值給Excel,將無用的數(shù)據(jù)清除。

2.2 分離豎線的上行線和下行線數(shù)據(jù)

將豎線的橫坐標(biāo)按照升序進行排序,調(diào)整豎線的起點和終點,始終滿足起點的縱坐標(biāo)小于終點的縱坐標(biāo)。

圖2 為每條線路的標(biāo)注,一般設(shè)計標(biāo)高和設(shè)計坡度不在兩端,則兩條線路之間的距離大于豎線的長度。此外,同一條線路的豎線的長度不一定相同,可能存在細微偏差,如圖3所示。

圖2 圖紙標(biāo)注示例

圖3 上行線和下行線劃分

記橫坐標(biāo)最小的豎線V0的起點坐標(biāo)和終點坐標(biāo)分別為(xst,yst)和(xed,yed),長度為l0。以V0為基準(zhǔn),將y≥yed+l0的豎線標(biāo)記為上行線,此時上行線標(biāo)志位flag_sxx=1;y≤yst-l0的豎線標(biāo)記為下行線,下行線標(biāo)志位flag_xxx=1;yed-l0≤y≤yst+l0的豎線標(biāo)記為中線,如圖3所示。

(1)若flag_sxx=1 且flag_xxx=1,則同時存在上行線、下行線和環(huán)線,此時不更新標(biāo)記。

(2)若flag_sxx=1且flag_xxx=0,則存在一條線路在上方,默認縱坐標(biāo)大的線路為上行線,將中線改為下行線。

(3)除上述情況外,將中線改為上行線。

更新標(biāo)記后,進行以下處理。

(1)按照標(biāo)記升序的原則進行排序。

(2)對于相鄰、橫坐標(biāo)之差小于1 的豎線,刪除其中一條。

(3)確定上行線和下行線的分界點和分界線,見圖4。

圖4 上行線和下行線分界線

分界線縱坐標(biāo)表達式為ysx=(ysxx0+yxxx0)/2,ysxx0、yxxx0分別為上行線第一條豎線起點縱坐標(biāo)和下行線第一條豎線終點縱坐標(biāo)。若圖紙中只有一條線路,則ysx=0。

通過分界點確定下行線數(shù)據(jù)個數(shù),可能存在個別上行線豎線偏離其他豎線,被判定為下行線的情況,故假定下行線數(shù)據(jù)個數(shù)大于3個時才計算分界線。

2.3 分離豎線中的環(huán)線數(shù)據(jù)

若存在環(huán)線,環(huán)線數(shù)據(jù)位于上行線或下行線數(shù)據(jù)中,則存在一個“設(shè)計坡度”的橫坐標(biāo)xzy滿足(xzy-xxx0)(xzy-xxxk)<0,其中xxx0、xxxk分別為上行線或下行線的起點和終點的橫坐標(biāo),設(shè)定該橫坐標(biāo)xzy為環(huán)線的分界線。

將上行線和下行線中橫坐標(biāo)大于xzy的豎線標(biāo)記為環(huán)線。

3 標(biāo)高數(shù)據(jù)處理

3.1 分離上行線、下行線和環(huán)線數(shù)據(jù)

通過ysx將標(biāo)高數(shù)據(jù)標(biāo)記為上行線和下行線,然后按照標(biāo)記升序進行排序,確定上行線和下行線的分界點;通過xzy標(biāo)記標(biāo)高環(huán)線數(shù)據(jù)。

相鄰標(biāo)高數(shù)據(jù),若滿足標(biāo)高值、橫坐標(biāo)和縱坐標(biāo)之差的絕對值小于1,則刪除其中一個標(biāo)高數(shù)據(jù)。圖5是環(huán)線分界線圖。

圖5 環(huán)線分界線

3.2 刪除偏離豎線較遠的標(biāo)高數(shù)據(jù)

可能存在位于兩條豎線之間的標(biāo)高值,如圖6 所示。一條豎線對應(yīng)一個標(biāo)高數(shù)據(jù),對于第k個標(biāo)高數(shù)據(jù),從第k-n條豎線開始判斷,若標(biāo)高的橫坐標(biāo)和豎線的橫坐標(biāo)之差的絕對值大于10,清除該行的標(biāo)高數(shù)據(jù)。n為第k個標(biāo)高數(shù)據(jù)之前被清空數(shù)據(jù)的標(biāo)高的總數(shù),每清空一個標(biāo)高數(shù)據(jù)時通過n=n+1更新n值。所有的標(biāo)高數(shù)據(jù)均核對后,將清空形成的空白行刪除。

圖6 冗余的標(biāo)高數(shù)據(jù)

4 坡度坡長數(shù)據(jù)處理

4.1 分離上行線、下行線和環(huán)線數(shù)據(jù)

和標(biāo)高數(shù)據(jù)的處理方式相同,通過ysx和xzy標(biāo)記上行線、下行線和環(huán)線。排序后確定上行線和下行線的分界點。

4.2 匹配標(biāo)高和坡度坡長

將坡度坡長數(shù)據(jù)放到左側(cè)最近的標(biāo)高數(shù)據(jù)所在行,以圖6為例,將坡度值-2、坡長值430及坐標(biāo)放到標(biāo)高11.64所在行。

由于同一組坡度坡長未合并到同一行,對于第n個坡度坡長,從第Roundup(n/2)個標(biāo)高數(shù)據(jù)開始遍歷,當(dāng)坡度或坡長的橫坐標(biāo)介于第m個和m+1個標(biāo)高的橫坐標(biāo)之間時,將第n個坡度坡長放在第m個標(biāo)高數(shù)據(jù)所在行,滿足先坡度后坡長;然后通過標(biāo)高值確定坡度的正負號,若第m個標(biāo)高值大于第m+1個標(biāo)高值,則坡度符號為正,否則為負。

5 更新坡度坡長數(shù)據(jù)

5.1 確定起點站和終點站位置

只考慮兩種站點標(biāo)注方式,第一種如圖7所示,每個站點標(biāo)注了相鄰站點的名稱。

圖7 站點標(biāo)注

第二種只標(biāo)注每個站點的名稱。站點個數(shù)為奇數(shù)時,以中間站為真實站點;為偶數(shù)個時,對于起點站,以橫坐標(biāo)較小的為真實站點;對于終點站,以橫坐標(biāo)較大的為真實站點。

5.2 更新起點站和終點站坡長

如圖8所示,以起點站為例,起點站到右側(cè)豎線的距離表達式為d=p(xn+1-xqdz)/(xn+1-xn),p為坡度值,xqdz、xn、xn+1分別為起點站、第n條豎線、第n+1條豎線的橫坐標(biāo)。

圖8 起點站路段

對于起點站,直接更新第n個標(biāo)高所在行的坡長值;對于終點站,在第n個和第n+1 個標(biāo)高之間插入空白行,此時空白行為第n+1個數(shù)據(jù),將第n行賦給第n+1行,更新第n個和第n+1個坡長值。

5.3 將環(huán)線標(biāo)記為上行線和下行線

若存在環(huán)線,默認終點站左側(cè)的數(shù)據(jù)屬于上行線,右側(cè)數(shù)據(jù)屬于下行線。按照上行線/下行線、環(huán)線進行排序,排序后下行線數(shù)據(jù)順序為先環(huán)線再主線,按照橫坐標(biāo)從大到小的順序?qū)χ骶€進行排序。保存提取的數(shù)據(jù)默認保存在D盤根目錄。

6 實例測試

以某項目為例,無環(huán)線,上行線和下行線分別單獨放在一張圖紙中。程序運行后,彈出4個對話框,分別要求手動輸入坡度圖層、標(biāo)高圖層、起點站名稱、終點站名稱,如圖9所示。

圖9 輸入對話框

4個對話框均輸入后,程序自動運行,輸出的部分結(jié)果如圖10 所示,原始圖紙如圖11 所示。坡度值、坡長值滿足要求,坡度的正負號符合要求。

圖10 提取的部分?jǐn)?shù)據(jù)

圖11 原始圖紙

該圖紙中存在個別坡度坡長數(shù)據(jù)的圖層為0,如圖12所示,程序讀取的結(jié)果如圖13所示。

圖12 坡度坡長異常數(shù)據(jù)

圖13 坡度坡長異常數(shù)據(jù)提取結(jié)果

該路段不在兩端,坡度坡長數(shù)據(jù)為空,標(biāo)高不為空,設(shè)計人員可以通過標(biāo)高值快速找到異常數(shù)據(jù)的位置。

以包含環(huán)線的項目的圖紙進行測試,部分結(jié)果如圖14 所示。上行線最后一條豎線沒有對應(yīng)的坡度坡長值,和實際相符。

圖14 環(huán)線提取結(jié)果

由上述結(jié)果可知,程序提取結(jié)果滿足要求。

7 結(jié)語

為了自動從CAD 圖紙中提取線路的坡度坡長數(shù)據(jù),編寫了VBA 程序,只需人工輸入起點站和終點站名稱、坡度坡長和標(biāo)高所在圖層,操作簡單。測試結(jié)果表明:由程序提取的坡度坡長的準(zhǔn)確性滿足要求;與傳統(tǒng)方法相比,大幅減少了數(shù)據(jù)錄入的時間。

猜你喜歡
圖紙
神秘的圖紙
基于區(qū)塊鏈的建筑信息模型圖紙多人協(xié)同創(chuàng)作系統(tǒng)
淺談汽車線束產(chǎn)品圖紙管理
看圖紙
模具圖紙在全生命周期內(nèi)的信息管理系統(tǒng)研究
一種圖紙管理模式在機械廠的應(yīng)用與管理
化工管理(2016年12期)2016-03-14 08:01:02
圖紙折疊探討
檔案管理(2015年4期)2015-06-25 21:10:13
酒店室內(nèi)裝修圖紙深化設(shè)計淺析
河南科技(2014年12期)2014-02-27 14:10:44
瓦勒里歐·奧加提 設(shè)計選例,圖紙
世界建筑(2012年8期)2012-04-20 06:09:14
爸爸的“神秘寶貝”
主站蜘蛛池模板: 欧美专区日韩专区| 波多野结衣亚洲一区| 综合亚洲网| 伊人福利视频| 亚洲成aⅴ人片在线影院八| 久久久久久久久亚洲精品| 国产一级做美女做受视频| 亚洲AV电影不卡在线观看| 久久久亚洲色| 91伊人国产| 97在线碰| 国产在线一区二区视频| 91视频国产高清| 国产在线小视频| 亚洲第一综合天堂另类专| 欧美日韩国产综合视频在线观看| 草草影院国产第一页| 国产欧美高清| 亚洲男人在线| 亚洲男人天堂2018| 91破解版在线亚洲| 国产黄色爱视频| 日韩 欧美 国产 精品 综合| 久久性妇女精品免费| 色噜噜在线观看| 国产成人在线无码免费视频| 97国产在线视频| 青青操国产| 国产aaaaa一级毛片| 国产成人做受免费视频| 久久综合五月| 亚洲精品欧美日韩在线| 不卡视频国产| 欧美午夜视频在线| 日韩大片免费观看视频播放| 激情爆乳一区二区| 精品一区国产精品| 日韩a级片视频| 亚洲第七页| 久久综合婷婷| 亚洲无码高清一区二区| 99在线小视频| 国产日产欧美精品| 精品一区二区三区无码视频无码| 四虎精品国产AV二区| 国产a v无码专区亚洲av| 波多野结衣一区二区三区四区视频| 久久久久免费精品国产| 视频一本大道香蕉久在线播放| 国产精品毛片一区| 99热这里只有精品免费国产| 色屁屁一区二区三区视频国产| 国产精品成人观看视频国产| 亚洲一区网站| 久久久无码人妻精品无码| 色婷婷国产精品视频| 亚洲人人视频| 久久久久久午夜精品| 国产成人1024精品下载| 99精品在线视频观看| 99精品免费在线| 久久国产精品麻豆系列| av在线手机播放| 欧美日本二区| 亚洲天堂久久| 男女性午夜福利网站| 2021国产在线视频| 国产一区二区福利| 国产人碰人摸人爱免费视频| 成人字幕网视频在线观看| 在线观看国产精品日本不卡网| 少妇极品熟妇人妻专区视频| 一级香蕉人体视频| 国产免费自拍视频| 国产成人夜色91| 欧美天堂在线| 国产日本欧美在线观看| 999国产精品| 久青草免费视频| 国产日本欧美在线观看| 一区二区三区毛片无码| 日本在线免费网站|