黃 巖 張曉丹 毛燕紅
(江蘇建筑職業技術學院,建筑工業化與信息應用技術研究所,江蘇 徐州 221116)
建筑工業化和信息化正在引領著建筑業的發展,裝配式建筑和BIM又是工業化和信息化在建筑工程的重要體現,通過BIM技術實現裝配式構件的建立和修改是關鍵內容之一,基于BIM的裝配式生產發展模式已經成為建筑行業發展的必然趨勢[1]。裝配式構件庫作為BIM的一個重要組成部分,對于企業和高校都有重要意義。對于企業而言,逐步在建模過程中建立自己的構件庫,對于今后的BIM應用是一個極大的積累,可以大量的節約時間和金錢成本。對于高校而言,建立自己的構件庫,不僅對教學的可視化帶來幫助,使同學們可以直觀控制參數來調節構件,而且也能明顯提高服務企業時的建模的速度和準確性。
國內在2015年后逐步開始對Revit二次開發進行研究。2016年,肖貝利用Revit二次開發程序,結合基坑開挖工程案例,實現開挖模型建立,相應的土方量也可以同時準確計算得到[2]。2017年,劉濟凡和靳鳴對基于Revit的裝配式建筑項目深化設計插件進行研究開發,使用BIM軟件Revit對某裝配式建筑項目進行深化設計的過程中,遇到軟件沒有裝配式專用模塊、效率低下的問題,通過對Revit軟件的二次開發,減少了大量重復性的工作,使深化設計工作如期完成[3]。2019年,喬恩懋和丁琦基于Revit二次開發對空間網架結構BIM建模技術進行研究,通過對數據庫接口進行二次開發,使建模流程自動化,進行干涉和遺漏自動檢查,大大提高了鋼結構空間網架的建模效率[4]。陶婉婉對BIM模型數據進行二次開發研究,有效的提取模型構件的基本屬性、層次以及關聯關系等相關數據信息[5]。
然而,現階段的BIM軟件對裝配式建筑的支持還處于初始階段,開發人員正在努力開發適應裝配式的BIM軟件,雖然市面上已經出現了很多相關軟件,但由于裝配式建筑發展迅速,現有軟件不能完全適應裝配式需求。作為主要的BIM軟件Revit,本身沒有單獨的裝配式模塊,建模效率低下,導致裝配式模型BIM模型建立和使用較常規現澆模型困難很多,建立的族參數化受限,鋼筋等信息不能完全體現,沒有令人滿意的裝配式插件可供用戶使用,需要探索準確方便的Revit構件庫插件來幫助裝配式建模。
本程序二次開發采用C#和Revit API。C#作為一款面向對象的編程語言,繼承了C和C++的強大功能,同時和Java一樣具有易用性,在編程語言排行榜常年位居前五,有大量編程案例。C#具有大量的函數和類庫,調用十分方便,功能非常強大,且使用難度較C和C++低,面向對象的編程語句友好,非常適合Revit軟件的二次開發[6]。
Revit API是AutoCAD為Revit二次開發專門提供的類庫,包含了創建、刪除、修改構件和構件信息,批量化操作構件,導入外部數據文件,執行第三方程序,自動分析BIM模型信息等幾乎所有Revit操作。Revit API和C#有良好的接口,通過Visual Studio等集成開發環境可以靈活進行裝配式構件庫二次開發。
遵循軟件開發的一般過程,首先是需求分析,以較為復雜的疊合板為例,三維模型需要基本的參數來控制,這些參數要滿足工程實際。然后是深化設計,將疊合板的每一個控制參數細化見表1。每個變量需要有一個唯一的名稱作為區分,變量類型根據實際需要確定為整形、浮點型等,取值區間為變量的范圍,是否可以為空值,防止不合理的數據帶來軟件錯誤。給每個變量定義合適的初始默認值,方便用戶使用。

