王 浩
(中國鐵路設計集團有限公司,天津 300251)
自從鐵路總公司牽頭成立鐵路BIM 聯盟以來,鐵路BIM 技術應用獲得了快速的發展[1-3]。各單位依據自身需求選用不同的軟件平臺進行探索,取得了較大的技術進步。但是無論各單位選擇那一款軟件平臺,隨著研究的深入將面臨軟件功能不足的問題[4]。
各軟件平臺所建立的三維模型雖然能夠較好地表達各工程實體間的空間幾何關系,但是對于其他設計信息的附加能力較弱。盡管通過IFC 屬性的附加,模型具備了一定的類型及屬性信息[5],但是附加的信息仍然不能夠滿足設計需要。
目前,BIM 軟件主要有歐特克(Autodesk)、本特利(Bentley)和達索(Dassault)[5]。各軟件平臺在鐵路行業中的建模思路雖然命名不同[6-9],但基本可歸屬于“骨架-模板”模式[10-11]。
以達索平臺為例,鐵路行業內多采用EKL 語言批量實例化用戶自定義特征 (UDF,User Define Feature)的方式建立骨架[12],該方法受限于EKL 語言的執行效率和UDF 的實例化速度,在骨架線數量較多的時候生成速度較慢。并且UDF 作為骨架線的載體,附加的信息相當有限,在設計及建模過程中需要設計人員進行大量的手動計算來確定模板實例化過程中需要的數據。
如1 圖1 所示,計算骨架線所需數據耗費設計者大量的時間和精力,而采用UDF 無法省略該步驟的主要原因就是UDF 所能附加的信息不足,切無法包含復雜運算。
為了解決上述問題,減少設計者重復工作,本文在鐵路隧道行業內探索使用CAA 開發的方式將骨架線作為自定義特征[13],由設計基礎數據直接生成隧道骨架線。同時探索解決了設計信息附加的問題,開發人員可以任意添加骨架附加信息,提高了BIM設計的效率和質量。
骨架線是模型模板的定位基準,在部分模型模板當中還承擔定型的作用,同時是協同設計中重要的信息傳遞載體[14-15]。所以,骨架線是整個建模工作的基礎。鐵路行業內的骨架線由總到分至少分為層。
線路總骨架由線路專業提供,是整條線路模型空間位置的最根本基礎。總骨架包含線路左線和線路右線,其中,線路左線包含線路左線平面、縱曲線、左線三維線路以及斷鏈表,線路右線包含線路右線平面、右線三維線路以及起止里程。骨架線模型,如圖2 所示。
以隧道專業為例,隧道專業總骨架為在線路總骨架左線上按隧道起終點里程截取的線段。目前,隧道專業總骨架使用UDF 特征,采用EKL 語言批量生成。
專業骨架可依據各專業實際需要細分為若干層,但本質上都是將專業總骨架劃分為可以直接作為建模基準細度的骨架線。以隧道專業為例,按照隧道襯砌類型表將隧道專業總骨架截斷。襯砌類型表中的每一項對應一條隧道專業骨架。隧道專業骨架線同樣適用UDF 特征,采用EKL 語言批量生成。
自定義特征是達索平臺CAA 開發提供的擴展功能,可以由用戶自己根據實際需要和業務邏輯定義適合自己需要的特征。自定義特征可以附加大量的信息,并包含復雜的邏輯判斷和計算功能。
自定義特征的信息主要儲存在2 個部分。附加信息,如斷鏈表、骨架起終點里程記錄在Catalog 文件中,Catalog 文件由OSM 文件生成。確定自定義特征中所能存儲的信息類型,存儲某個自定義特征的具體信息數據。判斷邏輯和計算功能記錄在代碼生成的win64 文件中,通過將win64 文件部署到達索平臺安裝文件夾下特定位置調用,達到計算機代替設計人員進行復雜數據計算的目的。Catalog 生成及作用,如圖3 所示。
在達索平臺內部,一個特征的建立需要歷經數學特征、幾何特征、拓撲特征和機械特征4 個層級。
其中,機械特征的名稱主要因為達索平臺最初是為機械行業服務,名稱一致沿用,鐵路行業最終生成的自定義特征應該是機械特征。
數學特征包括生成特征所需的數值型數據,如圓心坐標值,圓半徑等。幾何特征在數字特征的基礎上增加了特征的幾何實體和空間位置等信息,是內存中實際存在的幾何體。拓撲特征包含CATIA 特征所需的信息,可以參與拓撲運算,如將曲線拉伸成曲面或將曲面拉伸成實體等。上述3 種特征存在內存中,而機械特征才是最終出現在用戶可見的模板空間中的特征實體。數據生成自定義特征過程,如圖4所示。
骨架線二次開發主要需要實現2 方面功能,(1)通過讀取對話框內輸入的設計數據,生成單根骨架線。(2)通過讀取Excel 內數據批量生成一系列的骨架線。
程序采用用戶接口組件模型,在同一框架下分為4 個模塊,分別是Addin.m, CommonFunction.m,Feat.m, UI.m,每個模塊下包含若干類和資源。
如圖5 所示軟件分為4 個模塊:
(1)Addin.m 模塊作用為將整個軟件實現的功能做成按鈕添加到軟件平臺當中。
(2)CommonFunction.m 模塊內包含一個名為CommonFunction 的類,該類中存儲了大量通用性函數。
(3)Feat.m 模塊定義了自定義特征的功能。包括數據的存入Catalog 和讀取,確定由數據到生成自定義特征的過程,確定自定義特征在結構樹上顯示的屬性內容等。
(4)UI.m 模塊包含內容主要為對話框資源及對于部分對話框內屬性數據的處理方法。
生成隧道骨架線需要的輸入元素及數據包括線路左線幾何圖形集、骨架起終點里程、版本號。其中,線路左線幾何圖形集下需要用到左線三維線位、左線平面線位以及斷鏈表。
骨架線生成流程,如圖6 所示。(1)骨架線起終點里程在對話框內獲取以后,讀取斷鏈表內信息,計算出起終點里程的實際位置;(2)由于鐵路工程中的里程長度為平面線位的長度,因此計算出的里程點應該首先生成在平面線位上;(3)有平面線位上的起終點向Z 方向延伸與三維線位相交生成三維起終點;(4)采用三維起終點截取左線三維骨架線,并結合版本號生成隧道專業骨架線。
由于該自定義特征將所有屬性信息都存儲在Catalog 當中,可以通過自定義特征本身的更新適應輸入元素及屬性的修改。與傳統UDF 骨架線相比極大地減少了設計人員工作量。
批量生成骨架線所需的屬性信息存儲在Excel 當中,通過程序逐行讀取Excel 內數據。結合對話框中讀取的左線幾何圖形集循環調用Feat.m 內的功能批量生成隧道專業骨架線。批量生成骨架線流程,如圖7 所示。
在程序內部,生成每根骨架線的具體功能(圖7 中藍色背景部分內容)直接調用生成單根骨架線部分函數,因此在修改過程中直接調用單根骨架線修改功能,可以方便的實施修改。
在達索平臺中,點在線上的定位通常采用點到曲線起點的距離。由于斷鏈的存在,鐵路線路上里程點間的距離并不一定等于兩個里程點之間的差值。因此在獲取里程點信息之后需要結合斷鏈表信息進行計算,確定里程點在線路上的實際位置。
在使用UDF 作為隧道專業骨架線的方法中,由于UDF 無法存儲斷鏈表信息,也無法包含復雜計算,因此計算里程點實際位置的工作必須由設計者手動完成,不但工作量巨大、容易出現錯誤,也沒有辦法在線路或斷鏈表信息發生變化的時候通過自我更新來進行修改。而采用自定義特征作為骨架線由于存儲了斷鏈表信息和里程點實際位置的計算方法,以上問題均不會出現。斷鏈表示意圖,如圖8 所示。
通常,斷鏈序號0 為線路起點里程。在從對話框內得到里程點信息后,要判斷里程點位于哪個區間。由于斷鏈序號前里程和后里程之間的里程是不存在的,因此里程點必然會位于兩個斷鏈序號之間的區間,即前一斷鏈序號后里程以后,后一斷鏈序號前里程之前。確定里程點位置區間后,即可確定線路起點與里程點位置之間的斷鏈數量。然后循環執行用里程點里程值線路起點里程的差值依次減去里程點前斷鏈后里程與前里程的差值,公式如下:
式中:
L——里程點距離線路起點的距離;
Df——里程點里程值;
DS——線路起點里程值;
n——里程點前斷鏈數量;
Di1——斷鏈序號i前里程值;
Di2——斷鏈序號i后里程值。
計算結果可直接采用達索平臺點到曲線起點距離定位的方式確定里程點實際位置。
需要注意的是,骨架線自定義特征內由數據生成自定義特征過程函數定義在TunnelESKBuild::Build()函數中,該函數在自定義特征生成或輸入屬性值發生改變時自動調用。但是由于骨架線自定義特征存儲的是線路左線幾何圖形集,并沒有直接存儲斷鏈表內的數據信息,因此修改斷鏈表內信息并不能觸發TunnelESKBuild::Build()函數的執行。因此在斷鏈表信息更改后需要修改骨架自定義特征的版本屬性觸發更新。
通過C++語言進行CAA 二次開發將骨架線作為自定義特征,實現了將線路信息、里程信息、斷鏈信息和計算方法等存儲于骨架線當中。實現了設計信息從人為記錄計算到計算機存儲計算的轉變,提高了BIM 模型的信息化程度。成功解決了此前骨架線建立速度慢、前期計算量大易出錯后期修改復雜的缺點。與傳統骨架線建立方法相比,其優勢主要體現在以下幾個方面:
(1)前期計算由計算機代替設計人員完成,減輕了設計人員工作并減少了人工計算錯誤的可能。
(2)UDF 由于自身原因,生成速度較慢,采用自定義特征方式加快了骨架線建模速度。
(3)骨架線包含更多設計信息,方便后續建模的使用,加強了信息的統一性和準確性。
(4)面對上游數據的修改,可以更好的實現自我更新,減少了建模工作量,避免了依賴骨架線建立的模型因為骨架線的修改而需要進行的修改工作。