Revit二次开发在水闸工程挡土墙设计中的应用

2021-03-05 01:47远,牛伟,张宇,李
人民长江 2021年2期
关键词:二次开发挡土墙控件

朱 致 远,牛 志 伟,张 宇,李 同 春

(河海大学 水利水电学院,江苏 南京 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技术应用进行有益探索。

1 开发工具及开发模式

1.1 Revit API工具包

Revit API(Application Programming Interface)是Revit提供给第三方开发者用来集成自建应用程序到Revit产品的工具包,通过Revit API,开发者可以实现访问模型的图形数据、参数数据,集成第三方应用,创建插件等工作[10]。Revit API里面包含了大量二次开发可以使用的命名空间,以及命名空间下的类和类中包含的函数和属性,极大程度上减小了二次开发的难度,使Revit二次开发成为可能。

1.2 WPF界面开发模式

WPF(Windows Presentation Foundation)是微软新一代的界面开发技术,是微软开发技术未来10 a的主要方向[11]。WPF包含了数据驱动、DataBinding、XAML语言等概念,有效地将UI界面设计和逻辑设计分开,加上DirectX底层接口带来的优秀图形向量渲染引擎,相比上一代GDI/GDI+编程模型有了质的飞跃,也使得WPF在界面开发模式中占据了重要的位置。

1.3 MVVM程序开发模式

MVVM模式(Model-View-View Model)充分利用了WPF中的XAML和DataBinding功能,将程序的结构分为Model层、View层和ViewModel层[12]。分层开发实现了功能模块化,降低各个模块之间的耦合度,从而使程序的架构清楚、功能明确,同时便于团队协同开发[13]。基于MVVM模式的水闸挡土墙稳定计算插件二次开发流程如图1所示。

图1 基于MVVM模式的Revit二次开发流程Fig.1 Revit secondary development flow based on MVVM mode

2 挡土墙稳定计算插件开发

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

2.1 界面开发

本文主要通过外部应用(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

2.2 用户参数输入模块

用户参数输入模块开发由WPF界面开发和ViewModel类库开发组成。

(1) 在WPF界面开发中,本文针对不同类型的参数设置不同的输入方式:对于数字(double类型)参数,提供TextBox控件,并已预设了默认值,简化用户操作流程;对于文字(string类型)参数,提供ComboBox控件,用户可以通过下拉按钮选择的方式设置荷载组合、挡土墙级别、地基土质,使参数管理趋于规范化。

(2) ViewModel类库的开发,通过继承INotifyPropertyChanged接口,在属性的set语句中激发PropertyChanged事件实现,当界面上的值改变时,自动通知并修改后台对应参数值,当后台参数值变化时,自动更改UI界面上的值,最终达到人机交互的效果。

2.3 模型参数获取模块

模型参数的获取模块由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

2.4 计算与结果分析模块

计算与结果分析模块是挡土墙稳定计算插件的核心,使用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

3 挡土墙稳定计算插件在水闸设计中的应用

针对上述研究成果,本文以定波水利枢纽水闸工程的挡土墙为例,测试其有效性。

(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缺少挡土墙稳定计算功能的不足。

4 结 语

笔者团队充分利用BIM技术在水利工程行业设计、展示中的优势,开发了基于Autodesk Revit平台的水闸挡土墙稳定计算插件。该插件不仅实现了高精度、高效率的稳定计算功能,高可视化、低操作难度的人机交互,还将工程设计规范与插件相结合,实现了计算结果的实时判别,在弥补Revit缺少水工结构稳定计算功能不足的同时,提高了水利设计人员的工作效率,为进一步扩展BIM技术在水闸结构设计中的应用奠定了良好的基础。

猜你喜欢
二次开发挡土墙控件
市政道路工程常用挡土墙类型探析
基于.net的用户定义验证控件的应用分析
西门子Operate高级编程的旋转坐标系二次开发
浅谈Mastercam后处理器的二次开发
浅谈选厂常见挡土墙设计
关于.net控件数组的探讨
西门子Easy Screen对倒棱机床界面二次开发
地震作用下加筋挡土墙稳定性分析
建渣土工袋挡土墙室内模型试验
ANSYS Workbench二次开发在汽车稳定杆CAE分析中的应用