錢 海 馬小軍 來(lái) 侃
(南京工業(yè)大學(xué) 電氣工程與控制科學(xué)學(xué)院,南京 210000)
BIM 技術(shù)在建筑設(shè)計(jì)、結(jié)構(gòu)計(jì)算、建筑能耗分析、設(shè)備管理、虛擬施工等專業(yè)已取得一定的研究成果[1],然而目前針對(duì)BIM 技術(shù)中電氣設(shè)計(jì)的應(yīng)用研究相對(duì)較少。在BIM 應(yīng)用過(guò)程中,所產(chǎn)生的BIM模型有很多類型。目前針對(duì)特定的BIM 軟件平臺(tái)已經(jīng)出現(xiàn)了一些第三方BIM 模型構(gòu)件庫(kù)管理軟件工具[2],但是①Revit 中只有少量電氣設(shè)備族,難以滿足電氣工程設(shè)計(jì)的需求;②電氣設(shè)計(jì)人員在建模時(shí),需要從本地族庫(kù)載入想要的電氣設(shè)備族,工作效率低下;③Revit 明細(xì)表功能能實(shí)現(xiàn)具體實(shí)例及其屬性的統(tǒng)計(jì),但需要花費(fèi)不少時(shí)間來(lái)設(shè)置參數(shù)。
本文基于開(kāi)放IFC 標(biāo)準(zhǔn),結(jié)合BIM 協(xié)同設(shè)計(jì)過(guò)程參考模型,首先基于Revit 平臺(tái)研究電氣設(shè)備參數(shù)化模型,分析不同電氣設(shè)備族的共性與特性,并研究了BIM 電氣設(shè)備族的創(chuàng)建方法與使用現(xiàn)狀。接著分析Revit API 兩種外部功能擴(kuò)展方式,研究了Revit 對(duì)象的訪問(wèn)、過(guò)濾、編輯與創(chuàng)建等方法。然后研究Family API 關(guān)于族類型獲取、族創(chuàng)建和族編輯的方法。最后構(gòu)建基于Revit 二次開(kāi)發(fā)的電氣設(shè)備族平臺(tái),實(shí)現(xiàn)①項(xiàng)目已加載及本地電氣設(shè)備族的快速統(tǒng)計(jì)查詢,且電氣設(shè)備族可直接拖動(dòng)到項(xiàng)目中使用,大大提高建模效率;②對(duì)于協(xié)同設(shè)計(jì)平臺(tái)下存儲(chǔ)在云端的項(xiàng)目模型,通過(guò)本文開(kāi)發(fā)的族屬性導(dǎo)入模塊可將所有實(shí)例及其屬性導(dǎo)入到本地SQL Sever數(shù)據(jù)庫(kù),并統(tǒng)計(jì)出系統(tǒng)族實(shí)例和構(gòu)件族實(shí)例的個(gè)數(shù)。本文研究?jī)?nèi)容的技術(shù)路線圖如圖1 所示。
圖1 技術(shù)路線圖
建立BIM 電氣設(shè)備族庫(kù),需要對(duì)項(xiàng)目全生命周期電氣設(shè)計(jì)信息進(jìn)行整理,按照主要參數(shù)、關(guān)鍵屬性,結(jié)合實(shí)際電氣業(yè)務(wù)需要對(duì)電氣設(shè)備BIM 模型的資源進(jìn)行分類,完成對(duì)BIM 模型資源的通用化、系列化、模塊化整合,保證在BIM 模型族庫(kù)中存儲(chǔ)的模型及構(gòu)件在實(shí)際設(shè)計(jì)過(guò)程中具有良好的通用性[3],同時(shí)具備良好的可維護(hù)和可擴(kuò)展性,適應(yīng)建筑電氣設(shè)計(jì)領(lǐng)域不斷發(fā)展的需要。
電氣設(shè)備參數(shù)化設(shè)計(jì)模型構(gòu)件整理的內(nèi)容主要有兩方面,一是電氣設(shè)備族的系列化整理;二是電氣設(shè)備族的模塊化整理。
(1)電氣設(shè)備族的系列化整理
系列化整理,通過(guò)對(duì)同一類電氣設(shè)備族規(guī)律性的分析研究,進(jìn)行合理的基礎(chǔ)建模,可根據(jù)模型主要參數(shù)的驅(qū)動(dòng),自動(dòng)生成該類構(gòu)件各類型尺寸的模型,并將其類型名稱、編碼、主要尺寸參數(shù)、關(guān)鍵屬性等從模型中剝離形成系列化構(gòu)件模型。
電氣設(shè)備族的基本參數(shù)是其基本性能或基本技術(shù)特性的標(biāo)志,是選擇或確定族功能范圍、規(guī)格、尺寸的基本依據(jù)[4]。電氣設(shè)備族基本參數(shù)系列化是系列化的首要環(huán)節(jié),是進(jìn)行系列化設(shè)計(jì)的基礎(chǔ)。對(duì)于一類電氣設(shè)備族,選擇一個(gè)或幾個(gè)基本參數(shù),并確定其上下限。
建立電氣設(shè)備族的參數(shù)系列表。先基于模型構(gòu)件的基本參數(shù),形成該類構(gòu)件的參數(shù)系列,之后增加其他所需的屬性(如類型名稱、編碼、關(guān)鍵屬性等)。
完成電氣設(shè)備族的參數(shù)化建模過(guò)程,基于基本參數(shù),并充分考慮到尺寸系列變化可能對(duì)模型產(chǎn)生的影響,通過(guò)公式的方式描述其他幾何參數(shù),逐步完成模型構(gòu)件的建模[5]。之后對(duì)參數(shù)系列表中的各項(xiàng)逐一生成模型,檢查模型造型是否正確。
系列化整理流程如圖1 所示。
圖2 電氣設(shè)備模型構(gòu)件的系列化整理
(2)電氣設(shè)備族的模塊化整理
模塊化整理,按照標(biāo)準(zhǔn)化原則,基于實(shí)際電氣業(yè)務(wù)需要,對(duì)已有的電氣設(shè)備模型進(jìn)行拆分、整理,將電氣設(shè)備模型的部分構(gòu)件組合在一起,最終形成一系列通用性較強(qiáng)的電氣設(shè)備模型單元。
以格柵吊燈為例,在Revit 基礎(chǔ)上說(shuō)明照明設(shè)備族的創(chuàng)建思路、其他參數(shù)設(shè)置及創(chuàng)建過(guò)程。格柵吊燈族為嵌套族。
(1)創(chuàng)建幾何形體:用公制照明設(shè)備族樣板創(chuàng)建燈罩(含吊桿、吊桿法蘭),并作為主體族。用公制常規(guī)模型族樣板創(chuàng)建內(nèi)置格柵,并作為嵌套族裝在燈罩中,并且運(yùn)用“陣列”功能,將內(nèi)置格柵沿長(zhǎng)度方向陣列,同時(shí)將吊燈“長(zhǎng)度”和“格柵片數(shù)”兩個(gè)參數(shù)值通過(guò)公式相關(guān)聯(lián)。
(2)吊燈類型設(shè)置:根據(jù)要求,創(chuàng)建三種不同的吊燈透光類型:上部透光、下部透光和上下部均透光。根據(jù)遮罩的不同材質(zhì)進(jìn)行設(shè)置。
(3)添加照明設(shè)備參數(shù):照明設(shè)備參數(shù)的設(shè)置用來(lái)滿足設(shè)備工程師對(duì)燈具參數(shù)的要求,重點(diǎn)配置電氣連接件和選擇相對(duì)應(yīng)的光域網(wǎng)文件[6]。
Revit 中格柵吊燈族創(chuàng)建過(guò)程主要有:第1 步,創(chuàng)建格柵嵌套族;第2 步,創(chuàng)建格柵吊燈族;第3 步,添加照明設(shè)備參數(shù);第4 步,保存并應(yīng)用于項(xiàng)目文件。具體創(chuàng)建過(guò)程如圖2 所示。
圖3 格柵吊燈創(chuàng)建過(guò)程
初步整理出電氣設(shè)計(jì)中基本需要的族有:消防端子箱-明裝;配電箱-暗裝;三管格柵熒光燈;疏散指示燈;三聯(lián)開(kāi)關(guān);二三孔插座;感煙探測(cè)器;感溫探測(cè)器;火警電話插孔;消防廣播;消防報(bào)警電話;消防啟泵按鈕;半球形攝像機(jī);電視插孔;電話和網(wǎng)絡(luò)插孔等[4]。
Revit API 通過(guò)兩種方式擴(kuò)展Revit 功能,External Command 和External Application。External Command 實(shí)現(xiàn)外部命令的功能,使用外部工具加載,External Application 實(shí)現(xiàn)外部應(yīng)用的功能,都需要引用Revit API.dll 和RevitAPIUI.dll 文件。Revit API.dll包含了在數(shù)據(jù)庫(kù)層控制Revit 的應(yīng)用、文檔、對(duì)象和參數(shù)的方法,而Revit APIUI.dll 包含了在操作和Revit 用戶界面層的所有自定義API 接口。
External Command 和External Application 的實(shí)現(xiàn)方法是不同的。External Command 通過(guò)重載Execute()方法實(shí)現(xiàn),而External Application 是通過(guò)On-Startup()和OnShutdown()方法的配合使用,才能實(shí)現(xiàn)功能擴(kuò)展[7]。
本文使用IExternal Application 完成電氣設(shè)備族統(tǒng)計(jì)人機(jī)界面面板的功能。族屬性導(dǎo)入模塊不添加面板,直接用外部工具加載實(shí)現(xiàn)。使用IExternal Command 完成電氣設(shè)備族統(tǒng)計(jì)及族屬性導(dǎo)入的功能。
使用External Command 和External Application兩種方式進(jìn)行編譯與測(cè)試時(shí),Revit.exe 啟動(dòng)后,.addin 文件中的命令會(huì)被加載。本文構(gòu)建的電氣設(shè)備族平臺(tái)的.addin 文件如下:
Revit API 中有兩種方式根據(jù)標(biāo)識(shí)來(lái)識(shí)別區(qū)分和訪問(wèn)不同對(duì)象。第一種方式,只使用類名來(lái)判斷,能容納其它對(duì)象或特定用途的類,如:Wall、Floor、Cont.Footing、Ceiling 等系統(tǒng)族的實(shí)例。第二種方式,如果通過(guò)類名無(wú)法分別出來(lái),需聯(lián)合對(duì)象的類別(Category)來(lái)判斷。但是,門、窗、柱等對(duì)象沒(méi)有專用的類來(lái)表示,都是FamilyInstance 的實(shí)例。
本文采用Category 來(lái)判斷其類別,用枚舉型的BuiltInCategory 來(lái)創(chuàng)建ElementCategoryFilter 對(duì)象。
Revit 平臺(tái)中所有的對(duì)象遍歷都必須要使用FilteredElementCollector 類,它提供了對(duì)文檔中的對(duì)象過(guò)濾的所有功能,在過(guò)濾操作時(shí)至少需要添加一個(gè)過(guò)濾條件,也可被賦予多個(gè)過(guò)濾條件。添加過(guò)濾條件后,滿足條件的對(duì)象集合立即就可以從這個(gè)類訪問(wèn)。Revit 可以通過(guò)三種用法實(shí)現(xiàn)FilteredElementCollector 過(guò)濾,過(guò)濾的方法、條件、范圍、特點(diǎn)及實(shí)例如表1 所示。
表1 FilteredElementCollector 的三種方法
LoadFamily()加載整個(gè)族和族所有的類型或者標(biāo)簽到項(xiàng)目中。文檔類別提供類似的方法LoadFamilySymbol(),加載特定的族標(biāo)簽。LoadFamilySymbol()只從族文件中加載特定的族標(biāo)簽到項(xiàng)目中。
Revit API 中Family Creation 函數(shù)可以創(chuàng)建和編輯族和族類型,但是Revit API 不能編輯系統(tǒng)族。如果外部系統(tǒng)有已存可用的數(shù)據(jù)要傳入到Revit 族庫(kù)中,可以使用此函數(shù)有效地實(shí)現(xiàn)。
(1)獲取族類別
FamilyBase.FamilyCategory 屬性表示族的類別,如Columns、Furniture、Structural Framing、Windows。通過(guò)如下代碼確定一個(gè)開(kāi)放的Revit 族文件的族類別:
string categoryName=familyDoc.OwnerFamily.FamilyCategory.Name;
(2)獲取族參數(shù)
可以通過(guò)族文檔的OwnerFamily 屬性得到族參數(shù),代碼如下:
(3)創(chuàng)建族文檔
由IsFamilyDocument()屬性確定文檔是否是族文檔。如果文檔是族文檔,修改Revit 族文檔、獲取族類型和參數(shù)可通過(guò)族文檔類別獲取。在一個(gè)項(xiàng)目文檔中編輯一個(gè)已有族,可以使用文檔類別的EditFamily()函數(shù),編輯完成之后,使用LoadFamily()重新加載族到所有者文檔。本文使用Application.NewFamilyDocument()創(chuàng)建一個(gè)新族文檔,代碼如下:
(4)嵌套族標(biāo)簽
使用Family Symbol 從族文檔中過(guò)濾族標(biāo)簽,獲取加載到族中的所有族標(biāo)簽。
使用IExternal Application 完成添加電氣項(xiàng)目視圖、電氣設(shè)備族統(tǒng)計(jì)兩個(gè)模塊人機(jī)界面面板的功能。族屬性導(dǎo)入模塊不添加面板,直接用外部工具加載實(shí)現(xiàn)。
本模塊使用IExternal Command 的繼承類DragAndDropCommand 實(shí)現(xiàn),使用Revit API 過(guò)濾器獲取項(xiàng)目已加載的電氣設(shè)備族和本地族庫(kù)中電氣設(shè)備族的類別,并做相關(guān)顯示處理。筆者選用電氣項(xiàng)目文件“某建筑地下二層變電室.rvt”作為案例,對(duì)平臺(tái)的可行性和可靠性進(jìn)行驗(yàn)證。
項(xiàng)目已加載的電氣設(shè)備族統(tǒng)計(jì)模塊顯示項(xiàng)目中所有用到的電氣設(shè)備族,如圖4 左邊部分。本地電氣設(shè)備族統(tǒng)計(jì)模塊顯示本地族庫(kù)中所有的電氣設(shè)備族,如圖4 右邊部分。
圖4 電氣設(shè)備族統(tǒng)計(jì)
項(xiàng)目已加載的電氣設(shè)備族拖動(dòng)模塊可以從已統(tǒng)計(jì)出的項(xiàng)目電氣設(shè)備族列表視圖中,拖動(dòng)相關(guān)族直接放置于當(dāng)前項(xiàng)目中,方便電氣設(shè)計(jì)中設(shè)備族的加載與使用,提高工作效率。
本模塊用外部命令方式實(shí)現(xiàn)。將.addin 文件放置于C:ProgramDataAutodeskRevitAddins2014。
首先,歸納Revit 2014 系統(tǒng)族有:門、窗、柱、屋頂、樓板、天花板、Cont.Footing、風(fēng)管、風(fēng)管附件、管件、管路附件。接著,過(guò)濾出族實(shí)例,提取屬性,插入數(shù)據(jù)表。然后,找出模型中的系統(tǒng)族和構(gòu)件族的實(shí)例,分別提取系統(tǒng)族實(shí)例的屬性和構(gòu)件族實(shí)例的屬性。最后,分別插入到系統(tǒng)族表和構(gòu)件族表。
打開(kāi)SQL Server 2008 數(shù)據(jù)庫(kù)鏈接,保證外部數(shù)據(jù)可以插入到數(shù)據(jù)庫(kù)中已建立的表SystemFamily 和ComponentFamily[8]。執(zhí)行外部命令“FamilyProperties”,族屬性導(dǎo)入入口位置如圖5(a)所示。
插件完成當(dāng)前項(xiàng)目的族屬性數(shù)據(jù)插入后,自動(dòng)統(tǒng)計(jì)出已插入到數(shù)據(jù)庫(kù)中的系統(tǒng)族實(shí)例個(gè)數(shù)為141,構(gòu)件族實(shí)例的個(gè)數(shù)為813,如圖5(b)所示。
圖5 族屬性導(dǎo)入入口與結(jié)果
查詢數(shù)據(jù)庫(kù)系統(tǒng)族表和構(gòu)件族表。分別對(duì)表SystemFamily 和表Component-Family 進(jìn)行查詢。使用查詢語(yǔ)句如下:
圖6 構(gòu)件族表查詢結(jié)果
(1)select instanceName,categoryName,categoryName from SystemFamily;
(2)select instanceName,categoryName,categoryName from ComponentFamily。
查詢結(jié)果如圖6 所示,表SystemFamily 中有141行屬性數(shù)據(jù),表ComponentFamily 中有813 行屬性數(shù)據(jù)。通過(guò)對(duì)比之前的族實(shí)例插入個(gè)數(shù)統(tǒng)計(jì)結(jié)果可知,族屬性導(dǎo)入模塊在對(duì)當(dāng)前項(xiàng)目的族屬性數(shù)據(jù)進(jìn)行導(dǎo)入是可靠的。
實(shí)驗(yàn)結(jié)果表明,基于IFC 標(biāo)準(zhǔn)的電氣設(shè)備族平臺(tái)進(jìn)行項(xiàng)目相關(guān)項(xiàng)統(tǒng)計(jì)、電氣設(shè)備族的統(tǒng)計(jì)與拖動(dòng)是可行的,可以提高工作效率。經(jīng)過(guò)與SQL Sever數(shù)據(jù)庫(kù)查詢結(jié)果的對(duì)比,表明族屬性數(shù)據(jù)導(dǎo)入功能是可靠的。由于Revit API 數(shù)量和功能隨著版本的更新越來(lái)越豐富和完善,短時(shí)間內(nèi)無(wú)法將其功能充分發(fā)揮,因此可以進(jìn)一步加強(qiáng)Revit API 的應(yīng)用研究。
[1]李寧.基于BIM 與IFC 的混凝土壩施工仿真信息模型構(gòu)建方法研究[D].天津:天津大學(xué),2012.
[2]Tanyer Ali Murat,Aouad Ghassan.Moving Beyond the Fourth Dimension with an IFC-based Single Project Database[J].Automation in Construction,2005,14(1):15-32.
[3]朱立紅,楊鶴標(biāo).海量結(jié)構(gòu)化數(shù)據(jù)查詢系統(tǒng)的研究與實(shí)現(xiàn)[J].計(jì)算機(jī)應(yīng)用與軟件,2014,31(2):29-32.
[4]Lipman,Robert R.Details of the mapping between the CIS/2 and IFC product datamodels for structural steel[J].Electronic Journal of Information Technology in Construction.2009(14):1-13.
[5]滿慶鵬,孫成雙.基于IFC 標(biāo)準(zhǔn)的建筑施工信息模型[J].土木工程學(xué)報(bào),2011,44(S1):239-243.
[6]來(lái)侃,馬小軍,朱亮.電氣設(shè)備族在BIM 照明設(shè)計(jì)中的應(yīng)用[J].電氣應(yīng)用,2015,34(2):30-34.
[7]林良帆.BIM 數(shù)據(jù)存儲(chǔ)與集成管理研究[D].上海:上海交通大學(xué),2013.
[8]陸寧,馬智亮.利用面向?qū)ο髷?shù)據(jù)庫(kù)與關(guān)系數(shù)據(jù)庫(kù)管理IFC 數(shù)據(jù)的比較[J].清華大學(xué)學(xué)報(bào),2012,52(6):836-842.