李丹妮 張軍 王凱 管昌生
(1、中交第二公路勘察設(shè)計研究院有限公司,湖北武漢 430056 2、中交集團(tuán)隧道與地下空間工程技術(shù)研發(fā)中心,湖北武漢 430056 3、武漢理工大學(xué),湖北武漢 430070)
目前BIM技術(shù)的應(yīng)用得到了大家的普遍認(rèn)可[1]。傳統(tǒng)的二維設(shè)計存在著先天不足,本來建筑是以三維空間為主體的,但是傳統(tǒng)的設(shè)計交付都是以二維圖形作為交付物,在這個三維向二維轉(zhuǎn)換過程中,多專業(yè)之間的協(xié)調(diào)很難保證[2],施工過程中又以二維圖紙為藍(lán)圖進(jìn)行施工,必然存在信息上的不對位,出現(xiàn)諸如碰撞、設(shè)計出來的功能區(qū)使用功能的不合理等問題。
BIM是以三維數(shù)字技術(shù)作為基礎(chǔ),集成工程中各種數(shù)據(jù)信息進(jìn)行建筑三維模型建立,通過數(shù)字信息仿真模擬建筑物所具有真實信息[3]。BIM技術(shù)是一個完整、豐富建筑信息化協(xié)作平臺,在建筑信息化領(lǐng)域逐步受到廣泛關(guān)注和認(rèn)可[4]。BIM理念實現(xiàn)需要一個兼具廣度和深度的標(biāo)準(zhǔn)體系,才能實現(xiàn)工程各階段之間信息共享互換。BIM是集計算機(jī)輔助設(shè)計與制造于一體的計算機(jī)集成制造系統(tǒng)理念和基于產(chǎn)品數(shù)據(jù)管理PDM 與STEP 標(biāo)準(zhǔn)的產(chǎn)品信息模型[5]。BIM技術(shù)是以建筑項目中各種相關(guān)數(shù)據(jù)信息作為基礎(chǔ),進(jìn)而對數(shù)據(jù)模型信息進(jìn)行整合,實現(xiàn)對建筑工程項目設(shè)施實體與功能特性數(shù)字化表達(dá)。標(biāo)準(zhǔn)和完整的建筑信息模型能夠使建筑項目生命周期在各個不同階段的數(shù)據(jù)、過程和資源得到共享和關(guān)聯(lián),可以讓建筑項目建設(shè)方與參與方進(jìn)行交流和使用[6]。建筑信息模型具有信息集成、協(xié)同管理、相同項目數(shù)據(jù)源功能,可解決分布式以及不同工程數(shù)據(jù)之間一致性和全生命周期信息共享問題,支持項目生命周期中所有相關(guān)工程信息創(chuàng)建、管理、共享以及互換[7]。隨著BIM技術(shù)高速發(fā)展,建筑行業(yè)發(fā)展必將進(jìn)入一個全新的時期[8]。
本文通過Revit API 插件開發(fā)實現(xiàn)快速道路及場地平整模擬,目前對基于.NET 的Revit 二次開發(fā)相關(guān)文獻(xiàn)相對較少,因此通過Revit 進(jìn)行二次開發(fā),打通各類軟件信息交流以及開發(fā)插件使Revit 本土化已成為研究熱點。本文開發(fā)插件成果,可以提高BIM建模設(shè)計的效率,便于BIM技術(shù)推廣應(yīng)用。
在Revit 中參數(shù)化表現(xiàn)為模型的所有元素之間的關(guān)系,簡單來說參數(shù)化就是讓模型各個元素隨著用戶指定的參數(shù)進(jìn)行協(xié)調(diào)變化。Revit 模型中所有參數(shù)的修改,都可以自動調(diào)動Revit 參數(shù)化修改引擎,來協(xié)調(diào)任何相關(guān)位置上的模型或者視圖等變化。Revit 所提供的API 包含了對幾乎所有元素的參數(shù)的讀取、修改、甚至還可以定義新的參數(shù)。
軟件的外部事件開發(fā)方法,不同于大部分現(xiàn)有二次開發(fā)方法。目前大部分論研究是用外部命令加外部應(yīng)用的方式進(jìn)行組合開發(fā),主要是為了避免選項卡中有過多的按鈕、以及可以實現(xiàn)插件非模態(tài)運(yùn)行。因此,本文采用了外部事件、外部命令和外部應(yīng)用相結(jié)合的方式,進(jìn)行插件軟件的開發(fā)。關(guān)鍵技術(shù)是應(yīng)用winform 與外部事件相結(jié)合組插件程序的主要部分,可以實現(xiàn)操作Revit 和操作本插件之間的靈活切換,實現(xiàn)特定功能創(chuàng)建。其中winform 作為插件的主界面,外部事件作為響應(yīng)用戶操作主界面的響應(yīng)部分。本插件程序由主界面向主程序傳遞各類用戶輸入的參數(shù),整個插件主要由主界面和主程序構(gòu)成。
3.1.1 創(chuàng)建插件主界面。Revit 允許用戶自定義Ribbon 面板[10],方便用戶按照自己的意圖在Revit 中實現(xiàn)用戶與Revit 的交互。本文應(yīng)用強(qiáng)大的Winform 來實現(xiàn)交互的用戶友好性。WinForm 是.Net 開發(fā)平臺中對Windows Form 的一種稱謂,它功能強(qiáng)大、操作方便、使用安全,可以應(yīng)用它創(chuàng)建豐富的界面,其本身自帶大量功能強(qiáng)大的控件,甚至可以讓用戶不寫一行代碼也能創(chuàng)建簡單的窗體程序。為了調(diào)用Winform 來作為主程序的交互界面,本文先調(diào)用RevitAPI 中的外部應(yīng)用方法來生成調(diào)用Winform,在Revit 中創(chuàng)建一個Ribbon 面板以及在面板上生成彈出主界面窗口的命令按鈕。編寫代碼實現(xiàn)彈出主窗口,在對button Data 變量初始化時,指定了要實現(xiàn)的命令的類的名字Auto generation For Foundation Pile. Foundation Piles Command,單擊命令按鈕時,將會調(diào)用這個類。而Foundation Piles Command 這個類的實現(xiàn)將會把主界面彈出來。
通過兩步代碼編寫,并在整個項目中添加一個Winform 窗體,即可實現(xiàn)單擊Ribbon 面板上的命令按鈕,彈出主界面窗口,生成的窗口為非模態(tài)窗口,便于用戶在插件窗口與Revit 窗口之間自由切換,實現(xiàn)模態(tài)窗口所不能實現(xiàn)的功能。
3.1.2 軸網(wǎng)生成主要算法。軸網(wǎng)相當(dāng)于地球的經(jīng)緯網(wǎng),在Revit 里起到“定海神針”的作用,整個建筑都是以軸網(wǎng)為定位依據(jù)建立起來的。目前在Revit 里建立軸網(wǎng)的一般步驟為:①一般選擇場地樓層平面→②選擇建筑選項卡→③單擊軸網(wǎng)命令按鈕→④在目標(biāo)位置畫出軸網(wǎng)→⑤重復(fù)第④步→⑥生成目標(biāo)軸網(wǎng)。
通過這幾個步驟,就可以將想要的軸網(wǎng)畫出來,在軸網(wǎng)軸線比較少時,感覺不出用傳統(tǒng)Revit 軸網(wǎng)繪制方式的缺陷,如果軸線很多時,傳統(tǒng)繪制軸網(wǎng)方法就比較費(fèi)時了。因此,可以通過Revit 的二次開發(fā)來解決這一重復(fù)性高的工作,利用輸入幾個參數(shù)來自動畫出軸網(wǎng),為設(shè)計師節(jié)省寶貴的時間,提升設(shè)計效率。本插件的自動生成軸網(wǎng)功能借鑒了PKPM生成軸網(wǎng)的方式,使用了下開間間距、下開間數(shù)量、左進(jìn)深深度、左進(jìn)深數(shù)量四個參數(shù)控制軸網(wǎng)的生成。為了保護(hù)這四個變量不受BuildGrid類之外的代碼對它們進(jìn)行直接修改,在BuildGrid 類內(nèi)部設(shè)立了四個與這四個變量一一對應(yīng)的屬性,它們分別是XKJ_D、XKJ_N、ZJS_D、ZJS_N。通過這種設(shè)立屬性的方式,可以保護(hù)整個程序數(shù)據(jù)的穩(wěn)定性,從而減少因為變量被意外修改而引起的難以發(fā)現(xiàn)的錯誤。
此方法將下開間的軸線與左進(jìn)深的軸線進(jìn)行分開生成,這樣的好處在于,方便維護(hù)升級算法、便于發(fā)現(xiàn)錯誤。此方法的前四個參數(shù)由BuildGrid 類內(nèi)的四個雙精度浮 點 變 量 doubleXiaKaiJian_Distance、double XiaKaiJian_Number、double ZuoJingSheng_Distance、double ZuoJingSheng_Number 傳入,而這四個雙精度浮點變量的值由BuildGrid 類內(nèi)部的四個屬性進(jìn)行賦值。為了從BuildGrid 類外部獲得XKJ_D、XKJ_N、ZJS_D、ZJS_N 的屬性值,因此從主界面的四個文本框把用戶輸入的值賦予XKJ_D、XKJ_N、ZJS_D、ZJS_N 四個屬性,界面如圖1 所示。然后,通過外部事件建立連接建立主界面與主程序的連接。在非Revit 內(nèi)部環(huán)境中建立外部應(yīng)用、外部命令,這在目前的幾個版本的Revit 中是被禁止的,因此需要借助外部事件來解決這一問題。但在應(yīng)用外部事件做開發(fā)時,要注意外部事件在被觸發(fā)后,外部事件觸發(fā)之后的代碼會與外部事件同時執(zhí)行,它們分別屬于不同的線程。通過代碼設(shè)計,可以看到下開間間距屬性與左進(jìn)深屬性,分別都除以變量ZhuanHuanZhi,這是因為Revit內(nèi)部基本單位是英尺,如果要獲取或設(shè)置構(gòu)件參數(shù)數(shù)值需要進(jìn)行單位轉(zhuǎn)換。軸網(wǎng)生成效果如圖2 所示。
圖1 參數(shù)選擇界面
圖2 軸網(wǎng)生成效果圖
用戶自己在Revit 中創(chuàng)建基樁族、使用族庫大師等插件獲得基樁族、編程開發(fā)自動生成基樁族。無論是從各大插件還是用戶自行創(chuàng)建,都可以很方便的獲得各類基樁族。因此本文采用從外部載入基樁族,作為自動生成的基樁功能的基樁族來源。
基樁作為與軸網(wǎng)具有強(qiáng)烈關(guān)系的地下構(gòu)件,因此基樁的定位點主要是定位在捕捉軸網(wǎng)中的軸線交點上。以下就是基樁的自動定位和生成的主要代碼及開發(fā)思路:
3.2.1 加載族到項目中。單擊圖3 中的“加載基樁族”按鈕,通過Open File Dialog open Foundation = new Open File Dialog() 創(chuàng)建加載外部基樁族對話框,而后將讀取到外部基樁族的路徑傳遞到主程序中的Load Foundation Family 類中,將Load Foundation Family 類中Path of Foundation Family 屬性賦值,為加載基樁族對話框所讀取到路徑值。 使用 doc.Load Family(path_O_Foundation,out family)這條語句。若這條語句返回True,則對話框中選定的基樁族將成功加載進(jìn)項目中,其中doc 是Document 類的一個實例化對象。在將基樁族加載進(jìn)入項目的同時,主界面將同時使用timer 控件進(jìn)行對加載進(jìn)入項目中的基樁族進(jìn)行族類型的掃描。由于本插件中Load Foundation Family 類與生成基樁的類Build Foundation 有很強(qiáng)的順序關(guān)系,Build Foundation類需要得到已經(jīng)加載到項目中的外部基樁族的族類型參數(shù),所以在Load Foundation Family 類中,將Load Foundation Family 類所需要的參數(shù)進(jìn)行屬性化設(shè)置,方便保護(hù)類本身的數(shù)據(jù)安全、以及不同類之間傳遞信息。
圖3 加載基樁族
3.2.2 捕捉軸網(wǎng)交點。在生成基樁之前需要獲知基樁的定位點,工程中基樁一般位于軸線交點上,本插件將采用軸線交點作為基樁生成的定位點。為了增加主程序的可讀性、簡潔性以及代碼的模塊化、復(fù)用性,單獨編寫了一個方法類method,在這個類中包含多個主程序需要的通用方法。其方法是Get Intersection From Grids(Document doc),本方法只需讀入一個文檔類Document參數(shù),即可返回此文檔中軸線交點集合List<XYZ>,本方法獲取交點集合的思路是通過兩個for each 遍歷語句來實現(xiàn)交點集合的尋找與裝載。
通過方法Get Intersection From Grids(Document doc),就可以獲得基樁群的定位點集,這個點集是至關(guān)重要的基樁群定位信息集合。有了這個集合,就可以為創(chuàng)建指定位置的基樁群做好準(zhǔn)備。
3.2.3 獲取基樁族類型及標(biāo)高。Revit 為了系統(tǒng)化管理圖元,將所有的圖元都進(jìn)行了分類,分類的級別有三級,即:一級分類:族類別,將項目進(jìn)行專業(yè)上的分類,例如梁、結(jié)構(gòu)柱、條形基礎(chǔ)等就歸為結(jié)構(gòu)類的族類別,放在結(jié)構(gòu)選項卡中方便用戶尋找。二級分類:族,每種族都是一系列子構(gòu)件的集合,例如一級分類中的梁元素就包括了很多種類型的梁,例如矩形梁、工字鋼梁、疊合梁等。三級分類:族類型,族類型是更小一級的單位,它是二級分類的細(xì)化,是同一族下的不同子類型,例如300×600矩形梁、400×800 矩形梁等。
由上可知,用戶在通過插件主界面加載外部基樁族后,需要指定用戶想要生成的族類型。本插件會默認(rèn)一個族類型供用戶使用如圖4 中紅色矩形框中所示,當(dāng)然用戶也可以通過主界面中的下拉列表選擇來指定自己想要的族類型。
圖4 默認(rèn)族類別
3.2.4 生成基樁。單擊“生成基樁”按鈕,將外部基樁族與用戶所選用的外部基樁族類型,這兩個參數(shù)傳入主程序中的Build Foundation 類中的兩個對應(yīng)屬性,隨后觸發(fā)Build Foundation 類的外部事件,開啟事物,生成基樁群。因為前面已經(jīng)獲得生成基樁群的所有參數(shù),故生成基樁群的核心代碼在這一步只有一個遍歷語句和一條創(chuàng)建語句。生成的基樁群如圖5。
圖5 生成的基樁群三維示例
本文探討了revit 插件開發(fā)的基本方法,針對軸網(wǎng)設(shè)計與樁基設(shè)計,對基于BIM技術(shù)建模的快速繪制BIM模型方法進(jìn)行了研究。其中包括代碼編寫、模塊主要功能實現(xiàn)與測試,功能算法分析。對具體開發(fā)過程中的外部事件與外部應(yīng)用、外部命令相結(jié)合、發(fā)揮了外部事件、外部應(yīng)用、外部命令各自特特征,并對插件軟件進(jìn)行了模塊化編制與應(yīng)用。通過AUOTODEAK 公司對外界開放RevitAP,可以通過軟件工程師開發(fā)相應(yīng)算法來解決國內(nèi)用戶的本土化需求。