(青島理工大學 土木工程學院,青島 266033)
Revit是BIM系列軟件中應用最廣范的一款基礎建模軟件,基于Revit平臺進行二次開發是完善BIM技術的一項重要舉措。目前基于Revit平臺有兩種主流開發模式,第一種是在Visual Studio 平臺上用編程語言(C#或者VB.NET)進行二次開發形成.dll文件,并以插件的形式載入到Revit的附加模塊中,本文把這種模式稱之為 “Plugin+Revit”開發模式[1];另一種是利用開源插件Dynamo直接在Revit平臺上進行二次開發,通過連接作用不同的Dynamo節點實現開發功能,本文把這種模式稱之為“Dynamo+Revit”開發模式。本文對這兩種模式進行了詳細介紹與分析研究。
Revit作為一款普適性三維建模軟件,其全面準確的建筑數據和強大的建模工具為建筑信息化打下良好基礎。在Dynamo還未與Revit結合之前,人們常說的Revit二次開發即指“Plugin+Revit”開發模式。
通過Autodesk公司提供的RevitAPI,軟件商、設計方、施工方都能開發便利自己的插件。自RevitAPI開放以來,短短十幾年,國內外基于Revit平臺開發了一大批面向建筑行業的實用插件,如美國CSI公司研發Revit與結構計算軟件ETABS互導的CSIxRevit插件、Trelligence公司直接在Revit Architecture基礎上自主研發出用于在建筑規劃設計時根據用戶需求更新規劃的Affinity軟件[2]、美國CTC公司的BIM管理套件以及印度ProtoTech Solutions公司的OBJ Exporter For Revit插件。我國基于Revit的二次開發相對較晚,東經天元公司于2011年開發出 R-Star CAD插件標志著我國 Revit 二次開發進入成長階段,同年北京盈建科軟件有限責任公司開發了盈建科建筑結構設計軟件系統( YJK)[3]。其后Revit二次開發在我國迎來了百花齊放的局面,出現了一大批優秀的Revit二次開發插件。
結合對國內外Revit二次開發插件的研究,Revit插件可分成五類:族庫類、設計類、翻模類、綜合類、互操作類。各類插件的功能以及代表性插件如表1。
“Plugin+Revit”模式開發流程一般為:在Visual Studio 2017中新建項目,創建類庫;在項目中添加RevitAPI裝配文件RevitAPI.dll和RevitAPIUI.dll,在程序的頭部添加在程序編寫過程中用到的命名空間引用,如using Autodesk.Revit.UI、using Autodesk.Revit.DB等;引用外部命令接口IExternal Command,重載Execute()方法,編寫Execute代碼并經過實驗調試實現既定功能[1]。 開發流程見圖1。
表1 Revit插件類型

插件類型插件功能代表性插件族庫類提供Revit族庫下載、管理構件等功能構件鄔、型兔、NBIMer族助手、族庫大師、isBIM族立方設計類在建筑、結構、設備設計時具有輔助作用鴻業科技BIM協同設計平臺BIMspace、里正BIM翻模類在Revit軟件中基于CAD圖紙智能化建模海頤威模盒、翻模大師綜合類一個內置的管理系統,具有多種功能的插件合集呆貓、ISBIM、橄欖山互操作類使Revit與其他建筑專業軟件相互導入導出Lumion Collada Ex-porter、IFC2017、魯班萬通revit
從Revit2014開始,Dynamo以Revit附加模塊的形式出現,近幾年Revit版本不斷升級,Dynamo的穩定性也逐步加強。在Revit2017中Dynamo已成為Revit的內置功能,其啟動位置移到管理菜單,成為系統管理的重要工具。Dynamo增加了Revit的“易用性”,它打破了建筑與計算機行業的行業壁壘,使建筑從業人員可以利用Dynamo基于Revit平臺開發所需功能,實現了“專業的人做專業的事”,而不用通過編程人員進行插件定制[4-5]。
“Dynamo+Revit”開發模式已經深入到國內外建筑行業的各個方面。在建筑設計階段,Dynamo可以輔助設計師進行建筑外型設計,實現設計方案的動態模擬;在模型建立階段,開發出許多快速建模和模型組件自動化的輔助程序,提高了由二維設計圖紙到三維模型轉化的作業效率[6-7];在管線綜合階段,開發出利用Dynamo快速判斷空間凈高的輔助程序,直接利用Dynamo判斷管線模型是否符合相關規范;在法規檢討階段,利用Dynamo建立步行距離檢討及空間面積計算等輔助程序,協助我們進行相關法規檢討;對于營建項目而言,通過自行編寫Dynamo的圖紙創建輔助程序,避免人為輸入錯誤的情況。

圖1 “Plugin+Revit”模式開發流程
在橋梁工程中,Dynamo與Revit相互配合能精確定位橋梁各構件位置,并提升構件布置效率;在水利工程中,通過Dynamo進行開發,實現了水工建筑物的三維模型全參數化[8];在隧道工程中,實現了Revit+Dynamo參數化隧道模型的構建[9]。
“Dynamo+Revit” 開發流程一般為:在Revit軟件的管理界面中打開Dynamo,新建一個DYN文件;通過搜索節點命令或者聯網下載Dynamo軟件包找到開發功能所需節點,也可用Python語言在Code Block節點內進行代碼編寫自制節點;將節點放置在界面空白處,按節點限定條件依次連接;經過多次調試完成Dynamo命令開發。開發流程見圖2。
以上兩種主流Revit二次開發模式都有自身的優勢,為了便于比較這兩種模式的異同,我們從開發人員、開發基礎、開發復雜度三個方面進行比較分析。
“Plugin+Revit”模式開發人員一般從事計算機軟件行業,具有一定的編程基礎,開發出的插件大體符合功能要求,但在細節方面并不完全契合建筑人員的需求[10-11],例如橄欖山是我國比較知名的Revit二次開發軟件商,但橄欖山插件的功能并不能完全實現其開發本意,單單房間裝修命令就出現識別不到墻、重復裝修等問題。
“Dynamo+Revit”模式開發人員大多是建筑行業從事人員,能利用Dynamo根據自身需求進行定制級開發,所開發功能完全契合自身需求。Dynamo可以提供Revit內部的功能,讓用戶在不借助API編程的情況下進行開發[7]。用戶能夠更加輕松地定制自己的Revit命令,而不用花時間學習代碼、編譯和調試,Dynamo的這項功能使該模式更加易用,貼合實際。

圖2 “Dynamo+Revit”開發流程
“Plugin+Revit”模式需要美國微軟公司的開發工具包系列產品Microsoft Visual Studio配合,以RevitAPI為基礎,通過專業編程人員進行代碼編寫,實現所需功能。Revit雖然不是BIM系列軟件中最符合建筑人員使用習慣的軟件,但其普及度最高的原因就是能夠提供開放的API,在“Plugin+Revit”開發模式中,RevitAPI是打通各款建筑專業軟件信息交流的重要工具,借助RevitAPI可以把瑣碎的建模工作自動化,將其他軟件的功能集成或連接到Revit中,這樣在一個平臺上就能完成幾乎所有的功能。但該模式在Visual Studio平臺上進行代碼編寫,并不能將開發效果實時反映到Revit中,一個命令的開發需要經過多次調試修復BUG,開發過程十分繁瑣。
“Dynamo+Revit”模式直接在Revit中進行開發,其開發基礎是Dynamo節點庫,該模式能夠將開發效果直觀地反映到Revit中,若將某節點關聯到構件上,通過調節該節點,可以在Revit中看到構件屬性的變化。Dynamo除自帶節點庫外,還提供聯網下載節點包與自制節點的功能。在Dynamo程序界面上有軟件包命令欄,集成搜索、管理、發布軟件包等功能,通過發布軟件包命令可以上傳自定義Dynamo節點包,通過搜索軟件包命令可以聯網搜索并下載國內外Dynamo研究人員無償發布的節點包,其涉及建筑、道路、橋梁等多個專業。當Dynamo自帶節點庫與聯網節點庫中沒有所需節點時,開發人員可以在“Code Block”節點中直接編寫DesignScript代碼,自制功能節點。Dynamo的開源性,促進了“Dynamo+Revit”開發模式的發展,但由于Dynamo節點包保密性差,不如編程的封裝性好,在一定程度上限制了該模式的發展規模。
兩種模式開發基礎不同,導致開發難度有很大差異。因Dynamo操作容易,邏輯簡單,只要根據具體思路進行即可,實現一個命令所需節點數的多少并不完全代表該命令的復雜程度;而代碼編寫邏輯復雜,代碼行數隨命令復雜程度的升高而增加,且更加容易出現BUG,調試工作困難。下面通過實例對兩種開發模式的復雜度進行比較。
在CODING(研發流程與管理平臺)下載Revit某插件源代碼,與Dynamo節點進行比較。記錄實現相同命令所需要Dynamo節點數與代碼行數,如表2,表格從上到下命令的復雜度逐漸增加,其中“創建樓板面層”與“創建墻體面層”兩個命令復雜度基本相同。
表2 實現相同命令所需要Dynamo節點數與代碼行數

命令所需Dynamo節點/個所需代碼/行獲取墻長度320過濾結構柱242創建樓板面層27310創建墻體面層45320天正轉Revit75800
由表2可知,代碼行數與命令的復雜程度大致呈線性關系,而Dynamo節點數并不完全遵循此規則,如“過濾結構柱”比“獲取墻長度”復雜,但所需Dynamo節點卻比“獲取墻長度”多1個;“創建樓板面層”與“創建墻體面層”兩個命令復雜度基本相同,但所需Dynamo節點數卻相差18個。從邏輯上看,因代碼行數成百上千,“Plugin+Revit”模式需要簡明的算法與嚴謹的邏輯,否則會出現差之毫厘謬以千里的效果;“Dynamo+Revit”模式不需要邏輯十分嚴謹,只要放置的節點與節點之間能夠正常連接,就可以實現所需功能。

圖3 代碼演示
“Plugin+Revit”模式可以將某一方向的很多功能集成于一個系統,以插件的形式載入到Revit選項卡中。實現這種功能進一步增加了該模式的復雜度,但方便使用者進行查找和應用開發功能[12]。“Dynamo+Revit”模式只能以DYN文件的形式運行開發功能,每次使用需重新關聯Revit構件,該模式降低了開發復雜度,但在一定程度上限制了所開發功能的使用范圍。
Revit不能實現批量添加樓板的功能,通過兩種模式對該功能進行開發。
使用“Plugin+Revit”模式編寫代碼310余行,截取部分代碼如圖3。該模式需要定義多種方法,比如定義獲取房間列表方法為public List
使用“Dynamo+Revit”模式連接節點27個,其思路為:選中所有房間→按條件過濾房間→提取房間輪廓與標高→處理輪廓與標高數據→選擇樓板類型→生成樓板。實現該功能所需節點在已發布的節點包中均能找到。
通過用兩種模式對批量添加樓板功能進行開發,可以發現“Plugin+Revit”模式的缺點是開發時間長,對編程能力要求高,容易出現BUG且調試困難,無法針對個人需求提出解決方案;優點是封裝性能好,使用開發命令方便。而“Dynamo+Revit”模式優缺點正好與之相反,Dynamo為建筑人員提供了一把通向編程的鑰匙,大大加強了Revit的適用性,建筑人員能利用Dynamo根據自身需求進行定制級開發,所開發功能完全契合自身需求,所以“Dynamo+Revit”模式可以輔助解決專業問題。
綜上,“Plugin+Revit”模式更適用于開發具有系統性、普遍性的功能,是解決BIM模型一模多用的關鍵,適合軟件公司進行商業化開發;“Dynamo+Revit”模式更適用于開發專業性的功能,使BIM模型更加貼合設計意圖,符合土建專業的要求,是實現BIM模型落地的關鍵,適合建筑與土木工程專業人員進行內部開發。
BIM作業若真正要產生價值,投入的時間與成本相當可觀。但是合理進行二次開發,選擇恰當的開發模式,既可以提升Revit的建模效率,又可以實現BIM模型的一模多用。這就打破了BIM產生的價值與花費成本間的正比例關系,一方面可以降低建模與出圖的人力和時間的投入;另一方面又可以更深入地應用模型中的信息,提供更加務實的BIM拓展應用點,這便是Revit二次開發的價值所在,也是BIM革命的核心所在。