蒲 晏,黃 平,劉 源,劉立峰
(1. 中國(guó)電建集團(tuán)西北勘測(cè)設(shè)計(jì)研究院有限公司,西安 710065;2. 西安市清潔能源數(shù)字化技術(shù)重點(diǎn)實(shí)驗(yàn)室,西安 710065)
隨著“數(shù)字中國(guó)”戰(zhàn)略不斷推進(jìn),工程數(shù)字化和信息化快速發(fā)展,BIM技術(shù),數(shù)字孿生,AR/VR,3D打印等技術(shù)愈發(fā)成熟[1]。三維模型作為這些技術(shù)的載體也變得非常重要,產(chǎn)生這些三維模型的三維設(shè)計(jì)環(huán)節(jié)成為工程中非常重要的一環(huán),在整個(gè)工程數(shù)字化和信息化中起到至關(guān)重要的作用[2],數(shù)字化設(shè)計(jì)已經(jīng)成為設(shè)計(jì)發(fā)展的新方向[3]。
當(dāng)前在三維設(shè)計(jì)領(lǐng)域,達(dá)索公司的CATIA[4]、3DExperience,AutoDesk公司的Revit[5]、Civil3D[6]和美國(guó)Bentley公司的MicroStation[7]、Prostructures等各有所長(zhǎng),在水電設(shè)計(jì)行業(yè)因?yàn)閷I(yè)眾多,在實(shí)際生產(chǎn)過(guò)程中為了充分發(fā)揮各設(shè)計(jì)軟件的優(yōu)勢(shì)[8-9],經(jīng)常采用CATIA與Revit混合設(shè)計(jì)的模式。三維協(xié)同設(shè)計(jì)時(shí)經(jīng)常需要使用其它專業(yè)模型做為建模參考[10],因此需要轉(zhuǎn)換模型數(shù)據(jù)進(jìn)入對(duì)應(yīng)的平臺(tái),但是CATIA與Revit中并不具有該功能。目前已有劉立峰等提出通過(guò)Inventor和CAD來(lái)做CATIA與Revit數(shù)據(jù)轉(zhuǎn)換[11],但是該方案需要安裝Inventor和CAD軟件并且轉(zhuǎn)換操作繁瑣復(fù)雜,整個(gè)轉(zhuǎn)換過(guò)程顯得非常臃腫,使用起來(lái)比較麻煩。
近年來(lái)隨著B(niǎo)IM技術(shù)在工程行業(yè)中的不斷應(yīng)用[12],模型輕量化技術(shù)愈發(fā)成熟,輕量化模型在剖切[13]、碰撞檢查等應(yīng)用上已有非常成熟的方案,CATIA和Revit提供了豐富的二次開(kāi)發(fā)接口供用戶來(lái)獲取數(shù)據(jù)和創(chuàng)建模型。因此本文提出一種基于CATIA和Revit二次開(kāi)發(fā),通過(guò)SDK接口讀取模型數(shù)據(jù)后,對(duì)數(shù)據(jù)進(jìn)行輕量化處理并保存為自定義格式的輕量化文件,在對(duì)應(yīng)的平臺(tái)中導(dǎo)入并解析文件后,通過(guò)二次開(kāi)發(fā)接口創(chuàng)建模型和屬性實(shí)現(xiàn)模型重構(gòu)的方法,實(shí)現(xiàn)CATIA與Revit平臺(tái)間的數(shù)據(jù)轉(zhuǎn)換。
本文提出一種基于BIM輕量化模型的CATIA與Revit數(shù)據(jù)轉(zhuǎn)換方法。該方法將CATIA二次開(kāi)發(fā)技術(shù)、Revit二次開(kāi)發(fā)技術(shù)和模型輕量化技術(shù)相融合通過(guò)二次開(kāi)發(fā)調(diào)用設(shè)計(jì)軟件接口API解析模型幾何信息和非幾何信息,對(duì)提取的數(shù)據(jù)信息進(jìn)行數(shù)據(jù)解析并重構(gòu)后保存為自定義格式的輕量化文件,再在對(duì)應(yīng)平臺(tái)中通過(guò)二次開(kāi)發(fā)的方式解析輕量化模型,獲得模型幾何和非幾何數(shù)據(jù),調(diào)用創(chuàng)建模型和屬性的API對(duì)模型進(jìn)行重構(gòu),最終實(shí)現(xiàn)兩個(gè)平臺(tái)間模型數(shù)據(jù)相互轉(zhuǎn)換引用。具體數(shù)據(jù)轉(zhuǎn)換技術(shù)路線如圖 1 所示。

