朱 致 遠,牛 志 偉,張 宇,李 同 春
(河海大學 水利水電學院,江蘇 南京 210098)
Autodesk Revit 作為實現BIM技術使用最為廣泛的軟件之一[1],因其操作簡單、易于開發、兼容性好,在建筑行業占據了巨大的市場[2]。但目前我國水利行業對BIM技術的應用尚淺[3],因Revit缺乏水工結構計算、穩定計算功能,導致其無法滿足水利設計的需求,傳統水利設計還是常采用CAD繪圖,Excel表格、理正、PKPM等軟件輔助結構穩定計算,普遍存在可視化程度低、與BIM軟件結合度差、重復性工作繁瑣等缺點[4]。通過Revit API結合C#混合編程,對Revit軟件進行二次開發,訪問、操作三維模型,實現自主添加結構穩定計算功能模塊,為解決上述問題提供了新的思路。國內對于Revit軟件二次開發的研究起步較晚,綜合來看,主要集中在土木工程的結構計算、施工管理、便捷式模型建立及工程量的統計等幾個領域,在水利工程結構、穩定計算方面的研究仍有待深入[5]。朱紅光等[6]通過對Revit API接口的調用,實現了在Revit平臺下整體預應力裝配式板柱體系的結構計算二次開發;鄧朗妮等[7]使用Revit API開放數據接口創建基于Revit軟件安全管理模塊,實現了工程施工危險源的安全管理;馬佰鈺等[8]通過Revit二次開發,實現了對索塔及其主要構件的快速建模。肖貝[9]在Revit平臺上為土方工程開發了計算???,方便基坑開挖土方的計算。本文通過Revit API與C#語言相結合的編程方式,采用WPF界面開發模式和MVVM程序開發模式,進行水閘工程擋土墻穩定計算程序的開發,力求為水利行業擴展BIM技術應用進行有益探索。
Revit API(Application Programming Interface)是Revit提供給第三方開發者用來集成自建應用程序到Revit產品的工具包,通過Revit API,開發者可以實現訪問模型的圖形數據、參數數據,集成第三方應用,創建插件等工作[10]。Revit API里面包含了大量二次開發可以使用的命名空間,以及命名空間下的類和類中包含的函數和屬性,極大程度上減小了二次開發的難度,使Revit二次開發成為可能。
WPF(Windows Presentation Foundation)是微軟新一代的界面開發技術,是微軟開發技術未來10 a的主要方向[11]。WPF包含了數據驅動、DataBinding、XAML語言等概念,有效地將UI界面設計和邏輯設計分開,加上DirectX底層接口帶來的優秀圖形向量渲染引擎,相比上一代GDI/GDI+編程模型有了質的飛躍,也使得WPF在界面開發模式中占據了重要的位置。
MVVM模式(Model-View-View Model)充分利用了WPF中的XAML和DataBinding功能,將程序的結構分為Model層、View層和ViewModel層[12]。分層開發實現了功能模塊化,降低各個模塊之間的耦合度,從而使程序的架構清楚、功能明確,同時便于團隊協同開發[13]?;贛VVM模式的水閘擋土墻穩定計算插件二次開發流程如圖1所示。

圖1 基于MVVM模式的Revit二次開發流程Fig.1 Revit secondary development flow based on MVVM mode
Revit API提供兩種方式來擴展其功能:一種方式是創建一個外部命令(IExternal Command),這種方式由用戶點擊添加的命令按鈕來啟動二次開發生成的相應命令;另一種方式是加一個外部應用(IExternal Application),即添加菜單或工具條,在Revit啟動和關閉時自動執行[14]。
通過對Revit API提供的模型選擇和訪問方法的研究,實現了對擋土墻模型參數的自動識別與獲取。通過對WPF和MVVM架構的研究,使用C#語言編寫功能模塊,完成了用戶輸入參數、后臺程序計算、計算結果反饋的界面開發和人機交互功能。最后,使用外部應用調用外部命令的方式實現了擋土墻穩定計算插件的二次開發。插件開發流程結構如圖2所示。

