基于Revit平台二次开发模式的研究

2019-03-27 11:33
土木建筑工程信息技术 2019年1期
关键词:二次开发插件复杂度

(青岛理工大学 土木工程学院,青岛 266033)

Revit是BIM系列软件中应用最广范的一款基础建模软件,基于Revit平台进行二次开发是完善BIM技术的一项重要举措。目前基于Revit平台有两种主流开发模式,第一种是在Visual Studio 平台上用编程语言(C#或者VB.NET)进行二次开发形成.dll文件,并以插件的形式载入到Revit的附加模块中,本文把这种模式称之为 “Plugin+Revit”开发模式[1];另一种是利用开源插件Dynamo直接在Revit平台上进行二次开发,通过连接作用不同的Dynamo节点实现开发功能,本文把这种模式称之为“Dynamo+Revit”开发模式。本文对这两种模式进行了详细介绍与分析研究。

1 “Plugin+Revit”开发模式

1.1 “Plugin+Revit”模式的开发现状

Revit作为一款普适性三维建模软件,其全面准确的建筑数据和强大的建模工具为建筑信息化打下良好基础。在Dynamo还未与Revit结合之前,人们常说的Revit二次开发即指“Plugin+Revit”开发模式。

通过Autodesk公司提供的RevitAPI,软件商、设计方、施工方都能开发便利自己的插件。自RevitAPI开放以来,短短十几年,国内外基于Revit平台开发了一大批面向建筑行业的实用插件,如美国CSI公司研发Revit与结构计算软件ETABS互导的CSIxRevit插件、Trelligence公司直接在Revit Architecture基础上自主研发出用于在建筑规划设计时根据用户需求更新规划的Affinity软件[2]、美国CTC公司的BIM管理套件以及印度ProtoTech Solutions公司的OBJ Exporter For Revit插件。我国基于Revit的二次开发相对较晚,东经天元公司于2011年开发出 R-Star CAD插件标志着我国 Revit 二次开发进入成长阶段,同年北京盈建科软件有限责任公司开发了盈建科建筑结构设计软件系统( YJK)[3]。其后Revit二次开发在我国迎来了百花齐放的局面,出现了一大批优秀的Revit二次开发插件。

结合对国内外Revit二次开发插件的研究,Revit插件可分成五类:族库类、设计类、翻模类、综合类、互操作类。各类插件的功能以及代表性插件如表1。

1.2 “Plugin+Revit”开发流程

“Plugin+Revit”模式开发流程一般为:在Visual Studio 2017中新建项目,创建类库;在项目中添加RevitAPI装配文件RevitAPI.dll和RevitAPIUI.dll,在程序的头部添加在程序编写过程中用到的命名空间引用,如using Autodesk.Revit.UI、using Autodesk.Revit.DB等;引用外部命令接口IExternal Command,重载Execute()方法,编写Execute代码并经过实验调试实现既定功能[1]。 开发流程见图1。

表1 Revit插件类型

插件类型插件功能代表性插件族库类提供Revit族库下载、管理构件等功能构件邬、型兔、NBIMer族助手、族库大师、isBIM族立方设计类在建筑、结构、设备设计时具有辅助作用鸿业科技BIM协同设计平台BIMspace、里正BIM翻模类在Revit软件中基于CAD图纸智能化建模海颐威模盒、翻模大师综合类一个内置的管理系统,具有多种功能的插件合集呆猫、ISBIM、橄榄山互操作类使Revit与其他建筑专业软件相互导入导出Lumion Collada Ex-porter、IFC2017、鲁班万通revit

2 “Dynamo+Revit”开发模式

2.1 “Dynamo+Revit”模式开发现状

从Revit2014开始,Dynamo以Revit附加模块的形式出现,近几年Revit版本不断升级,Dynamo的稳定性也逐步加强。在Revit2017中Dynamo已成为Revit的内置功能,其启动位置移到管理菜单,成为系统管理的重要工具。Dynamo增加了Revit的“易用性”,它打破了建筑与计算机行业的行业壁垒,使建筑从业人员可以利用Dynamo基于Revit平台开发所需功能,实现了“专业的人做专业的事”,而不用通过编程人员进行插件定制[4-5]。

“Dynamo+Revit”开发模式已经深入到国内外建筑行业的各个方面。在建筑设计阶段,Dynamo可以辅助设计师进行建筑外型设计,实现设计方案的动态模拟;在模型建立阶段,开发出许多快速建模和模型组件自动化的辅助程序,提高了由二维设计图纸到三维模型转化的作业效率[6-7];在管线综合阶段,开发出利用Dynamo快速判断空间净高的辅助程序,直接利用Dynamo判断管线模型是否符合相关规范;在法规检讨阶段,利用Dynamo建立步行距离检讨及空间面积计算等辅助程序,协助我们进行相关法规检讨;对于营建项目而言,通过自行编写Dynamo的图纸创建辅助程序,避免人为输入错误的情况。

图1 “Plugin+Revit”模式开发流程

在桥梁工程中,Dynamo与Revit相互配合能精确定位桥梁各构件位置,并提升构件布置效率;在水利工程中,通过Dynamo进行开发,实现了水工建筑物的三维模型全参数化[8];在隧道工程中,实现了Revit+Dynamo参数化隧道模型的构建[9]。

2.2 “Dynamo+Revit” 开发流程

“Dynamo+Revit” 开发流程一般为:在Revit软件的管理界面中打开Dynamo,新建一个DYN文件;通过搜索节点命令或者联网下载Dynamo软件包找到开发功能所需节点,也可用Python语言在Code Block节点内进行代码编写自制节点;将节点放置在界面空白处,按节点限定条件依次连接;经过多次调试完成Dynamo命令开发。开发流程见图2。

3 两种开发模式的分析与比较

以上两种主流Revit二次开发模式都有自身的优势,为了便于比较这两种模式的异同,我们从开发人员、开发基础、开发复杂度三个方面进行比较分析。

3.1 开发人员

“Plugin+Revit”模式开发人员一般从事计算机软件行业,具有一定的编程基础,开发出的插件大体符合功能要求,但在细节方面并不完全契合建筑人员的需求[10-11],例如橄榄山是我国比较知名的Revit二次开发软件商,但橄榄山插件的功能并不能完全实现其开发本意,单单房间装修命令就出现识别不到墙、重复装修等问题。

“Dynamo+Revit”模式开发人员大多是建筑行业从事人员,能利用Dynamo根据自身需求进行定制级开发,所开发功能完全契合自身需求。Dynamo可以提供Revit内部的功能,让用户在不借助API编程的情况下进行开发[7]。用户能够更加轻松地定制自己的Revit命令,而不用花时间学习代码、编译和调试,Dynamo的这项功能使该模式更加易用,贴合实际。

图2 “Dynamo+Revit”开发流程

3.2 开发基础

“Plugin+Revit”模式需要美国微软公司的开发工具包系列产品Microsoft Visual Studio配合,以RevitAPI为基础,通过专业编程人员进行代码编写,实现所需功能。Revit虽然不是BIM系列软件中最符合建筑人员使用习惯的软件,但其普及度最高的原因就是能够提供开放的API,在“Plugin+Revit”开发模式中,RevitAPI是打通各款建筑专业软件信息交流的重要工具,借助RevitAPI可以把琐碎的建模工作自动化,将其他软件的功能集成或连接到Revit中,这样在一个平台上就能完成几乎所有的功能。但该模式在Visual Studio平台上进行代码编写,并不能将开发效果实时反映到Revit中,一个命令的开发需要经过多次调试修复BUG,开发过程十分繁琐。

“Dynamo+Revit”模式直接在Revit中进行开发,其开发基础是Dynamo节点库,该模式能够将开发效果直观地反映到Revit中,若将某节点关联到构件上,通过调节该节点,可以在Revit中看到构件属性的变化。Dynamo除自带节点库外,还提供联网下载节点包与自制节点的功能。在Dynamo程序界面上有软件包命令栏,集成搜索、管理、发布软件包等功能,通过发布软件包命令可以上传自定义Dynamo节点包,通过搜索软件包命令可以联网搜索并下载国内外Dynamo研究人员无偿发布的节点包,其涉及建筑、道路、桥梁等多个专业。当Dynamo自带节点库与联网节点库中没有所需节点时,开发人员可以在“Code Block”节点中直接编写DesignScript代码,自制功能节点。Dynamo的开源性,促进了“Dynamo+Revit”开发模式的发展,但由于Dynamo节点包保密性差,不如编程的封装性好,在一定程度上限制了该模式的发展规模。

3.3 开发复杂度

两种模式开发基础不同,导致开发难度有很大差异。因Dynamo操作容易,逻辑简单,只要根据具体思路进行即可,实现一个命令所需节点数的多少并不完全代表该命令的复杂程度;而代码编写逻辑复杂,代码行数随命令复杂程度的升高而增加,且更加容易出现BUG,调试工作困难。下面通过实例对两种开发模式的复杂度进行比较。

在CODING(研发流程与管理平台)下载Revit某插件源代码,与Dynamo节点进行比较。记录实现相同命令所需要Dynamo节点数与代码行数,如表2,表格从上到下命令的复杂度逐渐增加,其中“创建楼板面层”与“创建墙体面层”两个命令复杂度基本相同。

表2 实现相同命令所需要Dynamo节点数与代码行数

命令所需Dynamo节点/个所需代码/行获取墙长度320过滤结构柱242创建楼板面层27310创建墙体面层45320天正转Revit75800

由表2可知,代码行数与命令的复杂程度大致呈线性关系,而Dynamo节点数并不完全遵循此规则,如“过滤结构柱”比“获取墙长度”复杂,但所需Dynamo节点却比“获取墙长度”多1个;“创建楼板面层”与“创建墙体面层”两个命令复杂度基本相同,但所需Dynamo节点数却相差18个。从逻辑上看,因代码行数成百上千,“Plugin+Revit”模式需要简明的算法与严谨的逻辑,否则会出现差之毫厘谬以千里的效果;“Dynamo+Revit”模式不需要逻辑十分严谨,只要放置的节点与节点之间能够正常连接,就可以实现所需功能。

图3 代码演示

“Plugin+Revit”模式可以将某一方向的很多功能集成于一个系统,以插件的形式载入到Revit选项卡中。实现这种功能进一步增加了该模式的复杂度,但方便使用者进行查找和应用开发功能[12]。“Dynamo+Revit”模式只能以DYN文件的形式运行开发功能,每次使用需重新关联Revit构件,该模式降低了开发复杂度,但在一定程度上限制了所开发功能的使用范围。

4 案例分析

Revit不能实现批量添加楼板的功能,通过两种模式对该功能进行开发。

使用“Plugin+Revit”模式编写代码310余行,截取部分代码如图3。该模式需要定义多种方法,比如定义获取房间列表方法为public ListRoomList(Document doc)、定义获取楼板列表方法为private ListFloorList(Document doc)及定义显示框方法private ListShowDialog(ListroomList,ListfloorTypeList),以上方法皆被图3中显示代码调用,内部代码及其他方法不做赘述。代码编写完成后,制作插件加载文件(扩展名为addin),将其放到programdata/autodesk/revit/addin/201* 目录下,打开Revit后就可以在工具栏中找到此命令。

使用“Dynamo+Revit”模式连接节点27个,其思路为:选中所有房间→按条件过滤房间→提取房间轮廓与标高→处理轮廓与标高数据→选择楼板类型→生成楼板。实现该功能所需节点在已发布的节点包中均能找到。

通过用两种模式对批量添加楼板功能进行开发,可以发现“Plugin+Revit”模式的缺点是开发时间长,对编程能力要求高,容易出现BUG且调试困难,无法针对个人需求提出解决方案;优点是封装性能好,使用开发命令方便。而“Dynamo+Revit”模式优缺点正好与之相反,Dynamo为建筑人员提供了一把通向编程的钥匙,大大加强了Revit的适用性,建筑人员能利用Dynamo根据自身需求进行定制级开发,所开发功能完全契合自身需求,所以“Dynamo+Revit”模式可以辅助解决专业问题。

5 结论

综上,“Plugin+Revit”模式更适用于开发具有系统性、普遍性的功能,是解决BIM模型一模多用的关键,适合软件公司进行商业化开发;“Dynamo+Revit”模式更适用于开发专业性的功能,使BIM模型更加贴合设计意图,符合土建专业的要求,是实现BIM模型落地的关键,适合建筑与土木工程专业人员进行内部开发。

BIM作业若真正要产生价值,投入的时间与成本相当可观。但是合理进行二次开发,选择恰当的开发模式,既可以提升Revit的建模效率,又可以实现BIM模型的一模多用。这就打破了BIM产生的价值与花费成本间的正比例关系,一方面可以降低建模与出图的人力和时间的投入;另一方面又可以更深入地应用模型中的信息,提供更加务实的BIM拓展应用点,这便是Revit二次开发的价值所在,也是BIM革命的核心所在。

猜你喜欢
二次开发插件复杂度
自编插件完善App Inventor与乐高机器人通信
基于OSGi的军用指挥软件插件机制研究
非线性电动力学黑洞的复杂度
浅谈Mastercam后处理器的二次开发
一种低复杂度的惯性/GNSS矢量深组合方法
例谈课本习题的“二次开发”
求图上广探树的时间复杂度
基于jQUerY的自定义插件开发
某雷达导51 头中心控制软件圈复杂度分析与改进
ANSYS Workbench二次开发在汽车稳定杆CAE分析中的应用