圖1 數(shù)據(jù)轉(zhuǎn)換技術(shù)路線
達(dá)索系統(tǒng)為CATIA提供了豐富的二次開(kāi)發(fā)方式,因其開(kāi)發(fā)方式基于COM的特性,所以幾乎所有編程語(yǔ)言都可以用以進(jìn)行CATIA二次開(kāi)發(fā)。比較常見(jiàn)的是使用宏和使用組件應(yīng)用架構(gòu)CAA(Component Application Architecture)進(jìn)行CATIA二次開(kāi)發(fā),本次技術(shù)研究選用基于組件應(yīng)用架構(gòu)CAA-C++ Extended Development的開(kāi)發(fā)方式[14]。
CAA-C++ Extended Development二次開(kāi)發(fā)技術(shù)是基于CAA-RADE集成環(huán)境,在Visual Studio中集成并提供一個(gè)CAA框架的C++程序編譯器。通過(guò)調(diào)用API函數(shù)調(diào)用CATIA的核心程序,創(chuàng)建與CATIA風(fēng)格一致的界面,實(shí)現(xiàn)客戶程序和原系統(tǒng)的緊密集成。
Revit二次開(kāi)發(fā)是通過(guò).Net語(yǔ)言對(duì)Revit功能實(shí)現(xiàn)擴(kuò)展。所有支持.Net的語(yǔ)言(C#,VB.Net、托管C++等)都可用于進(jìn)行Revit二次開(kāi)發(fā)。Revit二次開(kāi)發(fā)通過(guò)安裝Revit SDK搭建Revit二次開(kāi)發(fā)環(huán)境,環(huán)境搭建完成后,即可在Revit對(duì)應(yīng)版本的Visual Studio中進(jìn)行程序編寫(xiě),通過(guò)引入動(dòng)態(tài)鏈接庫(kù)實(shí)現(xiàn)對(duì)RevitAPI的調(diào)用。開(kāi)發(fā)完成后生成插件dll文件,配置.addin文件實(shí)現(xiàn)對(duì)插件的自動(dòng)加載。本次研究選用的是Revit2019、Visual Studio 2017使用C#語(yǔ)言進(jìn)行Revit二次開(kāi)發(fā)。
模型輕量化在BIM屆是共知的概念,但是至今沒(méi)有一個(gè)明確的定義。本文探索的輕量化技術(shù)是針對(duì)CATIA和Revit模型,廢除設(shè)計(jì)模型數(shù)據(jù)中龐大的設(shè)計(jì)過(guò)程內(nèi)容數(shù)據(jù),使用抽殼技術(shù)僅保留模型幾何結(jié)果和所需要的參數(shù)及屬性信息,最終實(shí)現(xiàn)減小模型體量的效果[15]。本次研究中模型幾何結(jié)果采用三維三角網(wǎng)格進(jìn)行保存,每個(gè)模型都是由三角網(wǎng)格構(gòu)成,三角網(wǎng)的疏密程度根據(jù)模型精度控制。三角網(wǎng)格數(shù)據(jù)包括頂點(diǎn)數(shù)據(jù)、頂點(diǎn)索引數(shù)據(jù)、頂點(diǎn)UV坐標(biāo)數(shù)據(jù)和頂點(diǎn)Normal數(shù)據(jù)構(gòu)成。
此次研究中輕量化文件定義為本地?cái)?shù)據(jù)庫(kù)文件,包括模型結(jié)構(gòu)數(shù)據(jù)、模型幾何參考數(shù)據(jù)、 模型幾何實(shí)例數(shù)據(jù)、模型材質(zhì)數(shù)據(jù)、模型屬性數(shù)據(jù)5個(gè)數(shù)據(jù)表采用二進(jìn)制方式存儲(chǔ)模型對(duì)應(yīng)數(shù)據(jù)內(nèi)容,其中表與表之間通過(guò)ID建立關(guān)聯(lián)關(guān)系實(shí)現(xiàn)數(shù)據(jù)關(guān)聯(lián)。
輕量化模型數(shù)據(jù)結(jié)構(gòu)如圖2所示。由圖2可知,模型結(jié)構(gòu)數(shù)據(jù)記錄模型的組織結(jié)構(gòu),并記錄每個(gè)模型節(jié)點(diǎn)包含的幾何信息和屬性信息的關(guān)聯(lián)關(guān)系。模型幾何參考數(shù)據(jù)記錄模型幾何經(jīng)過(guò)離散后的三角面片(Triangle)數(shù)據(jù)。模型幾何實(shí)例數(shù)據(jù)記錄每個(gè)實(shí)例的幾何關(guān)聯(lián)與坐標(biāo)偏移矩陣(Matrix)。模型材質(zhì)數(shù)據(jù)記錄模型的顏色(Color)、材質(zhì)(Material)、可見(jiàn)性(Visibility)等數(shù)據(jù)。模型屬性數(shù)據(jù)記錄模型的參數(shù)等屬性數(shù)據(jù)(Parameter、Properties),如CATIA中的設(shè)計(jì)參數(shù)、設(shè)計(jì)屬性,Revit中的參數(shù)等,此次技術(shù)研究中定義輕量化格式為“B3D”文件格式。