表1 疊合板控制變量參數表 mm
Revit API提供了外部命令(IExternal Command)的形式來調用類庫,最后生成DLL動態鏈接庫文件,通過外部工具調用繪圖命令,需要調用System,System.Collections.Generic,System.Text,System.Diagnostics,Autodesk.Revit,Autodesk.Revit.DB,Autodesk.Revit.UI等類庫。
裝配式構件繪制的實質是Revit中的族的建立。Revit API提供了Family類來管理族類型和族參數,包括FamilyManager,FamilyType,FamilyParameter等若干類。
Revit族有五種常見的繪制方式,包括拉伸、融合、旋轉、放樣、放樣融合等,三維圖形繪制模塊正是采用這五種基本方法進行模型建立。通過族的五種方式創建的模型,可以進行移動、旋轉、鏡像、復制等方法來繪制和調整。本程序疊合板創建核心代碼如下:
CurveArrArray caay = new CurveArrArray();
CurveArray cay1 = new CurveArray();
Autodesk.Revit.DB.XYZ nor1 = BasisZ;
SketchPlane skp = CreateSketchPlane(nor1, XYZ.Zero);
XYZ pt0 = XYZ.Zero;
XYZ pt1 = new XYZ(dhbl, 0, 0);
XYZ pt2 = new XYZ(dhbl, dhbk, 0);
XYZ pt3 = new XYZ(0, dhbk, 0);
Line linep1 = Line.CreateBound(pt0, pt1);
Line linep2 = Line.CreateBound(pt1, pt2);
Line linep3 = Line.CreateBound(pt2, pt3);
Line linep4 = Line.CreateBound(pt3, pt0);
cay1.Append(linep1);
cay2.Append(linep2);
cay3.Append(linep3);
cay4.Append(linep4);
curveArrArray.Append(cay1);
Extrusion rion = creationFamily.NewExtrusion(true, caay, skp, dhbg);
XYZ trans1 = new XYZ(0, 0, 0);
ElementTransform.Move(familyDocument, rion.Id, trans1);
要友好的運行軟件,必須有合理的GUI(Graphical User Interface),圖形界面使用戶更加利于接受軟件,使用常用的Ribbon界面模式,設計較為合理的圖標,包含在Ribbon UI庫中,使用Ribbon界面調出對話框。
以繪制疊合板為例,用戶交互界面如圖1所示。

Revit調用插件時,需要提供插件的ID,才能正確加載,程序完成后,需要在Revit的addin文件中定義如下語句,進行程序注冊。
打開Revit 2019,創建項目模型或者族模型,使用外部程序加載裝配式構件庫插件后,提示繪制構件。根據提示可以繪制裝配式構件,輸入合適的參數,可以進行相應圖元的繪制。如圖2所示為Revit中布置的疊合板。
以疊合板為例,根據右側圖形界面提示,需要輸入疊合板的長度、寬度、高度、桁架高度、上弦鋼筋直徑、下弦鋼筋直徑、腹桿鋼筋直徑、定尺長度以及桁架間距等參數,并注意系統提示的輸入單位,點擊確定按鈕,系統會根據輸入參數在Revit模型繪制界面自動繪制疊合板構件,并把相應參數傳遞到Revit族類型和族參數中,以方便下次修改。
圖3為Revit中布置的疊合梁,包括疊合梁長,寬、高、頂部和底部鋼筋直徑、箍筋間距、箍筋直徑、鋼筋保護層厚度等參數。


圖4為Revit中布置的預制剪力墻。包括剪力墻長、寬、高、墻洞數量和位置、墻洞長、寬、高、縱向和橫向鋼筋直徑和間距、鋼筋保護層厚度等。
開發環境采用Visual Studio 2019社區版開發,NetFramework 4.7版本,i5-4210u CPU,8G內存,Autodesk Revit采用2019版。

本文采用C#對Revit進行裝配式BIM構件庫二次開發,得到以下結論:1)基于C#的Revit二次開發擴充了BIM裝配式族庫,減少了重復性工作,在一定程度上解決了Revit沒有單獨的裝配式模塊,建模效率低下的問題。2)基于C#的Revit二次開發可以較好的實現疊合板、疊合梁、預制柱、預制剪力墻、預制樓梯等常見裝配式構件的參數化繪制和修改,形成參數化構件庫。3)可以在此二次開發基礎上進一步開發Revit裝配式插件,進行裝配式建筑整體建模,統計鋼筋和混凝土量,基于Revit的裝配式算量和造價,計算構件預制率,裝配式5D施工動畫制作等。