圖2 擋土墻穩定計算插件結構框圖Fig.2 Structure diagram of retaining wall stability calculation plug-in
本文主要通過外部應用(IExternal Application)重載OnStartup()和OnShutdown()兩種方法實現功能區擴展。
(1) 首先在菜單欄中創建一個名為“水閘插件”的工具欄(RibbonTab),其下設一個名為“擋土墻”的面板(RibbonPanel),面板內置一個名為“穩定計算”的按鈕(Button),如圖3所示。

圖3 Revit功能區擴展效果圖Fig.3 Functional area expansion in Revit
(2) 然后使用外部應用調用外部命令的方式,實現點擊Button后跳出穩定計算的交互窗口。
(3) 交互窗口使用XAML語言編寫,其架構如圖4所示,最外層由“參數輸入”和“獲取參數”兩個TabControl控件組成;參數輸入頁面包含了“物理參數”“水位參數”“地震參數”和“基本參數”4個GropBox控件,用來實現用戶手動輸入工程環境參數的功能;參數獲取頁面包含了“獲取擋土墻尺寸”和“計算結果”2個GropBox控件,用來自動獲取擋土墻模型參數和計算結果判別與顯示的功能。

圖4 窗口控件構架圖Fig.4 Frame diagram of window control
用戶參數輸入模塊開發由WPF界面開發和ViewModel類庫開發組成。
(1) 在WPF界面開發中,本文針對不同類型的參數設置不同的輸入方式:對于數字(double類型)參數,提供TextBox控件,并已預設了默認值,簡化用戶操作流程;對于文字(string類型)參數,提供ComboBox控件,用戶可以通過下拉按鈕選擇的方式設置荷載組合、擋土墻級別、地基土質,使參數管理趨于規范化。
(2) ViewModel類庫的開發,通過繼承INotifyPropertyChanged接口,在屬性的set語句中激發PropertyChanged事件實現,當界面上的值改變時,自動通知并修改后臺對應參數值,當后臺參數值變化時,自動更改UI界面上的值,最終達到人機交互的效果。
模型參數的獲取模塊由WPF界面、ViewModel類庫和IExternal Command命令組成。
(1) WPF界面使用TextBox控件顯示獲取的模型參數值,通過雙向綁定,實現了用戶在已取得模型參數的基礎上手動修改參數值。
(2) ViewModel作為連接界面和命令的橋梁,將后臺命令程序獲取的參數與TextBox控件的Text屬性進行綁定(Binding)。
(3) IExternal Command命令使用RevitAPI中Selection.PickObject()和GetElement()的方法,通過手動點選擋土墻模型,將其轉化為程序中FamilyInstance類型的對象,然后通過遍歷該擋土墻實例對象的所有類型屬性,根據屬性名稱(parameter.Definition.Name)獲取需要的類型參數,并賦值給ViewModel中對應的屬性。擋土墻參數包括前趾板寬、豎墻寬、空腔寬、后趾板寬、豎墻高、底板厚、扶壁頂寬、扶壁底寬、扶壁厚、扶壁高等。
插件可智能識別不同類型的擋土墻樣式(空腔式、扶壁式),如圖5所示,獲取對應參數,并自動采用相對應的計算方法進行穩定計算。在此基礎上,還可進一步增加擋土墻樣式,以擴展插件的適用性。

