(青島理工大學(xué) 土木工程學(xué)院,青島 266033)
Revit是BIM系列軟件中應(yīng)用最廣范的一款基礎(chǔ)建模軟件,基于Revit平臺(tái)進(jìn)行二次開發(fā)是完善BIM技術(shù)的一項(xiàng)重要舉措。目前基于Revit平臺(tái)有兩種主流開發(fā)模式,第一種是在Visual Studio 平臺(tái)上用編程語言(C#或者VB.NET)進(jìn)行二次開發(fā)形成.dll文件,并以插件的形式載入到Revit的附加模塊中,本文把這種模式稱之為 “Plugin+Revit”開發(fā)模式[1];另一種是利用開源插件Dynamo直接在Revit平臺(tái)上進(jìn)行二次開發(fā),通過連接作用不同的Dynamo節(jié)點(diǎn)實(shí)現(xiàn)開發(fā)功能,本文把這種模式稱之為“Dynamo+Revit”開發(fā)模式。本文對(duì)這兩種模式進(jìn)行了詳細(xì)介紹與分析研究。
Revit作為一款普適性三維建模軟件,其全面準(zhǔn)確的建筑數(shù)據(jù)和強(qiáng)大的建模工具為建筑信息化打下良好基礎(chǔ)。在Dynamo還未與Revit結(jié)合之前,人們常說的Revit二次開發(fā)即指“Plugin+Revit”開發(fā)模式。
通過Autodesk公司提供的RevitAPI,軟件商、設(shè)計(jì)方、施工方都能開發(fā)便利自己的插件。自RevitAPI開放以來,短短十幾年,國(guó)內(nèi)外基于Revit平臺(tái)開發(fā)了一大批面向建筑行業(yè)的實(shí)用插件,如美國(guó)CSI公司研發(fā)Revit與結(jié)構(gòu)計(jì)算軟件ETABS互導(dǎo)的CSIxRevit插件、Trelligence公司直接在Revit Architecture基礎(chǔ)上自主研發(fā)出用于在建筑規(guī)劃設(shè)計(jì)時(shí)根據(jù)用戶需求更新規(guī)劃的Affinity軟件[2]、美國(guó)CTC公司的BIM管理套件以及印度ProtoTech Solutions公司的OBJ Exporter For Revit插件。我國(guó)基于Revit的二次開發(fā)相對(duì)較晚,東經(jīng)天元公司于2011年開發(fā)出 R-Star CAD插件標(biāo)志著我國(guó) Revit 二次開發(fā)進(jìn)入成長(zhǎng)階段,同年北京盈建科軟件有限責(zé)任公司開發(fā)了盈建科建筑結(jié)構(gòu)設(shè)計(jì)軟件系統(tǒng)( YJK)[3]。其后Revit二次開發(fā)在我國(guó)迎來了百花齊放的局面,出現(xiàn)了一大批優(yōu)秀的Revit二次開發(fā)插件。
結(jié)合對(duì)國(guó)內(nèi)外Revit二次開發(fā)插件的研究,Revit插件可分成五類:族庫(kù)類、設(shè)計(jì)類、翻模類、綜合類、互操作類。各類插件的功能以及代表性插件如表1。
“Plugin+Revit”模式開發(fā)流程一般為:在Visual Studio 2017中新建項(xiàng)目,創(chuàng)建類庫(kù);在項(xiàng)目中添加RevitAPI裝配文件RevitAPI.dll和RevitAPIUI.dll,在程序的頭部添加在程序編寫過程中用到的命名空間引用,如using Autodesk.Revit.UI、using Autodesk.Revit.DB等;引用外部命令接口IExternal Command,重載Execute()方法,編寫Execute代碼并經(jīng)過實(shí)驗(yàn)調(diào)試實(shí)現(xiàn)既定功能[1]。 開發(fā)流程見圖1。
表1 Revit插件類型
插件類型插件功能代表性插件族庫(kù)類提供Revit族庫(kù)下載、管理構(gòu)件等功能構(gòu)件鄔、型兔、NBIMer族助手、族庫(kù)大師、isBIM族立方設(shè)計(jì)類在建筑、結(jié)構(gòu)、設(shè)備設(shè)計(jì)時(shí)具有輔助作用鴻業(yè)科技BIM協(xié)同設(shè)計(jì)平臺(tái)BIMspace、里正BIM翻模類在Revit軟件中基于CAD圖紙智能化建模海頤威模盒、翻模大師綜合類一個(gè)內(nèi)置的管理系統(tǒng),具有多種功能的插件合集呆貓、ISBIM、橄欖山互操作類使Revit與其他建筑專業(yè)軟件相互導(dǎo)入導(dǎo)出Lumion Collada Ex-porter、IFC2017、魯班萬通revit
從Revit2014開始,Dynamo以Revit附加模塊的形式出現(xiàn),近幾年Revit版本不斷升級(jí),Dynamo的穩(wěn)定性也逐步加強(qiáng)。在Revit2017中Dynamo已成為Revit的內(nèi)置功能,其啟動(dòng)位置移到管理菜單,成為系統(tǒng)管理的重要工具。Dynamo增加了Revit的“易用性”,它打破了建筑與計(jì)算機(jī)行業(yè)的行業(yè)壁壘,使建筑從業(yè)人員可以利用Dynamo基于Revit平臺(tái)開發(fā)所需功能,實(shí)現(xiàn)了“專業(yè)的人做專業(yè)的事”,而不用通過編程人員進(jìn)行插件定制[4-5]。
“Dynamo+Revit”開發(fā)模式已經(jīng)深入到國(guó)內(nèi)外建筑行業(yè)的各個(gè)方面。在建筑設(shè)計(jì)階段,Dynamo可以輔助設(shè)計(jì)師進(jìn)行建筑外型設(shè)計(jì),實(shí)現(xiàn)設(shè)計(jì)方案的動(dòng)態(tài)模擬;在模型建立階段,開發(fā)出許多快速建模和模型組件自動(dòng)化的輔助程序,提高了由二維設(shè)計(jì)圖紙到三維模型轉(zhuǎn)化的作業(yè)效率[6-7];在管線綜合階段,開發(fā)出利用Dynamo快速判斷空間凈高的輔助程序,直接利用Dynamo判斷管線模型是否符合相關(guān)規(guī)范;在法規(guī)檢討階段,利用Dynamo建立步行距離檢討及空間面積計(jì)算等輔助程序,協(xié)助我們進(jìn)行相關(guān)法規(guī)檢討;對(duì)于營(yíng)建項(xiàng)目而言,通過自行編寫Dynamo的圖紙創(chuàng)建輔助程序,避免人為輸入錯(cuò)誤的情況。
圖1 “Plugin+Revit”模式開發(fā)流程
在橋梁工程中,Dynamo與Revit相互配合能精確定位橋梁各構(gòu)件位置,并提升構(gòu)件布置效率;在水利工程中,通過Dynamo進(jìn)行開發(fā),實(shí)現(xiàn)了水工建筑物的三維模型全參數(shù)化[8];在隧道工程中,實(shí)現(xiàn)了Revit+Dynamo參數(shù)化隧道模型的構(gòu)建[9]。
“Dynamo+Revit” 開發(fā)流程一般為:在Revit軟件的管理界面中打開Dynamo,新建一個(gè)DYN文件;通過搜索節(jié)點(diǎn)命令或者聯(lián)網(wǎng)下載Dynamo軟件包找到開發(fā)功能所需節(jié)點(diǎn),也可用Python語言在Code Block節(jié)點(diǎn)內(nèi)進(jìn)行代碼編寫自制節(jié)點(diǎn);將節(jié)點(diǎn)放置在界面空白處,按節(jié)點(diǎn)限定條件依次連接;經(jīng)過多次調(diào)試完成Dynamo命令開發(fā)。開發(fā)流程見圖2。
以上兩種主流Revit二次開發(fā)模式都有自身的優(yōu)勢(shì),為了便于比較這兩種模式的異同,我們從開發(fā)人員、開發(fā)基礎(chǔ)、開發(fā)復(fù)雜度三個(gè)方面進(jìn)行比較分析。
“Plugin+Revit”模式開發(fā)人員一般從事計(jì)算機(jī)軟件行業(yè),具有一定的編程基礎(chǔ),開發(fā)出的插件大體符合功能要求,但在細(xì)節(jié)方面并不完全契合建筑人員的需求[10-11],例如橄欖山是我國(guó)比較知名的Revit二次開發(fā)軟件商,但橄欖山插件的功能并不能完全實(shí)現(xiàn)其開發(fā)本意,單單房間裝修命令就出現(xiàn)識(shí)別不到墻、重復(fù)裝修等問題。
“Dynamo+Revit”模式開發(fā)人員大多是建筑行業(yè)從事人員,能利用Dynamo根據(jù)自身需求進(jìn)行定制級(jí)開發(fā),所開發(fā)功能完全契合自身需求。Dynamo可以提供Revit內(nèi)部的功能,讓用戶在不借助API編程的情況下進(jìn)行開發(fā)[7]。用戶能夠更加輕松地定制自己的Revit命令,而不用花時(shí)間學(xué)習(xí)代碼、編譯和調(diào)試,Dynamo的這項(xiàng)功能使該模式更加易用,貼合實(shí)際。
圖2 “Dynamo+Revit”開發(fā)流程
“Plugin+Revit”模式需要美國(guó)微軟公司的開發(fā)工具包系列產(chǎn)品Microsoft Visual Studio配合,以RevitAPI為基礎(chǔ),通過專業(yè)編程人員進(jìn)行代碼編寫,實(shí)現(xiàn)所需功能。Revit雖然不是BIM系列軟件中最符合建筑人員使用習(xí)慣的軟件,但其普及度最高的原因就是能夠提供開放的API,在“Plugin+Revit”開發(fā)模式中,RevitAPI是打通各款建筑專業(yè)軟件信息交流的重要工具,借助RevitAPI可以把瑣碎的建模工作自動(dòng)化,將其他軟件的功能集成或連接到Revit中,這樣在一個(gè)平臺(tái)上就能完成幾乎所有的功能。但該模式在Visual Studio平臺(tái)上進(jìn)行代碼編寫,并不能將開發(fā)效果實(shí)時(shí)反映到Revit中,一個(gè)命令的開發(fā)需要經(jīng)過多次調(diào)試修復(fù)BUG,開發(fā)過程十分繁瑣。
“Dynamo+Revit”模式直接在Revit中進(jìn)行開發(fā),其開發(fā)基礎(chǔ)是Dynamo節(jié)點(diǎn)庫(kù),該模式能夠?qū)㈤_發(fā)效果直觀地反映到Revit中,若將某節(jié)點(diǎn)關(guān)聯(lián)到構(gòu)件上,通過調(diào)節(jié)該節(jié)點(diǎn),可以在Revit中看到構(gòu)件屬性的變化。Dynamo除自帶節(jié)點(diǎn)庫(kù)外,還提供聯(lián)網(wǎng)下載節(jié)點(diǎn)包與自制節(jié)點(diǎn)的功能。在Dynamo程序界面上有軟件包命令欄,集成搜索、管理、發(fā)布軟件包等功能,通過發(fā)布軟件包命令可以上傳自定義Dynamo節(jié)點(diǎn)包,通過搜索軟件包命令可以聯(lián)網(wǎng)搜索并下載國(guó)內(nèi)外Dynamo研究人員無償發(fā)布的節(jié)點(diǎn)包,其涉及建筑、道路、橋梁等多個(gè)專業(yè)。當(dāng)Dynamo自帶節(jié)點(diǎn)庫(kù)與聯(lián)網(wǎng)節(jié)點(diǎn)庫(kù)中沒有所需節(jié)點(diǎn)時(shí),開發(fā)人員可以在“Code Block”節(jié)點(diǎn)中直接編寫DesignScript代碼,自制功能節(jié)點(diǎn)。Dynamo的開源性,促進(jìn)了“Dynamo+Revit”開發(fā)模式的發(fā)展,但由于Dynamo節(jié)點(diǎn)包保密性差,不如編程的封裝性好,在一定程度上限制了該模式的發(fā)展規(guī)模。
兩種模式開發(fā)基礎(chǔ)不同,導(dǎo)致開發(fā)難度有很大差異。因Dynamo操作容易,邏輯簡(jiǎn)單,只要根據(jù)具體思路進(jìn)行即可,實(shí)現(xiàn)一個(gè)命令所需節(jié)點(diǎn)數(shù)的多少并不完全代表該命令的復(fù)雜程度;而代碼編寫邏輯復(fù)雜,代碼行數(shù)隨命令復(fù)雜程度的升高而增加,且更加容易出現(xiàn)BUG,調(diào)試工作困難。下面通過實(shí)例對(duì)兩種開發(fā)模式的復(fù)雜度進(jìn)行比較。
在CODING(研發(fā)流程與管理平臺(tái))下載Revit某插件源代碼,與Dynamo節(jié)點(diǎn)進(jìn)行比較。記錄實(shí)現(xiàn)相同命令所需要Dynamo節(jié)點(diǎn)數(shù)與代碼行數(shù),如表2,表格從上到下命令的復(fù)雜度逐漸增加,其中“創(chuàng)建樓板面層”與“創(chuàng)建墻體面層”兩個(gè)命令復(fù)雜度基本相同。
表2 實(shí)現(xiàn)相同命令所需要Dynamo節(jié)點(diǎn)數(shù)與代碼行數(shù)
命令所需Dynamo節(jié)點(diǎn)/個(gè)所需代碼/行獲取墻長(zhǎng)度320過濾結(jié)構(gòu)柱242創(chuàng)建樓板面層27310創(chuàng)建墻體面層45320天正轉(zhuǎn)Revit75800
由表2可知,代碼行數(shù)與命令的復(fù)雜程度大致呈線性關(guān)系,而Dynamo節(jié)點(diǎn)數(shù)并不完全遵循此規(guī)則,如“過濾結(jié)構(gòu)柱”比“獲取墻長(zhǎng)度”復(fù)雜,但所需Dynamo節(jié)點(diǎn)卻比“獲取墻長(zhǎng)度”多1個(gè);“創(chuàng)建樓板面層”與“創(chuàng)建墻體面層”兩個(gè)命令復(fù)雜度基本相同,但所需Dynamo節(jié)點(diǎn)數(shù)卻相差18個(gè)。從邏輯上看,因代碼行數(shù)成百上千,“Plugin+Revit”模式需要簡(jiǎn)明的算法與嚴(yán)謹(jǐn)?shù)倪壿?,否則會(huì)出現(xiàn)差之毫厘謬以千里的效果;“Dynamo+Revit”模式不需要邏輯十分嚴(yán)謹(jǐn),只要放置的節(jié)點(diǎn)與節(jié)點(diǎn)之間能夠正常連接,就可以實(shí)現(xiàn)所需功能。
圖3 代碼演示
“Plugin+Revit”模式可以將某一方向的很多功能集成于一個(gè)系統(tǒng),以插件的形式載入到Revit選項(xiàng)卡中。實(shí)現(xiàn)這種功能進(jìn)一步增加了該模式的復(fù)雜度,但方便使用者進(jìn)行查找和應(yīng)用開發(fā)功能[12]?!癉ynamo+Revit”模式只能以DYN文件的形式運(yùn)行開發(fā)功能,每次使用需重新關(guān)聯(lián)Revit構(gòu)件,該模式降低了開發(fā)復(fù)雜度,但在一定程度上限制了所開發(fā)功能的使用范圍。
Revit不能實(shí)現(xiàn)批量添加樓板的功能,通過兩種模式對(duì)該功能進(jìn)行開發(fā)。
使用“Plugin+Revit”模式編寫代碼310余行,截取部分代碼如圖3。該模式需要定義多種方法,比如定義獲取房間列表方法為public List
使用“Dynamo+Revit”模式連接節(jié)點(diǎn)27個(gè),其思路為:選中所有房間→按條件過濾房間→提取房間輪廓與標(biāo)高→處理輪廓與標(biāo)高數(shù)據(jù)→選擇樓板類型→生成樓板。實(shí)現(xiàn)該功能所需節(jié)點(diǎn)在已發(fā)布的節(jié)點(diǎn)包中均能找到。
通過用兩種模式對(duì)批量添加樓板功能進(jìn)行開發(fā),可以發(fā)現(xiàn)“Plugin+Revit”模式的缺點(diǎn)是開發(fā)時(shí)間長(zhǎng),對(duì)編程能力要求高,容易出現(xiàn)BUG且調(diào)試?yán)щy,無法針對(duì)個(gè)人需求提出解決方案;優(yōu)點(diǎn)是封裝性能好,使用開發(fā)命令方便。而“Dynamo+Revit”模式優(yōu)缺點(diǎn)正好與之相反,Dynamo為建筑人員提供了一把通向編程的鑰匙,大大加強(qiáng)了Revit的適用性,建筑人員能利用Dynamo根據(jù)自身需求進(jìn)行定制級(jí)開發(fā),所開發(fā)功能完全契合自身需求,所以“Dynamo+Revit”模式可以輔助解決專業(yè)問題。
綜上,“Plugin+Revit”模式更適用于開發(fā)具有系統(tǒng)性、普遍性的功能,是解決BIM模型一模多用的關(guān)鍵,適合軟件公司進(jìn)行商業(yè)化開發(fā);“Dynamo+Revit”模式更適用于開發(fā)專業(yè)性的功能,使BIM模型更加貼合設(shè)計(jì)意圖,符合土建專業(yè)的要求,是實(shí)現(xiàn)BIM模型落地的關(guān)鍵,適合建筑與土木工程專業(yè)人員進(jìn)行內(nèi)部開發(fā)。
BIM作業(yè)若真正要產(chǎn)生價(jià)值,投入的時(shí)間與成本相當(dāng)可觀。但是合理進(jìn)行二次開發(fā),選擇恰當(dāng)?shù)拈_發(fā)模式,既可以提升Revit的建模效率,又可以實(shí)現(xiàn)BIM模型的一模多用。這就打破了BIM產(chǎn)生的價(jià)值與花費(fèi)成本間的正比例關(guān)系,一方面可以降低建模與出圖的人力和時(shí)間的投入;另一方面又可以更深入地應(yīng)用模型中的信息,提供更加務(wù)實(shí)的BIM拓展應(yīng)用點(diǎn),這便是Revit二次開發(fā)的價(jià)值所在,也是BIM革命的核心所在。