趙強(qiáng),李玉成,蘇紅超,張鵬
(安徽建筑大學(xué) 環(huán)境與能源工程學(xué)院,安徽 合肥 230601)
Autodesk公司的Revit軟件因其強(qiáng)大的建模能力,而被廣泛地應(yīng)用于BIM建模等協(xié)同工作中。由于Revit軟件是國外引進(jìn)軟件,隨著工程項(xiàng)目愈發(fā)復(fù)雜,其本身的應(yīng)用功能并不能滿足所有設(shè)計(jì)人員的工作需求。為此,Revit軟件為設(shè)計(jì)人員提供了軟件的二次開發(fā)接口,以便設(shè)計(jì)人員根據(jù)實(shí)際工作需求進(jìn)行功能插件開發(fā)。
給排水工程是建筑工程項(xiàng)目中的重要部分,運(yùn)用Revit軟件可以實(shí)現(xiàn)給排水工程三維可視化、施工模擬、材料設(shè)備統(tǒng)計(jì)等功能。李正農(nóng)等人開發(fā)出了能夠在Revit平臺中智能創(chuàng)建滿足實(shí)際工程需求的腳手架模型插件,張慎等人基于Revit平臺開發(fā)出了能夠批量布置滿足規(guī)范要求的消防噴頭插件;李桐開發(fā)出基于Revit軟件的管道自動(dòng)標(biāo)注插件。
Revit軟件在建筑給排水中比較重要的應(yīng)用是碰撞檢測,施工前就發(fā)現(xiàn)管線碰撞問題并及時(shí)作出設(shè)計(jì)調(diào)整,提高了設(shè)計(jì)單位和施工單位的工作效率。然而面對碰撞檢測后大量的管線優(yōu)化調(diào)整工作,純靠人工手動(dòng)操作,工作量巨大,不利于設(shè)計(jì)人員的工作效率。為此市面上出現(xiàn)了橄欖山、管綜易、AGI模盒等能夠?qū)崿F(xiàn)管道優(yōu)化自動(dòng)避讓的商業(yè)插件,這極大地減輕了設(shè)計(jì)人員的工作量。然而管綜易等插件的管線避讓條件方式還比較簡單,多需要輔以人工逐個(gè)避讓,對于同管徑不同管道系統(tǒng)類型之間的管線避讓,由于不同單位的設(shè)計(jì)標(biāo)準(zhǔn)不同,系統(tǒng)類型命名方式不盡相同,所以商業(yè)插件不能實(shí)現(xiàn)管線的精確避讓。
為此,本文對Revit二次開發(fā)技術(shù)進(jìn)行深入研究,結(jié)合管線碰撞優(yōu)化的基本原則,設(shè)置精確的管線優(yōu)化的過濾條件,以及自動(dòng)避讓的方法,開發(fā)出能夠?qū)崿F(xiàn)批量管線自動(dòng)避讓的Revit插件。管道自動(dòng)優(yōu)化插件極大地提高了設(shè)計(jì)人員的工作效率,同時(shí)也補(bǔ)充了一些商業(yè)插件管線優(yōu)化的原則,豐富了管線自動(dòng)優(yōu)化的方法,為Revit二次開發(fā)技術(shù)在給排水工程中的應(yīng)用提供了參考。并且插件可以自由修改相關(guān)程序參數(shù),使得插件能夠更加適應(yīng)實(shí)際工程項(xiàng)目的需求。
Revit API是一種已經(jīng)編輯好的、能夠直接聯(lián)系外部程序的類庫。一方面Revit API實(shí)現(xiàn)了Revit軟件對已有功能的覆蓋,進(jìn)行建筑信息模型的創(chuàng)建,并更深入多層次地對整個(gè)模型進(jìn)行設(shè)計(jì)分析和優(yōu)化調(diào)整;另一方面,它也給設(shè)計(jì)人員提供了一個(gè)插件開發(fā)平臺,設(shè)計(jì)人員可以根據(jù)實(shí)際工程項(xiàng)目需求來對Revit創(chuàng)建新的功能模塊,使之能夠滿足用戶更多功能上的需求,大大拓展了Revit功能,設(shè)計(jì)人員能夠?qū)ㄖ畔⒛P偷囊曈X效果、建筑工程模型的屬性信息數(shù)據(jù)、構(gòu)件相關(guān)的信息參數(shù)進(jìn)行更為有效地利用,以及對建筑信息模型構(gòu)件進(jìn)行創(chuàng)建、修改、刪除等應(yīng)用操作;結(jié)合外部數(shù)據(jù)庫、數(shù)據(jù)格式轉(zhuǎn)換等第三方外部應(yīng)用平臺進(jìn)行工程項(xiàng)目的分析應(yīng)用。
管道自動(dòng)避讓Revit二次開發(fā)插件,基于功能強(qiáng)大的Revit軟件,參考RevitAPI使用C#語言進(jìn)行軟件的二次開發(fā),實(shí)現(xiàn)交互操作和插件程序控制的有機(jī)結(jié)合。充分利用Revit API,參考Revit SDK文檔,以編程的方式完成一些工作量較大、規(guī)律性較強(qiáng)的工作,比如管道自動(dòng)避讓工作。通過程序算法,能夠大大簡化這些重復(fù)性建模操作,快速、高效地實(shí)現(xiàn)設(shè)計(jì)功能需求,進(jìn)而顯著提升建模效率。
管道自動(dòng)避讓的功能插件首先添加了RevitAPI和RevitAPIUI兩個(gè)程序集引用,然后通過外部應(yīng)用程序繼承接口外部命令(IExternal Command),并再次加載其中的程序運(yùn)行主函數(shù)Execute(),最后進(jìn)行編譯程序代碼來實(shí)現(xiàn)插件的開發(fā)。通過外部命令方式開發(fā)的過程流程,如圖1所示。
圖1 外部命令方式開發(fā)流程圖
基于Microsoft Visual Studio 2015、Microsoft.NET Framework4.5、Autodesk Revit 2016以及Revit SDK 2016的開發(fā)環(huán)境,使用C#語言進(jìn)行插件程序的開發(fā)研究。
管線避讓插件程序的主要流程,如圖2所示。首先對所有模型元素運(yùn)用Filtered Element Collector函數(shù)進(jìn)行過濾,獲得所需要的管道或風(fēng)管或電纜橋架。然后進(jìn)行碰撞檢測,通過使用Element Intersects Element Filter(硬碰撞)函數(shù)或者Element Intersects Solid Filter(軟碰撞,需要設(shè)置范圍參數(shù))函數(shù)能夠判斷構(gòu)件是否發(fā)生空間上的構(gòu)件沖突碰撞,本插件采用函數(shù)Element Intersects Element Filter進(jìn)行碰撞檢測。緊接著程序獲取碰撞構(gòu)件的類別、系統(tǒng)類型和管徑等參數(shù),結(jié)合交互界面輸入的系統(tǒng)類型參數(shù)定義系統(tǒng)類型常量,進(jìn)行各種條件的判斷過濾獲得需要避讓的管道。最后結(jié)合管道避讓的方法,生成立管,避讓橫管和彎頭連接件,從而完成管道的自動(dòng)避讓。對所有碰撞點(diǎn)進(jìn)行遍歷循環(huán),從而實(shí)現(xiàn)碰撞管線一鍵批量自動(dòng)避讓。
圖2 碰撞管道自動(dòng)避讓程序流程圖
自動(dòng)避讓插件的關(guān)鍵代碼如下所示:
Transform transform=Transform.CreateTranslation(dir);
double length=Math.Tan(angle)*heigth;
XYZ res= transform.OfPoint(point);
XYZ result=new XYZ(res.X,res.Y,res.Z+heigth);
return result;
依據(jù)《建筑給排水設(shè)計(jì)標(biāo)準(zhǔn)》(GB 50015-2019)和工程實(shí)例的研究得出管線碰撞避讓的基本原則如下:從操作性考慮,管徑小的避讓管徑大的,支線管道避讓主線管道,金屬材質(zhì)管避讓非金屬材質(zhì)管,低壓讓高壓,附件少的讓附件多的,在空間上電最上風(fēng)居中水最下;有壓流讓無壓流管,因?yàn)闊o壓流管是重力流管需要一定的坡度才能排水順暢,一旦翻彎避讓則水流難以順利排出,所以本文插件需要規(guī)定翻彎避讓管線都是有壓流系統(tǒng)管道,且同系統(tǒng)管道不發(fā)生碰撞。從工藝和造價(jià)上考慮得出:能夠彎曲管避讓不能彎曲管,消防水避讓冷凍水,給水管讓熱水管,熱水管讓冷凍水管,技術(shù)要求低的管道讓技術(shù)要求高的管道,優(yōu)先滿足規(guī)范要求及檢修空間,凈空最大化,美觀次之。
由于各設(shè)計(jì)單位的設(shè)計(jì)標(biāo)準(zhǔn)不盡相同,所以每個(gè)設(shè)計(jì)師對系統(tǒng)名稱的命名不一定完全相同,為了適應(yīng)系統(tǒng)類型名稱的變化,管道自動(dòng)避讓插件提供交互界面以便設(shè)計(jì)人員按項(xiàng)目情況修改系統(tǒng)名稱。由于無壓流系統(tǒng)的管道不能進(jìn)行管道翻彎避讓,如果程序判斷出發(fā)生碰撞的兩個(gè)管道的系統(tǒng)類型有一個(gè)不屬于有壓流系統(tǒng),則另一個(gè)管道自動(dòng)作為避讓管道,所以本插件主要是對有壓流系統(tǒng)進(jìn)行判斷。根據(jù)對《建筑給排水設(shè)計(jì)標(biāo)準(zhǔn)》(GB 50015-2019)的研究發(fā)現(xiàn)有壓流系統(tǒng)有:冷凍水系統(tǒng)、消火栓系統(tǒng)、生活熱水系統(tǒng)、自動(dòng)噴水滅火系統(tǒng)以及生活給水系統(tǒng);無壓流系統(tǒng)是:污水系統(tǒng)、廢水系統(tǒng)、通氣系統(tǒng)、雨水系統(tǒng)。
所以本插件規(guī)定各系統(tǒng)優(yōu)先級別從高到低分別是:風(fēng)電構(gòu)件、無壓流系統(tǒng)、冷凍水系統(tǒng)、生活熱水系統(tǒng)、自動(dòng)噴水滅火系統(tǒng)、消火栓系統(tǒng)、生活給水系統(tǒng)。管道自動(dòng)避讓插件工作界面,如圖3所示??紤]到實(shí)際廠家生產(chǎn)管件的能力,本插件交互界面僅定義了4種類型的角度選擇,因?yàn)槌R姷膹濐^類型為30度彎、45度彎、60度彎以及90度彎。
圖3 管線自動(dòng)避讓插件工作界面圖
通常,Revit開發(fā)平臺通過Filtered Element Collector類的使用來過濾元素,它具備對文檔中的對象進(jìn)行過濾的全部功能,而在實(shí)際的過濾操作過程中時(shí)還需要添加一個(gè)或多個(gè)判斷過濾條件以過濾得到需要操作的構(gòu)件,并且為了實(shí)現(xiàn)插件功能往往需要對構(gòu)建的參數(shù)類別進(jìn)行條件判斷過濾,所以要在Revit中開發(fā)管道自動(dòng)避讓插件應(yīng)根據(jù)管線避讓優(yōu)化原則設(shè)置條件過濾得到需要進(jìn)行避讓的管道[14]。
如圖4所示,獲取到需要進(jìn)行避讓的管道的過濾條件如下:首先獲取到碰撞兩個(gè)構(gòu)件的類別、管徑、系統(tǒng)類型等參數(shù)信息,判斷構(gòu)件的類別(Category)是否均為管道(OST_PipeCurves),如果是則進(jìn)行下一步的條件判斷,如若不是則將類別為管道的構(gòu)件進(jìn)行向下避讓操作;構(gòu)件均為管道時(shí)判斷管道的管徑參數(shù)(Parameter type)是否相同,不同管徑時(shí)遵循小管讓大管的原則,小管應(yīng)進(jìn)行避讓;當(dāng)管徑相同時(shí),進(jìn)一步判斷碰撞管道的系統(tǒng)類型參數(shù)(PipingSystemType),判斷名稱(name)是否為有壓流管道系統(tǒng),若不是,則直接選擇不做判斷的管道作為避讓管道;若是有壓流系統(tǒng)則判斷是否是冷凍水管系統(tǒng),若存在冷凍水管系統(tǒng)則跳出后續(xù)判斷循環(huán),返回系統(tǒng)為非冷凍水管系統(tǒng)的管道,進(jìn)行后續(xù)翻彎避讓操作;若不存在冷凍水管,則判斷是否是熱水管系統(tǒng),若為熱水管,則跳出后續(xù)判斷返回另一非熱水管系統(tǒng)進(jìn)行避讓操作;若不存在熱水管,則判斷管道系統(tǒng)是否是生活給水管系統(tǒng),因?yàn)橄李惞艿乐匾员容^高,應(yīng)優(yōu)先考慮,所以選擇生活給水管系統(tǒng)進(jìn)行避讓;由于消火栓系統(tǒng)附件比自動(dòng)噴水滅火系統(tǒng)附件多,所以應(yīng)選擇消火栓系統(tǒng)進(jìn)行自動(dòng)避讓。經(jīng)過上述多重條件判斷返回元素,即可得到需要進(jìn)行避讓的管道。
圖4 元素過濾流程
為了分析管道自動(dòng)避讓原理,對管道避讓后管道各點(diǎn)位置標(biāo)記,如圖5所示。圖中Height表示交互界面的輸入的避讓高度,角度α表示交互界面輸入的避讓角度,A`點(diǎn)和B`點(diǎn)為兩個(gè)碰撞點(diǎn)偏移一定距離后的位置,A點(diǎn)和B點(diǎn)表示應(yīng)當(dāng)避讓立管(以下避讓管道簡稱L1,發(fā)生碰撞的另一構(gòu)件簡稱L2)的起點(diǎn),E點(diǎn)、F點(diǎn)表示L1的起始點(diǎn),直線CD表示提升起來的避讓橫管(以下簡稱L3)。
圖5 避讓管道各點(diǎn)實(shí)況圖
通過在Revit軟件中手動(dòng)進(jìn)行管道優(yōu)化實(shí)驗(yàn)發(fā)現(xiàn):如圖6(a)所示,當(dāng)CD等于2倍L1直徑時(shí),發(fā)生了線太短的錯(cuò)誤,即L3太短無法連接彎頭。如圖6(b)所示,當(dāng)CD等于3倍L1直徑時(shí),能夠?qū)崿F(xiàn)正常的管道連接。這是因?yàn)閷?shí)際操作中彎頭直徑與管道直徑相同,避讓橫管上連接有兩個(gè)彎頭,則其長度必須大于其2倍的管徑才能安裝,所以從實(shí)際安裝可操作性考慮,本插件將避讓橫管長度設(shè)置為3倍以上L1的直徑。
圖6 L3為不同長度時(shí)的管道避讓比較
如圖7所示,管道自動(dòng)避讓的原理如下:首先輸入發(fā)生碰撞的兩個(gè)構(gòu)件L1、L2,判斷L2的類型(Category)是否為管道,若為管道則獲取L1和L2管徑參數(shù)(get_Parameter)N1、N2,若不是管道則分別獲取L1的管徑N1和L2的寬度N2;然后獲取到碰撞中心點(diǎn)的XYZ值,結(jié)合L1方向(direction)函數(shù)和N1、N2利用式1和式(2)的關(guān)系得到A`點(diǎn)和B`點(diǎn);結(jié)合輸入的避讓高度Height參數(shù),在A`和B`的基礎(chǔ)上進(jìn)行坐標(biāo)Z值的變化得到C和D點(diǎn);基于A`點(diǎn)和B`點(diǎn)的XYZ值結(jié)合輸入的角度α值和避讓高度和L1的方向函數(shù)的值利用式(3)的關(guān)系得到A點(diǎn)和B點(diǎn)的XYZ值;分別在A、B、E和A、B、F的點(diǎn)集數(shù)組中獲得距離端點(diǎn)最近的點(diǎn)m1和m2;分別以EA、AC、CD、DB、BF創(chuàng)建管道,并且根據(jù)管道的位置關(guān)系創(chuàng)建連接管道的連接件彎頭。
圖7 生成避讓管道流程
為實(shí)現(xiàn)管道的自動(dòng)優(yōu)化功能,基于Revit軟件,參考RevitAPI.chm幫助文檔,應(yīng)用和編寫了一些函數(shù),主要使用到的函數(shù)如表1所示。
表1 插件主要函數(shù)
管道自動(dòng)避讓功能插件的.addin文件如下所示:
<RevitAddIns>
<AddIn Type="Command">
<Assembly>pipeoptimization.dll</Assembly>
<ClientId>321f927d-c7cc-4cdf-8900-b99495c2579d</ClientId><FullClassName>pipeoptimization.pipeadjust</FullClassName>
<Text>pipeadjust</Text>
<Description>""</Description><VisibilityMode>AlwaysVisible</VisibilityMode><VendorId>ADSK</VendorId>
<VendorDescription>Autodesk,www.autodesk.com</VendorDescription>
</AddIn>
</RevitAddIns>
某綜合大廈建筑項(xiàng)目,總計(jì)有31層,地面兩層為商場超市,由于項(xiàng)目過大,本文以兩層商場超市的給排水工程Revit模型為研究對象,基于Revit軟件機(jī)械樣板文件構(gòu)建建筑給排水模型,該建筑的給排水系統(tǒng)有:生活給水系統(tǒng)、消火栓系統(tǒng) 、自動(dòng)噴水滅火系統(tǒng)、冷凝水系統(tǒng)、消火栓系統(tǒng)、廢水系統(tǒng)、雨水系統(tǒng)、污水系統(tǒng)、通氣系統(tǒng)。
對該建筑構(gòu)建的Revit模型運(yùn)用Navisworks軟件進(jìn)行碰撞檢測,碰撞沖突如圖8(a)中標(biāo)記了1、2、3、4所示:分別發(fā)現(xiàn)了污水系統(tǒng)的管道與消火栓系統(tǒng)的管道的碰撞、消火栓系統(tǒng)管道(管徑為DN65)和自動(dòng)噴水滅火系統(tǒng)的管道(管徑為DN32)的碰撞、自動(dòng)噴水滅火系統(tǒng)的管道(管徑為DN25)與生活給水系統(tǒng)的管道(管徑為DN25)的碰撞、消火栓系統(tǒng)管道(管徑為DN65)和自動(dòng)噴水系統(tǒng)管道(管徑為DN100)的碰撞。
基于Revit軟件,使用管道自動(dòng)避讓插件,輸入避讓高度300,避讓角度90度等參數(shù)。實(shí)驗(yàn)的最終結(jié)果如圖8(b)中標(biāo)記1、2、3、4所示:消火栓系統(tǒng)管道避讓污水系統(tǒng)管道、自動(dòng)噴水滅火系統(tǒng)管道避讓消火栓系統(tǒng)管道、生活給水系統(tǒng)管道避讓自動(dòng)噴水滅火系統(tǒng)管道、消火栓系統(tǒng)管道避讓自動(dòng)噴水滅火系統(tǒng)管道。
圖8 綜合大廈的建筑給排水Revit三維模型
插件自動(dòng)完成的管道避讓結(jié)果確實(shí)符合管線避讓優(yōu)化原則:小管讓大管,有壓流管讓無壓流管,生活給水讓消防用水。
作者通過將該管道自動(dòng)避讓插件應(yīng)用于衛(wèi)生間風(fēng)管碰撞項(xiàng)目中,如圖9(a)所示,發(fā)生了兩根冷凝水系統(tǒng)管道以及三根生活給水系統(tǒng)的管道均與風(fēng)管發(fā)生碰撞。
在Revit軟件中使用管道自動(dòng)避讓插件進(jìn)行管道優(yōu)化,最終結(jié)果如圖9(b)所示,所有與風(fēng)管碰撞的冷凝水系統(tǒng)管道以及生活給水系統(tǒng)的管道均向下進(jìn)行避讓,該結(jié)果證明了管道自動(dòng)避讓插件遵循了管線避讓優(yōu)化原則:空間上電最上風(fēng)居中水最下。進(jìn)一步說明本文所開發(fā)出的管道自動(dòng)避讓插件具有一定的穩(wěn)定性和適用性,具有良好的工程實(shí)用價(jià)值。
圖9 Revit中某衛(wèi)生間局部三維模型
本文基于Revit軟件使用C#語言進(jìn)行了插件程序開發(fā),重點(diǎn)研究在BIM技術(shù)背景下的給排水管道自動(dòng)避讓的插件程序設(shè)計(jì),通過實(shí)際項(xiàng)目測試,插件能夠正確地實(shí)現(xiàn)管道的自動(dòng)避讓。開發(fā)插件充分考慮了管道優(yōu)化避讓時(shí)的多種條件,提高了插件進(jìn)行自動(dòng)化避讓的準(zhǔn)確性。各設(shè)計(jì)單位由于規(guī)范標(biāo)準(zhǔn)不盡相同,導(dǎo)致系統(tǒng)類型名稱更加復(fù)雜,而本文提出的插件,為設(shè)計(jì)人員提供修改系統(tǒng)類型名稱的交互界面,進(jìn)一步提高了插件的工程適用性,豐富了管道自動(dòng)優(yōu)化的方法。