作者简介:牛立军(1966—),男,山东滨州人,副教授,主要从事工程项目信息管理、水利工程可视化设计方面的研究工作
摘 要:为弥补传统二维设计方法出图算量复杂、方案比选困难的缺陷,提升Revit 对水利工程设计行业的适应性,通过正向设计需求分析,利用Revit API 和MVC 编程模式,以相关设计规范为依据,对Revit 二次开发
利用经典MVC 编程模式,基于Revit 的应用程序接口——Revit API 对Revit 进行二次开发,实现水利工程BIM 正向设计。
Revit API 是Revit 的应用程序接口,提供了大量命名空间和丰富的函数,给Revit 的二次开发功能定制提供支持,使得不同地区、不同行业用户可以根据自身需求开发Revit 插件,扩展、丰富Revit 的功能[13]。Revit 本身的自有命令主要是针对房屋建筑设计,应用于水利行业时可利用Revit API 添加水利工程需要的水工结构计算、工程量统计、水利工程概预算等功能,实现水利工程正向设计。
MVC(Model⁃View⁃Controller)编程模式将程序模型(Model)、视图(View)和控制器(Controller)分离开来,实现了程序功能模块化[14],便于开发过程中对出图、统计工程量、结构计算、概预算各个模块的调试。应用于水利工程正向设计的MVC 编程模式如图1 所示,可见正向设计区别于“逆向设计”之处在于先假设、后计算判断。假定建筑物尺寸后,控制器获取设计人员假定的数据,代入模型中进行计算,判断计算结果的安全和经济合理性,若满足规范且经济合理,则导出相应设计成果,若不满足规范或经济不合理,则重新假定参数。
代码编译前首先搭建开发环境,添加引用Revit API.dll 和Revit APIUI.dll,添加命名空间;然后设置控制命令的更新模式和事务模式,从IExternal Command或IExternal Application 派生类,重载相应函数,在函数接口中编写代码。
视图(View)即表现层,作为输出数据并允许用户操作的方式,仅为设计人员提供二次开发程序的访问。
控制器(Controller)即控制层,在控制层中处理消息通信、关联关系、事件等内容,供业务模块访问,决定输出的视图,以响应用户请求。开发环境搭建完毕后,在重载函数的接口中编写控制层代码,实现把用户输入的指令和数据传递给业务模型,为模型中的每一种功能提供控制器,选择视图作为用户指令的反馈。
模型(Model)即程序业务逻辑,作为逻辑最复杂的部分,它对应于数据表示和内部数据处理。
在编程软件中编译代码,编译成功后形成dll 文件,针对dll 文件创建后缀为addin 的格式文件,实现插件的注册。启动Revit 运行程序,插件会加载到Revit,检验程序是否满足功能需求。若编译失败或功能不满足需求,则在表现层、控制层、业务层完善代码,直至满足功能需求为止。
选择Visual Studio 作为开发平台、C#作为编程语言。开发环境配置后,采用Winform 界面开发模式,利用TabControl、GroupBox、Lable、TextBox 等控件实现输出设计,利用Button、TextBox、RadioButton 等控件或导入txt 格式文件进行输入设计。
为在Revit 面板中创建按钮,选择控制命令的事务和更新模式为ExternalApplication,新建类库文件,从IExternalApplication 接口派生,重载Onstartup()和On⁃Shutdown()函数,添加PushButton 主程序,即控制层代码。
安徽申众工程科技有限责任公司