陳蕾蕾 ,劉占午 ,徐 鵬 ,何 琴
(1.江蘇省水利勘測(cè)設(shè)計(jì)研究院有限公司,江蘇 揚(yáng)州 225127;2.江蘇省水利建設(shè)工程有限公司,江蘇 揚(yáng)州 225007;3.江蘇省水利科學(xué)研究院,江蘇 南京 210017)
21 世紀(jì),以信息化技術(shù)為支撐,通過(guò)云計(jì)算、大數(shù)據(jù)、物聯(lián)網(wǎng)、移動(dòng)終端、人工智能、水利模型、傳感器等新興技術(shù)的應(yīng)用[1],水利事業(yè)進(jìn)入蓬勃發(fā)展的新時(shí)期,傳統(tǒng)水利正逐步轉(zhuǎn)化成現(xiàn)代化水利[2]。隨著國(guó)家對(duì)水利信息化工作重視度的不斷提高,BIM(Building Information Modeling),即建筑信息模型技術(shù)逐漸應(yīng)用于水利工程項(xiàng)目中[3]。水利工程建筑物 BIM 模型建立一個(gè)真實(shí)描述工程設(shè)計(jì)的數(shù)字信息模型,是實(shí)現(xiàn)可視化仿真技術(shù)的基礎(chǔ)[4]。水利工程與普通建筑工程特點(diǎn)不同,其建模順序、方法、要求也會(huì)有所不同,因此需要進(jìn)行定制化建模[5]。Autodesk 公司開(kāi)發(fā)的 Revit 軟件可進(jìn)行參數(shù)化三維建模、協(xié)同設(shè)計(jì),為設(shè)計(jì)人員提供真實(shí)的三維視角[6],且 Revit 軟件開(kāi)放二次開(kāi)發(fā)接口 API,允許用戶通過(guò)接口解析 Revit 數(shù)據(jù)并根據(jù)需求進(jìn)行定制化開(kāi)發(fā)[7]。
Revit 平臺(tái)上手動(dòng)創(chuàng)建扶壁式擋土墻主要分為2 個(gè)步驟:1)通過(guò)輪廓放樣[8]創(chuàng)建 1 個(gè)擋土墻;2)通過(guò)輪廓放樣創(chuàng)建 1 個(gè)扶壁,將扶壁放置在擋土墻導(dǎo)線上并根據(jù)需求進(jìn)行陣列和偏轉(zhuǎn)。對(duì)于單直線或者單圓弧導(dǎo)線型擋土墻扶壁放置操作并不復(fù)雜,但是對(duì)于導(dǎo)線為組合線型,如折線型或者直線與圓弧的組合型,扶壁放置尤為困難,需要手動(dòng)計(jì)算扶壁放置的間距和旋轉(zhuǎn)角度。若是采用基于 Revit 平臺(tái)的扶壁式擋土墻三維建模二次開(kāi)發(fā)程序[9]可通過(guò)代碼計(jì)算扶壁間距和旋轉(zhuǎn)角度,提高了建模效率,如圖1 和 2 所示,但是二次開(kāi)發(fā)程序中固定了導(dǎo)線的類型(直線或者圓弧)和擋土墻方向(只能為正向),并未考慮多線型導(dǎo)線和反向擋土墻模型的扶壁放置,因此本研究基于 Revit 平臺(tái)和 C# 技術(shù)研發(fā)扶壁放置程序,可通過(guò)選擇導(dǎo)線和墻體兩側(cè)邊緣線快速放置扶壁,滿足異型導(dǎo)線和正反向懸臂式擋土墻的扶壁放置。
圖1 扶壁式擋土墻插件輪廓設(shè)置
扶壁放置程序二次開(kāi)發(fā)是通過(guò) Revit 開(kāi)放的接口 API 和 C# 技術(shù)將手動(dòng)操作步驟以程序代替的過(guò)程,利用后臺(tái)代碼執(zhí)行人工和計(jì)算操作從而簡(jiǎn)化整個(gè)操作流程,提高用戶建模效率,簡(jiǎn)化建模過(guò)程。
扶壁放置程序通過(guò)模擬手動(dòng)放置扶壁的過(guò)程以程序代替人力的方式簡(jiǎn)化用戶操作,與以往開(kāi)發(fā)的二次程序略有不同,扶壁放置程序需要與用戶進(jìn)行多次交互選擇,比如需要用戶選擇“扶壁放置路徑”,并選擇“擋墻兩側(cè)邊緣線”,且因?yàn)榉霰谂c原來(lái)的擋墻并不是一個(gè)整體,需要代碼在底層將扶壁與擋墻進(jìn)行連接,因此扶壁放置程序涉及 Revit 的兩大類 UIDocument 和 Document[10]。UIDocument類對(duì)主要提供獲取元素(Selection)、顯示元素(Show Elements)和視圖管理(Active Document)3 種功能,Document 類可以打開(kāi)或創(chuàng)建 Revit 的族或項(xiàng)目文件并在已打開(kāi)的當(dāng)前文件中進(jìn)行拉伸(Extrusion)、放樣(Sweep)、連接(Join)等操作。
圖2 扶壁式擋土墻插件導(dǎo)線設(shè)置
手動(dòng)放置扶壁的 UI 界面操作主要包含放樣創(chuàng)建單個(gè)扶壁模型,陣列、旋轉(zhuǎn)偏移角度及墻體和扶壁模型連接[11],對(duì)于導(dǎo)線比較復(fù)雜的擋土墻陣列和偏轉(zhuǎn)角度涉及計(jì)算,尤其是偏轉(zhuǎn)角度需要每個(gè)扶壁獨(dú)立進(jìn)行,無(wú)法批量操作。扶壁放置程序的二次開(kāi)發(fā)借鑒了手動(dòng)操作步驟,其設(shè)計(jì)流程如圖3 所示,用戶根據(jù)界面提示拾取擋土墻的導(dǎo)線和兩側(cè)邊緣線,拾取操作完成后界面會(huì)跳出扶壁參數(shù)設(shè)置[12]界面如圖4 所示,該界面中包含扶壁的輪廓參數(shù)設(shè)置、扶壁放置個(gè)數(shù)、間距顯示及拾取的導(dǎo)線信息。程序根據(jù)界面中輸入的扶壁個(gè)數(shù)、扶壁厚度導(dǎo)線的長(zhǎng)度計(jì)算扶壁之間的間距并得到扶壁的偏移點(diǎn),通過(guò)兩側(cè)邊緣線計(jì)算擋土墻的方向及扶壁的偏轉(zhuǎn)角度,最后批量生成符合程序判定要求的扶壁并將他們與擋土墻連接使其成為一個(gè)整體。
圖3 二次開(kāi)發(fā)設(shè)計(jì)流程圖
圖4 扶壁參數(shù)設(shè)置界面
扶壁放置程序有兩大難點(diǎn):1)通過(guò)導(dǎo)線和兩側(cè)邊緣線判斷當(dāng)前擋土墻是正向還是反向;2)對(duì)選擇的導(dǎo)線進(jìn)行陣列,導(dǎo)線的數(shù)量和類型由用戶手動(dòng)操作選擇,并根據(jù)選擇的導(dǎo)線類型和擋墻的方向計(jì)算扶壁放置后的偏轉(zhuǎn)角度。
判斷擋土墻的方向主要依賴擋土墻兩側(cè)邊緣線和與其相交的導(dǎo)線,直線型與圓弧型導(dǎo)線判斷方向的方法并不一致,直線型導(dǎo)線判斷方向的主要步驟是:1)計(jì)算直線和兩側(cè)邊緣線某一條線的交點(diǎn);2)根據(jù)交點(diǎn)確定是否反置邊緣線,確保直線和邊緣線是正向向量的關(guān)系;3)計(jì)算直線與邊緣線的法線向量;4)根據(jù)法線向量的Z值得到擋土墻的方向,如果Z> 0 則是正向,Z< 0 則是反向。
圓弧型導(dǎo)線判斷方向的主要步驟是:1)計(jì)算圓弧和兩側(cè)邊緣線某一條線的交點(diǎn);2)以交點(diǎn)為起點(diǎn),圓弧的圓心為終點(diǎn),生成新的一段直線;3)判斷直線與有交點(diǎn)的邊緣線的關(guān)系,如果是重合或者完全相同則是正向,否則就是反向,其判斷流程圖如圖5 所示。
圖5 判斷流程圖
選中的導(dǎo)線集合通常是無(wú)序狀態(tài),計(jì)算扶壁的陣列點(diǎn)之前需要先將導(dǎo)線排序,即確保選中的導(dǎo)線集合是首尾相連的狀態(tài),默認(rèn)排序規(guī)則是從左向右;扶壁的陣列算法是一個(gè)大循環(huán),以扶壁間距為度量單位對(duì)導(dǎo)線集合進(jìn)行切割,為確保偏轉(zhuǎn)是扶壁能與墻體有效連接,不存在縫隙,陣列算法中最后1 個(gè)放置點(diǎn)需要偏移“扶壁厚度”單位;扶壁的旋轉(zhuǎn)算法是 2 層循環(huán),外層循環(huán)的主體是導(dǎo)線集合,內(nèi)層循環(huán)的主體是陣列算法中得到的陣列點(diǎn)集,圓弧型導(dǎo)線計(jì)算旋轉(zhuǎn)角度時(shí)還需考慮擋土墻的方向,具體的扶壁陣列、旋轉(zhuǎn)算法描述如圖6 所示。
圖6 扶壁陣列、旋轉(zhuǎn)算法解析
Revit 平臺(tái)中扶壁創(chuàng)建方式主要包含手動(dòng)、扶壁式擋土墻二次開(kāi)發(fā)和扶壁放置 3 種插件創(chuàng)建方式,它們的操作步驟各有不同,但其硬件環(huán)境均要求單核或者多核 intel/英特爾 i5 以上 CPU 且內(nèi)存 2 GB 以上 PC 機(jī),軟件環(huán)境均要求 Windows 7.0(64 位)以上操作系統(tǒng)且安裝 Revit 2014 以上版本軟件,3 種創(chuàng)建方式的效率和適用范圍對(duì)比如表1 所示。
表1 扶壁放置插件使用說(shuō)明及效率和適用范圍對(duì)比表
扶壁放置插件可明顯提高扶壁模型創(chuàng)建的效率并且具有廣泛的適用范圍,插件的效果展示如圖7所示,利用扶壁放置程序?yàn)?19 個(gè)懸臂式擋土墻放置扶壁一共只需大約 12 min,無(wú)論導(dǎo)線的類型是直線、圓弧或者復(fù)雜類型,無(wú)論擋土墻的方向是正向還是反向,扶壁放置程序均可以根據(jù)用戶需求配置扶壁。
圖7 扶壁放置程序效果展示圖
引淮入石泵站工程房山翻水站工程曾采用扶壁放置插件完成部分擋土墻設(shè)計(jì),設(shè)計(jì)結(jié)果滿足施工圖設(shè)計(jì)要求,該插件的通用性比較強(qiáng),適用于不同類型的擋土墻,如懸臂式或空箱式擋土墻,正向或反向擋土墻,異型或常規(guī)導(dǎo)線擋土墻,只需選擇導(dǎo)線和兩側(cè)邊緣線并輸入界面參數(shù)即可快速有效地完成扶壁放置,且扶壁放置程序模擬手動(dòng)放置扶壁過(guò)程并將底層算法封裝,用戶使用觀感簡(jiǎn)易方便,不會(huì)覺(jué)得操作復(fù)雜難懂,可明顯提高用戶使用的積極性。但是使用扶壁放置程序有一個(gè)前提,Revit 當(dāng)前活動(dòng)文檔中必須已經(jīng)創(chuàng)建或者導(dǎo)入 1 個(gè)擋土墻,因此用戶需要對(duì) Revit 軟件有相應(yīng)的知識(shí)儲(chǔ)備和操作經(jīng)驗(yàn)。扶壁放置程序類似于工具包,為擋土墻主體服務(wù),擋土墻主體缺少某個(gè)構(gòu)件時(shí),工具包可方便迅速地彌補(bǔ)模型的不足,以此為借鑒經(jīng)驗(yàn)可根據(jù)需求研發(fā)地連墻、擋浪板、樁基等插件工具包。