圖5 擋土墻參數化三維模型Fig.5 Parametric 3D model of retaining wall
計算與結果分析模塊是擋土墻穩定計算插件的核心,使用C#語言編程,對擋土墻規范設計流程進行抽象封裝,完成了擋土墻自重計算方法、擋土墻穩定計算方法和結果分析方法的編寫。
(1) 擋土墻自重計算方法。由于各類型擋土墻穩定計算均需要自重荷載值,故將自重計算過程獨立計算,以此減少重復代碼量。該方法需傳入擋土墻模型的尺寸參數集合和物理參數集合,然后根據式(1)~(2)計算得擋土墻總自重值、總自重彎矩值。
G=K×V×υ
(1)
M=G×L
(2)
式中:G為構件自重荷載,kN;K為截面系數,矩形取1,三角形取0.5;V為構件體積,m3;υ為混凝土容重,N/m3;M為構件自重彎矩值,kN·m;L為構件力臂,m。
(2) 擋土墻穩定計算方法。該方法需傳入擋土墻尺寸參數集合、物理參數集合、水位參數集合和地震參數集合,然后根據規范[15]要求及荷載類型,分別計算擋土墻自重荷載、主動土壓力、靜水壓力、揚壓力、底板上土重、底板前挑水重等荷載,豎向荷載向下為正,橫向荷載向墻后為正,彎矩以向墻后傾覆為正。最后由式(3)~(5)計算擋土墻底應力不均勻系數η、抗滑穩定安全系數Kc和抗傾覆穩定安全系數K0。
η=Pmax/Pmin
(3)
式中:η為擋土墻底應力不均勻系數;Pmax為擋土墻底應力最大值,kPa;Pmin為擋土墻底應力最小值,kPa。
(4)
式中:Kc為擋土墻底面的抗滑穩定安全系數;f為擋土墻底面與地基之間的摩擦系數;∑G為作用在擋土墻上的全部豎向荷載,kN;∑H為作用在擋土墻上的全部水平向荷載,kN。
(5)
式中:K0為擋土墻抗傾覆穩定安全系數;∑MV為對擋土墻前趾的抗傾覆力矩,kN·m;∑MH為對擋土墻前趾的傾覆力矩,kN·m。
(3) 結果分析方法。根據用戶選擇的荷載組合、擋土墻級別、地基土質,選取規范[15]規定的擋土墻底應力不均勻系數η、擋土墻底面的抗滑穩定安全系數Kc和擋土墻抗傾覆穩定安全系數K0允許值,通過與計算結果進行比對,判斷擋土墻穩定設計的合理性,并將判定結果與TextBox控件的BackGround屬性進行綁定,當計算結果不滿足規范要求時,TextBox控件底色變紅,如圖6所示。

圖6 計算結果分析模塊Fig.6 Calculation results analysis module
針對上述研究成果,本文以定波水利樞紐水閘工程的擋土墻為例,測試其有效性。
(1) 建立參數化模型。使用Revit軟件對定波水利樞紐水閘工程進行三維建模,并為擋土墻模型設置完整的類型參數,如圖7所示。

圖7 參數化水閘模型Fig.7 Parametric sluice model
(2) 用戶輸入參數。根據該水閘工程所處的環境條件以及設計要求,輸入對應的物理參數、水位參數、地震參數和基本參數,如圖8所示。

圖8 用戶輸入參數窗口Fig.8 User input parameter window
(3) 獲取模型參數。點擊“請選擇一個擋土墻”按鈕,單擊擋土墻模型,插件自動獲取計算所需的擋土墻模型參數,如圖9所示。

圖9 獲取模型參數及計算結果Fig.9 Model parameters and calculation results acquisition
(4) 計算。點擊“計算”按鈕,在結果框中顯示計算結果,根據計算結果底色尚未變紅,判斷在該環境條件下,擋土墻設計滿足穩定要求,如圖9所示。
通過將擋土墻穩定計算插件和傳統的Excel表格、理正、PKPM軟件對比可以發現,插件能在較短時間內實現高精度的擋土墻穩定計算,并自動對結果的合理性進行判斷,大大減少了設計人員前期計算、后期復核,在多平臺多軟件來回切換、重復建模的繁瑣工作。與傳統方法相比,插件可視化程度高,提高了設計人員的工作效率的同時,也彌補了Revit缺少擋土墻穩定計算功能的不足。
筆者團隊充分利用BIM技術在水利工程行業設計、展示中的優勢,開發了基于Autodesk Revit平臺的水閘擋土墻穩定計算插件。該插件不僅實現了高精度、高效率的穩定計算功能,高可視化、低操作難度的人機交互,還將工程設計規范與插件相結合,實現了計算結果的實時判別,在彌補Revit缺少水工結構穩定計算功能不足的同時,提高了水利設計人員的工作效率,為進一步擴展BIM技術在水閘結構設計中的應用奠定了良好的基礎。