丁軍晨,王曉東,彭禹立,張?chǎng)┝?,夏皓倫,馬靖東
(遼寧工程技術(shù)大學(xué)土木工程學(xué)院,遼寧阜新 123000)
Revit 是Autodesk 公司制作的一系列軟件,主要用于建筑信息建模,為設(shè)計(jì)師和工程師提供了一個(gè)設(shè)計(jì)和記錄建筑信息的平臺(tái),可以根據(jù)他們對(duì)有關(guān)項(xiàng)目的需求,更好的設(shè)計(jì)、建造和維護(hù)建筑。由于Revit 消除了建筑行業(yè)很多復(fù)雜的任務(wù),在國(guó)內(nèi)外的建筑行業(yè)中得到了廣泛的應(yīng)用。
Autodesk 公司在設(shè)計(jì)Revit 的同時(shí)也為Revit 提供了API 接口[1-2]。Revit API 是一個(gè)類庫(kù),只有在Revit 運(yùn)行時(shí)才能夠工作。通過(guò)強(qiáng)大的Revit API,用戶可以添加基于Revit API 開發(fā)的插件來(lái)擴(kuò)展和增強(qiáng)Revit 的功能和應(yīng)用。通過(guò)這些功能和應(yīng)用可以在短時(shí)間內(nèi)完成龐雜的工作,大幅度的節(jié)省了工程師的時(shí)間成本。運(yùn)用在工程中,可以加快項(xiàng)目的進(jìn)度。
二次開發(fā)技術(shù)可以實(shí)現(xiàn)以下的功能[3]:(1) 訪問(wèn)模型的參數(shù)數(shù)據(jù);(2) 訪問(wèn)模型的圖像數(shù)據(jù);(3) 創(chuàng)建插件完成一些重復(fù)龐雜的工作;(4) 通過(guò)創(chuàng)建插件來(lái)增強(qiáng)Revit 的UI;(5) 對(duì)BIM實(shí)現(xiàn)各種分析;(6) 自動(dòng)創(chuàng)建項(xiàng)目文檔;(7) 借助第三方應(yīng)用來(lái)完成如連接外部的數(shù)據(jù)庫(kù)。
編譯完成后, 需要使用Revit 附加模塊AddInManager 將程序運(yùn)行到Revit 2017 平臺(tái)上,附加模塊的運(yùn)行界面見圖1。
圖1 AddInManger2014 運(yùn)行界面
本文基于Revit 2017 以及Revit2017 SDK,由于Revit 二次開發(fā)的核心運(yùn)行環(huán)境為.NET4.7,因此可以選擇Visual Studio 2017 版本為程序編寫平臺(tái),通過(guò)NET4.7環(huán)境,使用C#編程語(yǔ)言完成編寫與編譯[4-5],主要工作包括參數(shù)信息收集與參數(shù)信息載入[6-8]。
在Revit API 與編程技術(shù)的支持下,可以選擇需要輸出的構(gòu)件參數(shù),以及輸出后不同參數(shù)所放置的位置。通過(guò)收集器與過(guò)濾器收集模型相關(guān)的參數(shù)信息,然后將收集到的相關(guān)信息寫入到Excel 表格中。
(1) 在Visual Studio 2020 中創(chuàng)建一個(gè)類庫(kù),在類庫(kù)中添加引用RevitAPI 與RevitAPIUI,并將“復(fù)制本地”勾選為false,通過(guò)加載外部命令I(lǐng)ExternalApplication 的方式,來(lái)實(shí)現(xiàn)Revit 軟件與外部應(yīng)用的同步性。以上操作完成后需要實(shí)現(xiàn)OnStartup 和OnshutDown 函數(shù)的內(nèi)容,將用戶所需要的操作放置其中,OnStartup 中的操作會(huì)在Revit 啟動(dòng)時(shí)調(diào)用并執(zhí)行,OnshutDown 中的操作會(huì)在Revit 關(guān)閉時(shí)調(diào)用并執(zhí)行。使用IExternalApplication 命令可制作Revit 插件的UI 時(shí)需要編寫如下代碼:
(2) 在上述類庫(kù)中新建一個(gè)類,并調(diào)用外部命令I(lǐng)ExternalCommand(IExternalCommand 是Revit API 通過(guò)外部命令來(lái)擴(kuò)展Revit 時(shí)必須在外部命令中實(shí)現(xiàn)的接口),調(diào)用此外部命令可以讓插件加載運(yùn)行。在此類中需要在抽象函數(shù)Execute 添加相關(guān)構(gòu)件的收集器,為了更好的收集到構(gòu)件的信息,需要再加入一個(gè)過(guò)濾器。遍歷過(guò)濾器把相關(guān)參數(shù)寫入DATATABLE 中。
最后將在IExternalCommand 中所編寫的命令添加到Revit 的UI 中,使之成為Revit 插件按鈕的命令。
利用API 為Revit 編寫插件的流程見圖2 所示。
圖2 插件開發(fā)流程圖
Revit 圖元是模型的基礎(chǔ),在Revit 的數(shù)據(jù)體系中,大部分的類是繼承于元素的。在Revit 中,圖元可大致分為模型圖元、基準(zhǔn)圖元、視圖專有圖元[2]。
模型圖元表示建筑業(yè)實(shí)際的三維幾何圖形,他們顯示再模型的相關(guān)視圖中。模型圖元有兩種類型包括主體圖元與模型構(gòu)件,主體圖元可以獨(dú)立存在與模型中,不受其他構(gòu)件存在與否的影響,其包括墻、樓板等,模型構(gòu)件必須依附于主體圖元存在,包括樓梯、門等,模型構(gòu)件又包括結(jié)構(gòu)圖元與MEP 圖元。
基準(zhǔn)圖元可以在空間和細(xì)節(jié)上表達(dá)項(xiàng)目場(chǎng)景中的模型,其包括軸網(wǎng)、標(biāo)高和參照平面。
視圖專有圖元有兩種類型,包括注釋圖元與詳圖,其中注釋圖元包括文字說(shuō)明、標(biāo)記等,詳圖包括詳圖線、填充區(qū)域等。他們都時(shí)模型表現(xiàn)的方法。
模型圖元是BIM信息繼承的載體,各種信息都動(dòng)態(tài)的集中在模型圖元中,而模型圖元又是以各類構(gòu)件的形式表現(xiàn)出來(lái)的。為滿足工程的需求,構(gòu)件中信息可分為基本信息和擴(kuò)展信息,其中基本信息是基礎(chǔ)新數(shù)據(jù),而擴(kuò)展信息是為了滿足工程需要加入的信息,需要通過(guò)對(duì)模型的信息進(jìn)行擴(kuò)展才能得到,見圖3。
圖3 Revit 圖元
對(duì)構(gòu)件信息提取需要使用Revit API 的項(xiàng)目參數(shù)BuiltlnParameter 或者共享參數(shù)SharedParameter,項(xiàng)目參數(shù)特定于單一項(xiàng)目中,不能與其他項(xiàng)目進(jìn)行共享,且不可用于多個(gè)項(xiàng)目之間的使用。共享參數(shù)則可以用于多個(gè)項(xiàng)目與族文件中,不僅可以在族文檔中定義與再定義參數(shù),還可以實(shí)現(xiàn)項(xiàng)目參數(shù)的功能。共享參數(shù)的設(shè)定具有更高的普適性。如果項(xiàng)目需要在文件中建立明細(xì)表,且需要推廣到所有的項(xiàng)目中,可以采用共享參數(shù)來(lái)提取構(gòu)件的參數(shù)化屬性信息。
由于Revit 數(shù)據(jù)結(jié)構(gòu)相對(duì)復(fù)雜,并不支持將模型構(gòu)件信息導(dǎo)出Excel,需要通過(guò)二次開發(fā)將信息輸出到Excel 中。常用的輸出方法有三種,分別為NPOI 庫(kù);Epplus 庫(kù);COM組件。COM組件需要設(shè)備安裝Excel 軟件,在導(dǎo)出模型構(gòu)件信息時(shí)需要考慮Excel 版本的問(wèn)題。NPOI 與Epplus 都是開源的C#讀寫Excel 文檔的項(xiàng)目,它們都可以在沒有安裝Office 情況下對(duì)Excel 文檔進(jìn)行讀寫的操作,NPOI 庫(kù)使用較少,因?yàn)橄嗤瑪?shù)據(jù)結(jié)構(gòu)的數(shù)據(jù),Epplus 的導(dǎo)出能力遠(yuǎn)比NPOI 強(qiáng),除此之外,NPOI 庫(kù)支持Excel 的版本有限。如果需要大量屬性信息的輸出,可以采用Epplus 庫(kù)作為Revit 信息的輸出方法。
用于實(shí)例驗(yàn)證的插件使用了項(xiàng)目參數(shù)BuiltlnParameter 提取信息,使用COM組件將信息輸出到Excel 中。其核心代碼如下所示。
此插件可以從模型中提取構(gòu)件的族類型,位置信息與幾何信息,將提的取構(gòu)件參數(shù)化屬性信息導(dǎo)入Excel表格。插件面板見圖4 所示。
圖4 插件示意圖
為了驗(yàn)證插件的功能與上文提出理論,以Revit2017 建筑樣例項(xiàng)目(圖5)為例,在這個(gè)模型中含有建筑中常用的構(gòu)件,包括墻、門、窗等構(gòu)件。
圖5 Revit 2017 建筑樣例項(xiàng)目模型展示圖
從Revit 2017 建筑樣例項(xiàng)目中提取墻的信息,得到墻的族類型、標(biāo)高、寬度與高度,見表1。
表1 樣例項(xiàng)目模型中提出墻的部分?jǐn)?shù)據(jù)
Revit 的二次開發(fā)功能為設(shè)計(jì)師創(chuàng)造了諸多便利,本文通過(guò)Revit 二次開發(fā)的功能,結(jié)合本文對(duì)模型構(gòu)件信息分析與提出的模型構(gòu)件信息提取與輸出的方法,設(shè)計(jì)出了一款模型構(gòu)件信息提取插件,并且通過(guò)實(shí)例驗(yàn)證了插件的可行性與本文提出方法的可靠性。通過(guò)這款插件可以導(dǎo)出工程所需構(gòu)件的信息,滿足了一些工程對(duì)于模型構(gòu)件信息進(jìn)行大批量提取的需求。