圖2 輕量化模型數(shù)據(jù)結(jié)構(gòu)
通過(guò)CATIA-CAA二次開(kāi)發(fā)方式對(duì)CATIA當(dāng)前激活文檔中模型幾何、結(jié)構(gòu)、屬性信息進(jìn)行提取,經(jīng)過(guò)數(shù)據(jù)處理后保存為輕量化文件,通過(guò)Revit二次開(kāi)發(fā)對(duì)輕量化文件數(shù)據(jù)進(jìn)行解析,解析完成后調(diào)用RevitAPI在Revit中依據(jù)數(shù)據(jù)重構(gòu)模型。
2.2.1CATIA模型數(shù)據(jù)輕量化
(1) 模型結(jié)構(gòu)數(shù)據(jù)提取通過(guò)文檔容器CATFrmEditor接口類獲得當(dāng)前文檔,使用CATIDescendants接口類遍歷CATIA中結(jié)構(gòu)樹(shù)獲得模型結(jié)構(gòu)數(shù)據(jù)存入結(jié)構(gòu)數(shù)據(jù)表中。
(2) 當(dāng)遍歷到最下層Body節(jié)點(diǎn)時(shí),使用GetBody()方法取的模型拓?fù)湫畔⒑?使用CATICGMCellTessellator接口類對(duì)拓?fù)鋷缀涡畔⑦M(jìn)行離散計(jì)算獲得離散三角面片數(shù)據(jù),對(duì)三角面片數(shù)據(jù)進(jìn)行組織后存入幾何引用表。
CATICGMCellTessellator是達(dá)索為二次開(kāi)發(fā)用戶提供的一個(gè)模型離散接口類,類中具體方法函數(shù)如圖3所示。通過(guò)SetOutputMode()和SetStep()方法設(shè)置離散參數(shù),通過(guò)AddFace()方法添加需要離散的面對(duì)象,通過(guò)Run()方法進(jìn)行數(shù)據(jù)離散操作;通過(guò)GetFace()方法獲得離散后的三角面片數(shù)據(jù)。

