朱 致 遠,牛 志 偉,張 宇,李 同 春
(河海大學 水利水電學院,江蘇 南京 210098)
Autodesk Revit 作為實現(xiàn)BIM技術使用最為廣泛的軟件之一[1],因其操作簡單、易于開發(fā)、兼容性好,在建筑行業(yè)占據(jù)了巨大的市場[2]。但目前我國水利行業(yè)對BIM技術的應用尚淺[3],因Revit缺乏水工結構計算、穩(wěn)定計算功能,導致其無法滿足水利設計的需求,傳統(tǒng)水利設計還是常采用CAD繪圖,Excel表格、理正、PKPM等軟件輔助結構穩(wěn)定計算,普遍存在可視化程度低、與BIM軟件結合度差、重復性工作繁瑣等缺點[4]。通過Revit API結合C#混合編程,對Revit軟件進行二次開發(fā),訪問、操作三維模型,實現(xiàn)自主添加結構穩(wěn)定計算功能模塊,為解決上述問題提供了新的思路。國內對于Revit軟件二次開發(fā)的研究起步較晚,綜合來看,主要集中在土木工程的結構計算、施工管理、便捷式模型建立及工程量的統(tǒng)計等幾個領域,在水利工程結構、穩(wěn)定計算方面的研究仍有待深入[5]。朱紅光等[6]通過對Revit API接口的調用,實現(xiàn)了在Revit平臺下整體預應力裝配式板柱體系的結構計算二次開發(fā);鄧朗妮等[7]使用Revit API開放數(shù)據(jù)接口創(chuàng)建基于Revit軟件安全管理模塊,實現(xiàn)了工程施工危險源的安全管理;馬佰鈺等[8]通過Revit二次開發(fā),實現(xiàn)了對索塔及其主要構件的快速建模。肖貝[9]在Revit平臺上為土方工程開發(fā)了計算???,方便基坑開挖土方的計算。本文通過Revit API與C#語言相結合的編程方式,采用WPF界面開發(fā)模式和MVVM程序開發(fā)模式,進行水閘工程擋土墻穩(wěn)定計算程序的開發(fā),力求為水利行業(yè)擴展BIM技術應用進行有益探索。
Revit API(Application Programming Interface)是Revit提供給第三方開發(fā)者用來集成自建應用程序到Revit產品的工具包,通過Revit API,開發(fā)者可以實現(xiàn)訪問模型的圖形數(shù)據(jù)、參數(shù)數(shù)據(jù),集成第三方應用,創(chuàng)建插件等工作[10]。Revit API里面包含了大量二次開發(fā)可以使用的命名空間,以及命名空間下的類和類中包含的函數(shù)和屬性,極大程度上減小了二次開發(fā)的難度,使Revit二次開發(fā)成為可能。
WPF(Windows Presentation Foundation)是微軟新一代的界面開發(fā)技術,是微軟開發(fā)技術未來10 a的主要方向[11]。WPF包含了數(shù)據(jù)驅動、DataBinding、XAML語言等概念,有效地將UI界面設計和邏輯設計分開,加上DirectX底層接口帶來的優(yōu)秀圖形向量渲染引擎,相比上一代GDI/GDI+編程模型有了質的飛躍,也使得WPF在界面開發(fā)模式中占據(jù)了重要的位置。
MVVM模式(Model-View-View Model)充分利用了WPF中的XAML和DataBinding功能,將程序的結構分為Model層、View層和ViewModel層[12]。分層開發(fā)實現(xiàn)了功能模塊化,降低各個模塊之間的耦合度,從而使程序的架構清楚、功能明確,同時便于團隊協(xié)同開發(fā)[13]。基于MVVM模式的水閘擋土墻穩(wěn)定計算插件二次開發(fā)流程如圖1所示。
圖1 基于MVVM模式的Revit二次開發(fā)流程Fig.1 Revit secondary development flow based on MVVM mode
Revit API提供兩種方式來擴展其功能:一種方式是創(chuàng)建一個外部命令(IExternal Command),這種方式由用戶點擊添加的命令按鈕來啟動二次開發(fā)生成的相應命令;另一種方式是加一個外部應用(IExternal Application),即添加菜單或工具條,在Revit啟動和關閉時自動執(zhí)行[14]。
通過對Revit API提供的模型選擇和訪問方法的研究,實現(xiàn)了對擋土墻模型參數(shù)的自動識別與獲取。通過對WPF和MVVM架構的研究,使用C#語言編寫功能模塊,完成了用戶輸入?yún)?shù)、后臺程序計算、計算結果反饋的界面開發(fā)和人機交互功能。最后,使用外部應用調用外部命令的方式實現(xiàn)了擋土墻穩(wěn)定計算插件的二次開發(fā)。插件開發(fā)流程結構如圖2所示。
圖2 擋土墻穩(wěn)定計算插件結構框圖Fig.2 Structure diagram of retaining wall stability calculation plug-in
本文主要通過外部應用(IExternal Application)重載OnStartup()和OnShutdown()兩種方法實現(xiàn)功能區(qū)擴展。
(1) 首先在菜單欄中創(chuàng)建一個名為“水閘插件”的工具欄(RibbonTab),其下設一個名為“擋土墻”的面板(RibbonPanel),面板內置一個名為“穩(wěn)定計算”的按鈕(Button),如圖3所示。
圖3 Revit功能區(qū)擴展效果圖Fig.3 Functional area expansion in Revit
(2) 然后使用外部應用調用外部命令的方式,實現(xiàn)點擊Button后跳出穩(wěn)定計算的交互窗口。
(3) 交互窗口使用XAML語言編寫,其架構如圖4所示,最外層由“參數(shù)輸入”和“獲取參數(shù)”兩個TabControl控件組成;參數(shù)輸入頁面包含了“物理參數(shù)”“水位參數(shù)”“地震參數(shù)”和“基本參數(shù)”4個GropBox控件,用來實現(xiàn)用戶手動輸入工程環(huán)境參數(shù)的功能;參數(shù)獲取頁面包含了“獲取擋土墻尺寸”和“計算結果”2個GropBox控件,用來自動獲取擋土墻模型參數(shù)和計算結果判別與顯示的功能。
圖4 窗口控件構架圖Fig.4 Frame diagram of window control
用戶參數(shù)輸入模塊開發(fā)由WPF界面開發(fā)和ViewModel類庫開發(fā)組成。
(1) 在WPF界面開發(fā)中,本文針對不同類型的參數(shù)設置不同的輸入方式:對于數(shù)字(double類型)參數(shù),提供TextBox控件,并已預設了默認值,簡化用戶操作流程;對于文字(string類型)參數(shù),提供ComboBox控件,用戶可以通過下拉按鈕選擇的方式設置荷載組合、擋土墻級別、地基土質,使參數(shù)管理趨于規(guī)范化。
(2) ViewModel類庫的開發(fā),通過繼承INotifyPropertyChanged接口,在屬性的set語句中激發(fā)PropertyChanged事件實現(xiàn),當界面上的值改變時,自動通知并修改后臺對應參數(shù)值,當后臺參數(shù)值變化時,自動更改UI界面上的值,最終達到人機交互的效果。
模型參數(shù)的獲取模塊由WPF界面、ViewModel類庫和IExternal Command命令組成。
(1) WPF界面使用TextBox控件顯示獲取的模型參數(shù)值,通過雙向綁定,實現(xiàn)了用戶在已取得模型參數(shù)的基礎上手動修改參數(shù)值。
(2) ViewModel作為連接界面和命令的橋梁,將后臺命令程序獲取的參數(shù)與TextBox控件的Text屬性進行綁定(Binding)。
(3) IExternal Command命令使用RevitAPI中Selection.PickObject()和GetElement()的方法,通過手動點選擋土墻模型,將其轉化為程序中FamilyInstance類型的對象,然后通過遍歷該擋土墻實例對象的所有類型屬性,根據(jù)屬性名稱(parameter.Definition.Name)獲取需要的類型參數(shù),并賦值給ViewModel中對應的屬性。擋土墻參數(shù)包括前趾板寬、豎墻寬、空腔寬、后趾板寬、豎墻高、底板厚、扶壁頂寬、扶壁底寬、扶壁厚、扶壁高等。
插件可智能識別不同類型的擋土墻樣式(空腔式、扶壁式),如圖5所示,獲取對應參數(shù),并自動采用相對應的計算方法進行穩(wěn)定計算。在此基礎上,還可進一步增加擋土墻樣式,以擴展插件的適用性。
圖5 擋土墻參數(shù)化三維模型Fig.5 Parametric 3D model of retaining wall
計算與結果分析模塊是擋土墻穩(wěn)定計算插件的核心,使用C#語言編程,對擋土墻規(guī)范設計流程進行抽象封裝,完成了擋土墻自重計算方法、擋土墻穩(wěn)定計算方法和結果分析方法的編寫。
(1) 擋土墻自重計算方法。由于各類型擋土墻穩(wěn)定計算均需要自重荷載值,故將自重計算過程獨立計算,以此減少重復代碼量。該方法需傳入擋土墻模型的尺寸參數(shù)集合和物理參數(shù)集合,然后根據(jù)式(1)~(2)計算得擋土墻總自重值、總自重彎矩值。
G=K×V×υ
(1)
M=G×L
(2)
式中:G為構件自重荷載,kN;K為截面系數(shù),矩形取1,三角形取0.5;V為構件體積,m3;υ為混凝土容重,N/m3;M為構件自重彎矩值,kN·m;L為構件力臂,m。
(2) 擋土墻穩(wěn)定計算方法。該方法需傳入擋土墻尺寸參數(shù)集合、物理參數(shù)集合、水位參數(shù)集合和地震參數(shù)集合,然后根據(jù)規(guī)范[15]要求及荷載類型,分別計算擋土墻自重荷載、主動土壓力、靜水壓力、揚壓力、底板上土重、底板前挑水重等荷載,豎向荷載向下為正,橫向荷載向墻后為正,彎矩以向墻后傾覆為正。最后由式(3)~(5)計算擋土墻底應力不均勻系數(shù)η、抗滑穩(wěn)定安全系數(shù)Kc和抗傾覆穩(wěn)定安全系數(shù)K0。
η=Pmax/Pmin
(3)
式中:η為擋土墻底應力不均勻系數(shù);Pmax為擋土墻底應力最大值,kPa;Pmin為擋土墻底應力最小值,kPa。
(4)
式中:Kc為擋土墻底面的抗滑穩(wěn)定安全系數(shù);f為擋土墻底面與地基之間的摩擦系數(shù);∑G為作用在擋土墻上的全部豎向荷載,kN;∑H為作用在擋土墻上的全部水平向荷載,kN。
(5)
式中:K0為擋土墻抗傾覆穩(wěn)定安全系數(shù);∑MV為對擋土墻前趾的抗傾覆力矩,kN·m;∑MH為對擋土墻前趾的傾覆力矩,kN·m。
(3) 結果分析方法。根據(jù)用戶選擇的荷載組合、擋土墻級別、地基土質,選取規(guī)范[15]規(guī)定的擋土墻底應力不均勻系數(shù)η、擋土墻底面的抗滑穩(wěn)定安全系數(shù)Kc和擋土墻抗傾覆穩(wěn)定安全系數(shù)K0允許值,通過與計算結果進行比對,判斷擋土墻穩(wěn)定設計的合理性,并將判定結果與TextBox控件的BackGround屬性進行綁定,當計算結果不滿足規(guī)范要求時,TextBox控件底色變紅,如圖6所示。
圖6 計算結果分析模塊Fig.6 Calculation results analysis module
針對上述研究成果,本文以定波水利樞紐水閘工程的擋土墻為例,測試其有效性。
(1) 建立參數(shù)化模型。使用Revit軟件對定波水利樞紐水閘工程進行三維建模,并為擋土墻模型設置完整的類型參數(shù),如圖7所示。
圖7 參數(shù)化水閘模型Fig.7 Parametric sluice model
(2) 用戶輸入?yún)?shù)。根據(jù)該水閘工程所處的環(huán)境條件以及設計要求,輸入對應的物理參數(shù)、水位參數(shù)、地震參數(shù)和基本參數(shù),如圖8所示。
圖8 用戶輸入?yún)?shù)窗口Fig.8 User input parameter window
(3) 獲取模型參數(shù)。點擊“請選擇一個擋土墻”按鈕,單擊擋土墻模型,插件自動獲取計算所需的擋土墻模型參數(shù),如圖9所示。
圖9 獲取模型參數(shù)及計算結果Fig.9 Model parameters and calculation results acquisition
(4) 計算。點擊“計算”按鈕,在結果框中顯示計算結果,根據(jù)計算結果底色尚未變紅,判斷在該環(huán)境條件下,擋土墻設計滿足穩(wěn)定要求,如圖9所示。
通過將擋土墻穩(wěn)定計算插件和傳統(tǒng)的Excel表格、理正、PKPM軟件對比可以發(fā)現(xiàn),插件能在較短時間內實現(xiàn)高精度的擋土墻穩(wěn)定計算,并自動對結果的合理性進行判斷,大大減少了設計人員前期計算、后期復核,在多平臺多軟件來回切換、重復建模的繁瑣工作。與傳統(tǒng)方法相比,插件可視化程度高,提高了設計人員的工作效率的同時,也彌補了Revit缺少擋土墻穩(wěn)定計算功能的不足。
筆者團隊充分利用BIM技術在水利工程行業(yè)設計、展示中的優(yōu)勢,開發(fā)了基于Autodesk Revit平臺的水閘擋土墻穩(wěn)定計算插件。該插件不僅實現(xiàn)了高精度、高效率的穩(wěn)定計算功能,高可視化、低操作難度的人機交互,還將工程設計規(guī)范與插件相結合,實現(xiàn)了計算結果的實時判別,在彌補Revit缺少水工結構穩(wěn)定計算功能不足的同時,提高了水利設計人員的工作效率,為進一步擴展BIM技術在水閘結構設計中的應用奠定了良好的基礎。