張 慎 楊 浩
(1.中南建筑設計院股份有限公司,武漢 430071;2.武漢大學土木建筑工程學院,武漢 430072)
Revit 是當今世界流行的協(xié)同工作軟件之一,它擁有強大的功能。然而,在實際工程設計階段,該軟件并不能完全滿足設計人員的需要。Revit 作為一款強大的建筑行業(yè)設計軟件,提供了非常強大和完整的三維建模能力,支持創(chuàng)建大型的復雜項目。同時為了滿足用戶的個體需要,提供了非常方便的二次開發(fā)功能,支持用戶根據(jù)自己的需要進行二次開發(fā)[1]。
在進行協(xié)同設計時,通常需要在某一區(qū)域內(nèi)布置噴頭。然而,Revit2014 軟件本身并沒有批量布置消防噴頭的功能。在對建筑內(nèi)進行消防噴頭的布置時,設計人員需要手工點擊噴頭位置,同時還需要參照規(guī)范計算噴頭的間距和個數(shù),工作量大且出錯概率較大。因此開發(fā)了基于Revit2014 的建筑消防噴頭輔助建模軟件,減輕了設計人員的工作量,提高了工作效率。
本文介紹的二次開發(fā)是基于Revit2014 版本,主要開發(fā)工具為Visual Studio2010、RevitAPI(Application Programming Interface)和Revit SDK。
本文講述的二次開發(fā)最終創(chuàng)建的文件為外部插件,創(chuàng)建平臺為Visual Studio2010(簡稱VS),基于的模板為類庫。開發(fā)語言為C#,并結(jié)合了Revit2014 提供的對外接口(Add -In Manager 2014),實現(xiàn)在Revit2014 中自動布置噴頭的功能。
Revit2014 二次開發(fā)參考文檔為RevitAPI.chm,里面包含了二次開發(fā)可以使用的一些命名空間,以及命名空間下的類和類中包含的函數(shù)和屬性。Revit SDK 是Autodesk 官方提供的包含完整客戶端API 庫、文檔及實例代碼的綜合文件庫[2,3]。
提取Revit2014 模型中的對象時利用了RevitAPI 中類之間的繼承關(guān)系[4]。常用類之間的繼承關(guān)系如圖1 所示。
采用Visual Studio2010,運用C#語言對Revit2014 進行二次開發(fā)的主要步驟:
(1)建立項目
啟動Visual Studio2010,新建一個VisualC#類庫項目,命名為RShower。Visual Studio2010自動生成Class1.cs 等文件,將Class1.cs 重命名為Sprinklers.cs。
(2)添加外部引用
在Visual Studio2010 菜單欄中點擊項目→添加引用,在彈出的“添加引用”對話框中,選“瀏覽”標簽,選中Revit2014 安裝文件根目錄下的RevitAPI.dll和RevitAPIUI.dll 文件,完成添加。繼續(xù)添加引用,在彈出的“添加引用”對話框中,選“.NET”標簽,找到System.Windows.Forms,完成添加。
(3)引用命名空間
在Sprinklers.cs 文件引用命名空間代碼區(qū)域添加using Autodesk.Revit.DB、using Autodesk.Revit.UI 等語句,調(diào)用Revit API 中相關(guān)命名空間。
(4)創(chuàng)建命令類
在創(chuàng)建的命名空間下為命令類加載屬性,選擇創(chuàng)建類的命令加載方式,主要包括選擇文件事物、更新、日志等的模式,Revit 在2014 版本中,文件事物模式和更新模式只能選擇手動模式,接著創(chuàng)建一個從IExternalCommand 派生的類。
(5)重載Execute()方法
在命令類中載用Execute()方法,并在方法中編碼實現(xiàn)一定的功能。
(6)生成dll。選擇菜單欄中生成→生成RShower(U),并在Visual Studio2010 輸出窗口中找到生成dll 的位置。
(7)添加到Revit2014 菜單中
運行Revit2014,選擇菜單附加模塊→外部工具→Add-In Manager(Manual Mode),在彈出的Add -In Manager 2014 對話框中選擇Load,找到生成RShower.dll 文件,添加。
(8)運行插件。
軟件的主要功能是在Revit2014 中加入批量布置噴頭的功能,需要滿足以下要求:對于規(guī)則布置區(qū)域,可以框選所有布置區(qū)域,自動按照《自動噴水滅火系統(tǒng)設計規(guī)范》(GB50084)快速合理的布置噴頭;對于不規(guī)則區(qū)域,設計人員可以指定某一區(qū)域,插件自動讀取該區(qū)域的信息,滿足要求進行最優(yōu)化布置;若設計人員指定布置的參數(shù),按照設計人員指定的參數(shù)進行布置;軟件以外部插件的形式嵌入到Revit2014 軟件中,軟件界面友好,設計人員操作方便。
安裝本軟件后,在Revit2014 的工具欄上會生成一個按鈕,如圖4 所示,單擊后啟動軟件。
軟件的主要工作界面如圖5 所示。
圖3 軟件的主要工作界面
由工作界面可以看出布置方式有兩種:已知行列和已知間距。用已知間距方法布置噴頭時,噴頭與墻最小距離、噴頭之間的最小間距、噴頭之間最大間距、噴頭距墻最大間距默認值均為規(guī)范中的規(guī)定,用戶也可以根據(jù)實際需要更改;用已知行列布置噴頭時,行數(shù)和列數(shù)均為用戶指定,可以根據(jù)情況選擇布置方式。噴頭類型中的類型為加載到項目中的所有噴頭類型,危險等級按規(guī)范取四種:輕危險級、中危險級Ⅰ、中危險級Ⅱ、嚴重危險級。噴頭與天花板的距離為布置的噴頭與該層天花板的距離。
圖4 軟件主要操作流程
軟件的操作比較方便,主要流程如圖2 所示。軟件首先會讀取用戶載入項目中的所有噴頭族文件,并獲取默認危險等級及相關(guān)參數(shù)顯示主界面。隨后根據(jù)用戶選擇的危險等級和噴頭類型,并結(jié)合用戶選擇的布置方式在房間內(nèi)根據(jù)規(guī)范布置噴頭。用戶選擇布置區(qū)域的方式有兩種:房間布置和區(qū)域布置,對于標準化大空間布置區(qū)域,可以通過房間布置方法布置,主要操作為將區(qū)域定義為房間,框選所有標準化布置區(qū)域,軟件即可讀取布置區(qū)域布置;對于非不規(guī)則的布置區(qū)域,可以通過區(qū)域布置方法布置,主要操作為選取布置區(qū)域的四個角點,軟件即可選擇布置區(qū)域進行布置。若用戶勾選了預演保護半徑,則在布置完成后會在平面圖中顯示每個噴頭的噴水區(qū)域。
圖5 軟件算法的實現(xiàn)
軟件在布置噴頭時考慮了《自動噴水滅火系統(tǒng)設計規(guī)范》(GB50084)中的要求和施工及經(jīng)濟性的要求[5]。規(guī)范中對噴頭之間的最大間距、最小間距,噴頭距端墻的最大距離、最小距離都有要求如表1 所示,施工要求又要求噴頭與邊墻的距離和噴頭之間的距離為模數(shù)。在滿足這些要求的同時,從經(jīng)濟方面要求布置的噴頭數(shù)最少。
實現(xiàn)噴頭的布置的算法如圖3 所示。其中一個方向上噴頭個數(shù)最少取為布置區(qū)域在該方向邊長L除以D3 向上取整。驗證過程如下:
噴頭個數(shù):N=L/D3(N 向上取整);
噴頭之間間距:L1=L/N(L1 向上取整并取50的倍數(shù));
噴頭據(jù)端墻的距離:L2=[L -L1* (N -1)]/2(L2 向上取整并取50 的倍數(shù));
易知L1≤D3,L2 ≤D1(滿足了小于最大值要求);
另,當L1≤D2 時,取L1=D2;當L2 <D0 時,該房間無法滿足規(guī)范要求,暫時不布置。至此,滿足了規(guī)范、施工、經(jīng)濟所有要求。
表1 規(guī)范中對噴頭間距的要求
圖6 布置平面圖
為實現(xiàn)批量布置消防噴頭的功能,運用Revit2014 二次開發(fā)的幫助文檔RevitAPI.chm 中的函數(shù)和類,編寫了實現(xiàn)一定功能的函數(shù),程序主要用到的函數(shù)如表2 所示。
表2 程序中主要運用的函數(shù)
利用本軟件在某項目中布置噴頭,布置的平面如圖6 所示。
布置該示例區(qū)域的消防噴頭的過程如下:
(1)房間布置
用戶設置好安全等級和噴頭類型后,選擇程序中【房間布置】命令,框選所需布置的所有房間。布置完成后程序彈出界面顯示有兩個房間未布置,布置結(jié)果如圖7 所示。
(2)區(qū)域布置
在房間布置完成后,有兩個房間未布置,可看出那兩個房間不是標準區(qū)域,程序自動過濾非標準區(qū)域。將未布置的兩個區(qū)域分別分解為2 個矩形區(qū)域,選擇程序中【區(qū)域布置】命令,按照提示點選各矩形區(qū)域的四個角點,布置。運行4 次【區(qū)域布置】命令,布置結(jié)果如圖8(a)所示。
圖7 房間布置
圖8 布置完成結(jié)果
如圖8 布置完成的結(jié)果所示,圖8(a)中圈出區(qū)域為房間布置和區(qū)域布置共同布置的結(jié)果,并由圖8(b)標注結(jié)果與表1 中要求對比可知,利用軟件布置的噴頭間距滿足規(guī)范和施工中的要求,并根據(jù)噴頭間的距離采用的是滿足所有要求的最大值,可以判斷布置結(jié)果是經(jīng)濟的。布置消防噴頭過程中,遇到管道等原因不能均勻布置時,可采用“房間布置+區(qū)域布置”的方法布置。
Revit 作為主要的BIM 軟件之一,目前和將來在建筑行業(yè)都有重要的應用前景。Revit 具有良好的二次開發(fā)接口,用戶可以很方便的利用API 編寫程序,實現(xiàn)自己需要的功能。隨著Revit 二次開發(fā)技術(shù)的不斷發(fā)展,在Revit 中工作將會更加的方便,Revit 這款軟件將在BIM 中發(fā)揮越來越大的作用。
[1]何關(guān)培.BIM 和BIM 相關(guān)軟件[J].土木建筑工程信息技術(shù),2010,2(4):110-117.
[2]徐迪.基于Revit 的建筑結(jié)構(gòu)輔助建模系統(tǒng)開發(fā)[J].土木建筑工程信息技術(shù),2012,4(3):70-77.
[3]李雄華.BIM 技術(shù)在給水排水工程設計中的應用研究[D].廣州:華南理工大學,2009.
[4]徐劍.Revit 系統(tǒng)軟件二次開發(fā)研究[J].鐵路技術(shù)創(chuàng)新,2014(5):39-41.
[5]中華人民共和國標準.自動噴水滅火系統(tǒng)設計規(guī)范(GB50084 — 2001)[S].北京:中國建筑工業(yè)出版社,2010.