圖3 CAA離散幾何數(shù)據(jù)接口
(3) 模型偏移矩陣提取使用CATIMovable接口類獲得裝配和零件節(jié)點(diǎn)偏移坐標(biāo)保存至模型幾何實(shí)例表。
(4) 模型屬性提取使用CATIParmPublisher和CATIAttributesDescription接口類獲得模型上添加的參數(shù)信息以及裝配節(jié)點(diǎn)和零件節(jié)點(diǎn)的屬性信息保存至模型屬性表。
(5) 模型顏色提取使用CATIVisProperties接口類獲得模型的顏色和透明度信息;顏色和透明度信息可以通過(guò)裝配、零件、body節(jié)點(diǎn)向下繼承;保存這些信息至模型材質(zhì)數(shù)據(jù)表中。
獲得所有數(shù)據(jù)后,對(duì)模型數(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)建幾何形狀,最終通過(guò)幾何形狀與參數(shù)和材質(zhì)關(guān)聯(lián)實(shí)現(xiàn)在Revit中重構(gòu)模型。
(1) 通過(guò)ExternalDefinitionCreationOptions創(chuàng)建共享參數(shù)后,使用InstanceBinding將共享參數(shù)與Revit常規(guī)模型綁定。
(2) 通過(guò)Material接口類傳入材質(zhì)表中顏色、透明度等參數(shù)信息后創(chuàng)建Revit材質(zhì)。
(3) 使用TessellatedShapeBuilder接口類傳入離散幾何三角面片數(shù)據(jù),生成幾何形狀,通過(guò)DirectShape接口類創(chuàng)建常規(guī)模型對(duì)象,通過(guò)唱過(guò)常規(guī)模型與共享參數(shù)的關(guān)聯(lián)關(guān)系為創(chuàng)建的模型對(duì)象設(shè)置屬性值信息和材質(zhì)信息。
通過(guò)Revit二次開(kāi)發(fā)調(diào)用RevitAPI對(duì)當(dāng)前窗口模型三維視圖中的模型幾何、結(jié)構(gòu)、屬性信息進(jìn)行提取,經(jīng)過(guò)數(shù)據(jù)處理后保存為輕量化文件,利用CAA二次開(kāi)發(fā)對(duì)輕量化文件數(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為二次開(kāi)發(fā)用戶提供的一個(gè)模型信息提取的接口類,具體類方法如圖4所示。通過(guò)繼承該類后重寫(xiě)類中方法實(shí)現(xiàn)自定義導(dǎo)出,通過(guò)OnElementBegin()實(shí)現(xiàn)對(duì)模型構(gòu)件的遍歷,可以讀取構(gòu)件名稱、分類等信息,通過(guò)OnInstanceBegin()實(shí)現(xiàn)對(duì)Revit族庫(kù)實(shí)例進(jìn)行遍歷,通過(guò)OnMaterial()實(shí)現(xiàn)對(duì)構(gòu)件材質(zhì)顏色的讀取, 通過(guò)OnPolymesh()方法模型離散數(shù)據(jù)的讀取。

圖4 Revit導(dǎo)出模型接口類
(2) Revit模型屬性導(dǎo)出
通過(guò)Element中Parameter方法實(shí)現(xiàn)對(duì)模型構(gòu)件參數(shù)讀取。
2.3.2CATIA中導(dǎo)入Revit模型
在CATIA中加載輕量化模型后,解析讀取輕量化模型數(shù)據(jù)為結(jié)構(gòu)化數(shù)據(jù);使用CATIMechanicalRootFactory工廠類在CATIA中創(chuàng)建結(jié)構(gòu)樹(shù)節(jié)點(diǎn);使用CATICkeParmFactory工廠類為相應(yīng)節(jié)點(diǎn)創(chuàng)建參數(shù)并設(shè)置相關(guān)參數(shù)值;使用CATGeoFactory類根據(jù)輕量化模型中三角面片信息創(chuàng)建Mesh模型;然后使用開(kāi)發(fā)的Mesh轉(zhuǎn)曲面的工具把Mesh轉(zhuǎn)為對(duì)應(yīng)曲面;使用CATIVisProperties接口設(shè)置顏色后完成Revit模型數(shù)據(jù)導(dǎo)入CATIA。
本文設(shè)計(jì)的基于輕量化模型的CATIA與Revit數(shù)據(jù)轉(zhuǎn)換方法可以解決以往需要安裝Inventor和CAD來(lái)進(jìn)行CATIA與Revit數(shù)據(jù)轉(zhuǎn)換的過(guò)程繁瑣的問(wèn)題。通過(guò)CATIA和Revit二次開(kāi)發(fā),實(shí)現(xiàn)輕量化模型文件的導(dǎo)入與導(dǎo)出功能,依托輕量化模型文件實(shí)現(xiàn)數(shù)據(jù)轉(zhuǎn)換操作。結(jié)合實(shí)際測(cè)試情況對(duì)該方法進(jìn)行介紹和分析。
為保證項(xiàng)目設(shè)計(jì)整體位置正確,在創(chuàng)建項(xiàng)目時(shí)需要統(tǒng)一定義坐標(biāo)系,不論在Revit還是在CATIA中均使用統(tǒng)一的坐標(biāo)系進(jìn)行三維設(shè)計(jì)。在建模時(shí),可以根據(jù)相應(yīng)設(shè)計(jì)軟件精度問(wèn)題對(duì)模型進(jìn)行一定程度的偏移,在模型輕量化轉(zhuǎn)換時(shí)在根據(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中打開(kāi)CATIA模型,使用基于CAA二次開(kāi)發(fā)技術(shù)開(kāi)發(fā)的CATIA輕量化轉(zhuǎn)換工具,設(shè)置導(dǎo)出規(guī)則,屬性規(guī)則等相關(guān)轉(zhuǎn)換設(shè)置后,導(dǎo)出模型為輕量化模型文件;
(2) 在Revit中使用開(kāi)發(fā)的鏈接B3D工具,選擇第1步導(dǎo)出的輕量化模型后,輕量化模型以鏈接的形式被導(dǎo)入至Revit中。
此時(shí)模型已經(jīng)成功從CATIA轉(zhuǎn)換為Revit模型,但是因?yàn)槭擎溄幽P?所以對(duì)于協(xié)同設(shè)計(jì)時(shí)需要的捕捉等功能無(wú)法滿足。經(jīng)研究,模型可以應(yīng)用于捕捉等三維協(xié)同設(shè)計(jì)操作,具體操作如下:
(1) 選擇鏈接進(jìn)來(lái)的模型,在Revit界面選擇“綁定鏈接”命令,點(diǎn)擊確定,綁定模型鏈接;
(2) 選擇綁定的模型鏈接,點(diǎn)擊“解組”命令,等待解組操作完成后,模型可以被應(yīng)用于輔助建模。
CATIA模型轉(zhuǎn)Revit模型結(jié)果如圖6所示。由圖6可見(jiàn)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中打開(kāi)模型,使用開(kāi)發(fā)的Revit模型導(dǎo)出工具,在列表中選擇需要導(dǎo)出的三維視圖,設(shè)置坐標(biāo)偏移、屬性等轉(zhuǎn)換信息后轉(zhuǎn)換Revit模型為輕量化模型;
(2) 在CATIA中使用開(kāi)發(fā)的B3D導(dǎo)入工具,選擇上一步導(dǎo)出的輕量化模型后,模型被導(dǎo)入至CATIA中(見(jiàn)圖8)。

圖8 Revit模型導(dǎo)入CATIA結(jié)果
此時(shí)導(dǎo)入的模型為Mesh體模型,由三角面片構(gòu)成,在出圖應(yīng)用時(shí)會(huì)存在部分問(wèn)題,可以經(jīng)過(guò)Mesh轉(zhuǎn)為曲面進(jìn)行相關(guān)處理。使用開(kāi)發(fā)的Mesh轉(zhuǎn)曲面工具,選擇需要轉(zhuǎn)換為曲面的Mesh體,經(jīng)程序內(nèi)部運(yùn)行計(jì)算后,將Mesh轉(zhuǎn)換為曲面。
測(cè)試完成后,對(duì)測(cè)試結(jié)果進(jìn)行了統(tǒng)一分析見(jiàn)表1。

表1 測(cè)試結(jié)果分析
(1) 數(shù)據(jù)轉(zhuǎn)換后模型坐標(biāo)正確無(wú)誤差,所有模型屬性和參數(shù)等均成功在對(duì)應(yīng)的設(shè)計(jì)工具中重建并保持原值;
(2) 三維模型顏色等正確無(wú)誤差,但是因?yàn)閮蓚€(gè)設(shè)計(jì)平臺(tái)差異性,對(duì)應(yīng)的材質(zhì)貼圖丟失,只能保證顏色正確;
(3) 通過(guò)開(kāi)發(fā)的導(dǎo)入導(dǎo)出工具導(dǎo)入輕量化模型后創(chuàng)建的模型距離三維協(xié)同設(shè)計(jì)應(yīng)用還存在一定的差距,還需要2~3步的人工操作后才能將模型應(yīng)用于三維協(xié)同設(shè)計(jì);
(4) 轉(zhuǎn)換結(jié)果數(shù)據(jù)僅能供參考位置信息和屬性信息等,如果需要進(jìn)行剖切投圖等后續(xù)操作也存在很大的問(wèn)題,需要進(jìn)一步深入研究。
針對(duì)CATIA與Revit模型相互轉(zhuǎn)換這一問(wèn)題,本文提出一種基于BIM輕量化模型為中間數(shù)據(jù)格式的數(shù)據(jù)轉(zhuǎn)換方法,首先自定義輕量化格式數(shù)據(jù)文件,可以存儲(chǔ)模型的結(jié)構(gòu)、幾何、屬性數(shù)據(jù);通過(guò)CATIA和Revit二次開(kāi)發(fā)技術(shù)在CATIA和Revit中開(kāi)發(fā)模型導(dǎo)出和模型導(dǎo)入插件,實(shí)現(xiàn)快速導(dǎo)出和導(dǎo)入BIM輕量化模型。測(cè)試結(jié)果表明,該方法能夠完整的提取模型的信息從而實(shí)現(xiàn)數(shù)據(jù)轉(zhuǎn)換,并且轉(zhuǎn)換后模型的屬性、顏色等信息得以保留,能夠在對(duì)應(yīng)的平臺(tái)中作為參考模型被使用,提高了跨平臺(tái)混合三維協(xié)同設(shè)計(jì)的效率,為設(shè)計(jì)人員提供更多的選擇。
因?yàn)檩p量化模型本身是三角面片構(gòu)成,使用該方法轉(zhuǎn)換的數(shù)據(jù)結(jié)果對(duì)于剖切投圖存在一定的問(wèn)題,在未來(lái)的工作中可以繼續(xù)深入研究通過(guò)模型Brep信息進(jìn)行數(shù)據(jù)交換來(lái)解決處理這一問(wèn)題。另外目前僅研究了CATIA與Revit間數(shù)據(jù)轉(zhuǎn)換,未來(lái)的工作中也可以繼續(xù)深入研究CATIA、Revit、MicroStation等多平臺(tái)間數(shù)據(jù)轉(zhuǎn)換過(guò)程。