蒲 晏,黃 平,劉 源,劉立峰
(1. 中國電建集團西北勘測設(shè)計研究院有限公司,西安 710065;2. 西安市清潔能源數(shù)字化技術(shù)重點實驗室,西安 710065)
隨著“數(shù)字中國”戰(zhàn)略不斷推進(jìn),工程數(shù)字化和信息化快速發(fā)展,BIM技術(shù),數(shù)字孿生,AR/VR,3D打印等技術(shù)愈發(fā)成熟[1]。三維模型作為這些技術(shù)的載體也變得非常重要,產(chǎn)生這些三維模型的三維設(shè)計環(huán)節(jié)成為工程中非常重要的一環(huán),在整個工程數(shù)字化和信息化中起到至關(guān)重要的作用[2],數(shù)字化設(shè)計已經(jīng)成為設(shè)計發(fā)展的新方向[3]。
當(dāng)前在三維設(shè)計領(lǐng)域,達(dá)索公司的CATIA[4]、3DExperience,AutoDesk公司的Revit[5]、Civil3D[6]和美國Bentley公司的MicroStation[7]、Prostructures等各有所長,在水電設(shè)計行業(yè)因為專業(yè)眾多,在實際生產(chǎn)過程中為了充分發(fā)揮各設(shè)計軟件的優(yōu)勢[8-9],經(jīng)常采用CATIA與Revit混合設(shè)計的模式。三維協(xié)同設(shè)計時經(jīng)常需要使用其它專業(yè)模型做為建模參考[10],因此需要轉(zhuǎn)換模型數(shù)據(jù)進(jìn)入對應(yīng)的平臺,但是CATIA與Revit中并不具有該功能。目前已有劉立峰等提出通過Inventor和CAD來做CATIA與Revit數(shù)據(jù)轉(zhuǎn)換[11],但是該方案需要安裝Inventor和CAD軟件并且轉(zhuǎn)換操作繁瑣復(fù)雜,整個轉(zhuǎn)換過程顯得非常臃腫,使用起來比較麻煩。
近年來隨著BIM技術(shù)在工程行業(yè)中的不斷應(yīng)用[12],模型輕量化技術(shù)愈發(fā)成熟,輕量化模型在剖切[13]、碰撞檢查等應(yīng)用上已有非常成熟的方案,CATIA和Revit提供了豐富的二次開發(fā)接口供用戶來獲取數(shù)據(jù)和創(chuàng)建模型。因此本文提出一種基于CATIA和Revit二次開發(fā),通過SDK接口讀取模型數(shù)據(jù)后,對數(shù)據(jù)進(jìn)行輕量化處理并保存為自定義格式的輕量化文件,在對應(yīng)的平臺中導(dǎo)入并解析文件后,通過二次開發(fā)接口創(chuàng)建模型和屬性實現(xiàn)模型重構(gòu)的方法,實現(xiàn)CATIA與Revit平臺間的數(shù)據(jù)轉(zhuǎn)換。
本文提出一種基于BIM輕量化模型的CATIA與Revit數(shù)據(jù)轉(zhuǎn)換方法。該方法將CATIA二次開發(fā)技術(shù)、Revit二次開發(fā)技術(shù)和模型輕量化技術(shù)相融合通過二次開發(fā)調(diào)用設(shè)計軟件接口API解析模型幾何信息和非幾何信息,對提取的數(shù)據(jù)信息進(jìn)行數(shù)據(jù)解析并重構(gòu)后保存為自定義格式的輕量化文件,再在對應(yīng)平臺中通過二次開發(fā)的方式解析輕量化模型,獲得模型幾何和非幾何數(shù)據(jù),調(diào)用創(chuàng)建模型和屬性的API對模型進(jìn)行重構(gòu),最終實現(xiàn)兩個平臺間模型數(shù)據(jù)相互轉(zhuǎn)換引用。具體數(shù)據(jù)轉(zhuǎn)換技術(shù)路線如圖 1 所示。
圖1 數(shù)據(jù)轉(zhuǎn)換技術(shù)路線
達(dá)索系統(tǒng)為CATIA提供了豐富的二次開發(fā)方式,因其開發(fā)方式基于COM的特性,所以幾乎所有編程語言都可以用以進(jìn)行CATIA二次開發(fā)。比較常見的是使用宏和使用組件應(yīng)用架構(gòu)CAA(Component Application Architecture)進(jìn)行CATIA二次開發(fā),本次技術(shù)研究選用基于組件應(yīng)用架構(gòu)CAA-C++ Extended Development的開發(fā)方式[14]。
CAA-C++ Extended Development二次開發(fā)技術(shù)是基于CAA-RADE集成環(huán)境,在Visual Studio中集成并提供一個CAA框架的C++程序編譯器。通過調(diào)用API函數(shù)調(diào)用CATIA的核心程序,創(chuàng)建與CATIA風(fēng)格一致的界面,實現(xiàn)客戶程序和原系統(tǒng)的緊密集成。
Revit二次開發(fā)是通過.Net語言對Revit功能實現(xiàn)擴展。所有支持.Net的語言(C#,VB.Net、托管C++等)都可用于進(jìn)行Revit二次開發(fā)。Revit二次開發(fā)通過安裝Revit SDK搭建Revit二次開發(fā)環(huán)境,環(huán)境搭建完成后,即可在Revit對應(yīng)版本的Visual Studio中進(jìn)行程序編寫,通過引入動態(tài)鏈接庫實現(xiàn)對RevitAPI的調(diào)用。開發(fā)完成后生成插件dll文件,配置.addin文件實現(xiàn)對插件的自動加載。本次研究選用的是Revit2019、Visual Studio 2017使用C#語言進(jìn)行Revit二次開發(fā)。
模型輕量化在BIM屆是共知的概念,但是至今沒有一個明確的定義。本文探索的輕量化技術(shù)是針對CATIA和Revit模型,廢除設(shè)計模型數(shù)據(jù)中龐大的設(shè)計過程內(nèi)容數(shù)據(jù),使用抽殼技術(shù)僅保留模型幾何結(jié)果和所需要的參數(shù)及屬性信息,最終實現(xiàn)減小模型體量的效果[15]。本次研究中模型幾何結(jié)果采用三維三角網(wǎng)格進(jìn)行保存,每個模型都是由三角網(wǎng)格構(gòu)成,三角網(wǎng)的疏密程度根據(jù)模型精度控制。三角網(wǎng)格數(shù)據(jù)包括頂點數(shù)據(jù)、頂點索引數(shù)據(jù)、頂點UV坐標(biāo)數(shù)據(jù)和頂點Normal數(shù)據(jù)構(gòu)成。
此次研究中輕量化文件定義為本地數(shù)據(jù)庫文件,包括模型結(jié)構(gòu)數(shù)據(jù)、模型幾何參考數(shù)據(jù)、 模型幾何實例數(shù)據(jù)、模型材質(zhì)數(shù)據(jù)、模型屬性數(shù)據(jù)5個數(shù)據(jù)表采用二進(jìn)制方式存儲模型對應(yīng)數(shù)據(jù)內(nèi)容,其中表與表之間通過ID建立關(guān)聯(lián)關(guān)系實現(xiàn)數(shù)據(jù)關(guān)聯(lián)。
輕量化模型數(shù)據(jù)結(jié)構(gòu)如圖2所示。由圖2可知,模型結(jié)構(gòu)數(shù)據(jù)記錄模型的組織結(jié)構(gòu),并記錄每個模型節(jié)點包含的幾何信息和屬性信息的關(guān)聯(lián)關(guān)系。模型幾何參考數(shù)據(jù)記錄模型幾何經(jīng)過離散后的三角面片(Triangle)數(shù)據(jù)。模型幾何實例數(shù)據(jù)記錄每個實例的幾何關(guān)聯(lián)與坐標(biāo)偏移矩陣(Matrix)。模型材質(zhì)數(shù)據(jù)記錄模型的顏色(Color)、材質(zhì)(Material)、可見性(Visibility)等數(shù)據(jù)。模型屬性數(shù)據(jù)記錄模型的參數(shù)等屬性數(shù)據(jù)(Parameter、Properties),如CATIA中的設(shè)計參數(shù)、設(shè)計屬性,Revit中的參數(shù)等,此次技術(shù)研究中定義輕量化格式為“B3D”文件格式。
圖2 輕量化模型數(shù)據(jù)結(jié)構(gòu)
通過CATIA-CAA二次開發(fā)方式對CATIA當(dāng)前激活文檔中模型幾何、結(jié)構(gòu)、屬性信息進(jìn)行提取,經(jīng)過數(shù)據(jù)處理后保存為輕量化文件,通過Revit二次開發(fā)對輕量化文件數(shù)據(jù)進(jìn)行解析,解析完成后調(diào)用RevitAPI在Revit中依據(jù)數(shù)據(jù)重構(gòu)模型。
2.2.1CATIA模型數(shù)據(jù)輕量化
(1) 模型結(jié)構(gòu)數(shù)據(jù)提取通過文檔容器CATFrmEditor接口類獲得當(dāng)前文檔,使用CATIDescendants接口類遍歷CATIA中結(jié)構(gòu)樹獲得模型結(jié)構(gòu)數(shù)據(jù)存入結(jié)構(gòu)數(shù)據(jù)表中。
(2) 當(dāng)遍歷到最下層Body節(jié)點時,使用GetBody()方法取的模型拓?fù)湫畔⒑?使用CATICGMCellTessellator接口類對拓?fù)鋷缀涡畔⑦M(jìn)行離散計算獲得離散三角面片數(shù)據(jù),對三角面片數(shù)據(jù)進(jìn)行組織后存入幾何引用表。
CATICGMCellTessellator是達(dá)索為二次開發(fā)用戶提供的一個模型離散接口類,類中具體方法函數(shù)如圖3所示。通過SetOutputMode()和SetStep()方法設(shè)置離散參數(shù),通過AddFace()方法添加需要離散的面對象,通過Run()方法進(jìn)行數(shù)據(jù)離散操作;通過GetFace()方法獲得離散后的三角面片數(shù)據(jù)。
圖3 CAA離散幾何數(shù)據(jù)接口
(3) 模型偏移矩陣提取使用CATIMovable接口類獲得裝配和零件節(jié)點偏移坐標(biāo)保存至模型幾何實例表。
(4) 模型屬性提取使用CATIParmPublisher和CATIAttributesDescription接口類獲得模型上添加的參數(shù)信息以及裝配節(jié)點和零件節(jié)點的屬性信息保存至模型屬性表。
(5) 模型顏色提取使用CATIVisProperties接口類獲得模型的顏色和透明度信息;顏色和透明度信息可以通過裝配、零件、body節(jié)點向下繼承;保存這些信息至模型材質(zhì)數(shù)據(jù)表中。
獲得所有數(shù)據(jù)后,對模型數(shù)據(jù)進(jìn)行優(yōu)化重組并更新數(shù)據(jù)表,保存為自定義的“b3d”格式。
2.2.2Revit導(dǎo)入輕量化模型
在Revit中加載輕量化模型文件后,解析輕量化模型數(shù)據(jù)為結(jié)構(gòu)化數(shù)據(jù),在Revit中根據(jù)屬性表數(shù)據(jù)在Revit中創(chuàng)建共享參數(shù)。根據(jù)材質(zhì)數(shù)據(jù)在Revit中創(chuàng)建材質(zhì)。根據(jù)模型幾何引用數(shù)據(jù)和坐標(biāo)偏移矩陣在Revit中創(chuàng)建幾何形狀,最終通過幾何形狀與參數(shù)和材質(zhì)關(guān)聯(lián)實現(xiàn)在Revit中重構(gòu)模型。
(1) 通過ExternalDefinitionCreationOptions創(chuàng)建共享參數(shù)后,使用InstanceBinding將共享參數(shù)與Revit常規(guī)模型綁定。
(2) 通過Material接口類傳入材質(zhì)表中顏色、透明度等參數(shù)信息后創(chuàng)建Revit材質(zhì)。
(3) 使用TessellatedShapeBuilder接口類傳入離散幾何三角面片數(shù)據(jù),生成幾何形狀,通過DirectShape接口類創(chuàng)建常規(guī)模型對象,通過唱過常規(guī)模型與共享參數(shù)的關(guān)聯(lián)關(guān)系為創(chuàng)建的模型對象設(shè)置屬性值信息和材質(zhì)信息。
通過Revit二次開發(fā)調(diào)用RevitAPI對當(dāng)前窗口模型三維視圖中的模型幾何、結(jié)構(gòu)、屬性信息進(jìn)行提取,經(jīng)過數(shù)據(jù)處理后保存為輕量化文件,利用CAA二次開發(fā)對輕量化文件數(shù)據(jù)進(jìn)行解析,解析完成后調(diào)用API在CATIA中依據(jù)數(shù)據(jù)重構(gòu)模型。
2.3.1Revit模型數(shù)據(jù)輕量化
(1) Revit模型導(dǎo)出
IExportContext接口類是Revit SDK為二次開發(fā)用戶提供的一個模型信息提取的接口類,具體類方法如圖4所示。通過繼承該類后重寫類中方法實現(xiàn)自定義導(dǎo)出,通過OnElementBegin()實現(xiàn)對模型構(gòu)件的遍歷,可以讀取構(gòu)件名稱、分類等信息,通過OnInstanceBegin()實現(xiàn)對Revit族庫實例進(jìn)行遍歷,通過OnMaterial()實現(xiàn)對構(gòu)件材質(zhì)顏色的讀取, 通過OnPolymesh()方法模型離散數(shù)據(jù)的讀取。
圖4 Revit導(dǎo)出模型接口類
(2) Revit模型屬性導(dǎo)出
通過Element中Parameter方法實現(xiàn)對模型構(gòu)件參數(shù)讀取。
2.3.2CATIA中導(dǎo)入Revit模型
在CATIA中加載輕量化模型后,解析讀取輕量化模型數(shù)據(jù)為結(jié)構(gòu)化數(shù)據(jù);使用CATIMechanicalRootFactory工廠類在CATIA中創(chuàng)建結(jié)構(gòu)樹節(jié)點;使用CATICkeParmFactory工廠類為相應(yīng)節(jié)點創(chuàng)建參數(shù)并設(shè)置相關(guān)參數(shù)值;使用CATGeoFactory類根據(jù)輕量化模型中三角面片信息創(chuàng)建Mesh模型;然后使用開發(fā)的Mesh轉(zhuǎn)曲面的工具把Mesh轉(zhuǎn)為對應(yīng)曲面;使用CATIVisProperties接口設(shè)置顏色后完成Revit模型數(shù)據(jù)導(dǎo)入CATIA。
本文設(shè)計的基于輕量化模型的CATIA與Revit數(shù)據(jù)轉(zhuǎn)換方法可以解決以往需要安裝Inventor和CAD來進(jìn)行CATIA與Revit數(shù)據(jù)轉(zhuǎn)換的過程繁瑣的問題。通過CATIA和Revit二次開發(fā),實現(xiàn)輕量化模型文件的導(dǎo)入與導(dǎo)出功能,依托輕量化模型文件實現(xiàn)數(shù)據(jù)轉(zhuǎn)換操作。結(jié)合實際測試情況對該方法進(jìn)行介紹和分析。
為保證項目設(shè)計整體位置正確,在創(chuàng)建項目時需要統(tǒng)一定義坐標(biāo)系,不論在Revit還是在CATIA中均使用統(tǒng)一的坐標(biāo)系進(jìn)行三維設(shè)計。在建模時,可以根據(jù)相應(yīng)設(shè)計軟件精度問題對模型進(jìn)行一定程度的偏移,在模型輕量化轉(zhuǎn)換時在根據(jù)偏移結(jié)果進(jìn)行還原設(shè)置。
CATIA數(shù)據(jù)轉(zhuǎn)Revit步驟如圖5所示。CATIA模型導(dǎo)為Revit模型具體包括如下步驟:
圖5 CATIA數(shù)據(jù)轉(zhuǎn)Revit步驟
(1) 在CATIA中打開CATIA模型,使用基于CAA二次開發(fā)技術(shù)開發(fā)的CATIA輕量化轉(zhuǎn)換工具,設(shè)置導(dǎo)出規(guī)則,屬性規(guī)則等相關(guān)轉(zhuǎn)換設(shè)置后,導(dǎo)出模型為輕量化模型文件;
(2) 在Revit中使用開發(fā)的鏈接B3D工具,選擇第1步導(dǎo)出的輕量化模型后,輕量化模型以鏈接的形式被導(dǎo)入至Revit中。
此時模型已經(jīng)成功從CATIA轉(zhuǎn)換為Revit模型,但是因為是鏈接模型,所以對于協(xié)同設(shè)計時需要的捕捉等功能無法滿足。經(jīng)研究,模型可以應(yīng)用于捕捉等三維協(xié)同設(shè)計操作,具體操作如下:
(1) 選擇鏈接進(jìn)來的模型,在Revit界面選擇“綁定鏈接”命令,點擊確定,綁定模型鏈接;
(2) 選擇綁定的模型鏈接,點擊“解組”命令,等待解組操作完成后,模型可以被應(yīng)用于輔助建模。
CATIA模型轉(zhuǎn)Revit模型結(jié)果如圖6所示。由圖6可見CATIA中模型成功被轉(zhuǎn)換為Revit模型,并且顏色、屬性、幾何形狀等關(guān)鍵信息未丟失。
圖6 CATIA模型轉(zhuǎn)Revit模型結(jié)果
Revit 模型導(dǎo)為CATIA模型步驟如圖7所示。Revit模型導(dǎo)為CATIA模型主要包含如下步驟:
圖7 Revit 模型導(dǎo)為CATIA模型步驟
(1) 在Revit中打開模型,使用開發(fā)的Revit模型導(dǎo)出工具,在列表中選擇需要導(dǎo)出的三維視圖,設(shè)置坐標(biāo)偏移、屬性等轉(zhuǎn)換信息后轉(zhuǎn)換Revit模型為輕量化模型;
(2) 在CATIA中使用開發(fā)的B3D導(dǎo)入工具,選擇上一步導(dǎo)出的輕量化模型后,模型被導(dǎo)入至CATIA中(見圖8)。
圖8 Revit模型導(dǎo)入CATIA結(jié)果
此時導(dǎo)入的模型為Mesh體模型,由三角面片構(gòu)成,在出圖應(yīng)用時會存在部分問題,可以經(jīng)過Mesh轉(zhuǎn)為曲面進(jìn)行相關(guān)處理。使用開發(fā)的Mesh轉(zhuǎn)曲面工具,選擇需要轉(zhuǎn)換為曲面的Mesh體,經(jīng)程序內(nèi)部運行計算后,將Mesh轉(zhuǎn)換為曲面。
測試完成后,對測試結(jié)果進(jìn)行了統(tǒng)一分析見表1。
表1 測試結(jié)果分析
(1) 數(shù)據(jù)轉(zhuǎn)換后模型坐標(biāo)正確無誤差,所有模型屬性和參數(shù)等均成功在對應(yīng)的設(shè)計工具中重建并保持原值;
(2) 三維模型顏色等正確無誤差,但是因為兩個設(shè)計平臺差異性,對應(yīng)的材質(zhì)貼圖丟失,只能保證顏色正確;
(3) 通過開發(fā)的導(dǎo)入導(dǎo)出工具導(dǎo)入輕量化模型后創(chuàng)建的模型距離三維協(xié)同設(shè)計應(yīng)用還存在一定的差距,還需要2~3步的人工操作后才能將模型應(yīng)用于三維協(xié)同設(shè)計;
(4) 轉(zhuǎn)換結(jié)果數(shù)據(jù)僅能供參考位置信息和屬性信息等,如果需要進(jìn)行剖切投圖等后續(xù)操作也存在很大的問題,需要進(jìn)一步深入研究。
針對CATIA與Revit模型相互轉(zhuǎn)換這一問題,本文提出一種基于BIM輕量化模型為中間數(shù)據(jù)格式的數(shù)據(jù)轉(zhuǎn)換方法,首先自定義輕量化格式數(shù)據(jù)文件,可以存儲模型的結(jié)構(gòu)、幾何、屬性數(shù)據(jù);通過CATIA和Revit二次開發(fā)技術(shù)在CATIA和Revit中開發(fā)模型導(dǎo)出和模型導(dǎo)入插件,實現(xiàn)快速導(dǎo)出和導(dǎo)入BIM輕量化模型。測試結(jié)果表明,該方法能夠完整的提取模型的信息從而實現(xiàn)數(shù)據(jù)轉(zhuǎn)換,并且轉(zhuǎn)換后模型的屬性、顏色等信息得以保留,能夠在對應(yīng)的平臺中作為參考模型被使用,提高了跨平臺混合三維協(xié)同設(shè)計的效率,為設(shè)計人員提供更多的選擇。
因為輕量化模型本身是三角面片構(gòu)成,使用該方法轉(zhuǎn)換的數(shù)據(jù)結(jié)果對于剖切投圖存在一定的問題,在未來的工作中可以繼續(xù)深入研究通過模型Brep信息進(jìn)行數(shù)據(jù)交換來解決處理這一問題。另外目前僅研究了CATIA與Revit間數(shù)據(jù)轉(zhuǎn)換,未來的工作中也可以繼續(xù)深入研究CATIA、Revit、MicroStation等多平臺間數(shù)據(jù)轉(zhuǎn)換過程。