APP下载

基于Revit开发创建自定义插件

2018-01-08刘子朋张晓东丁义南武思思王洋

智能建筑与智慧城市 2017年12期
关键词:选项卡二次开发插件

刘子朋,张晓东,丁义南,武思思,王洋

(石家庄铁道大学)

基于Revit开发创建自定义插件

Creating Custom Plug-in Based on Revit Development

刘子朋,张晓东,丁义南,武思思,王洋

(石家庄铁道大学)

为了使国内Revit开发爱好者或软件公司对当前Revit发展状况有个基本的了解,并促进中国的Revit发展,需要对Revit二次开发的入门有一个基本了解。BIM工具的专业设计功能不够完善,这正是Revit二次开发的强项。本地化问题同样可以用定制的符合本地规范和习惯的二次开发工具。作者对Revit二次开发进行入门级别的简单介绍,相信对于Revit二次开发的普及和提高起到积极的推动作用。

计算机辅助设计;Revit二次开发;API;外部命令;外部应用

1 引言

自2005年以来,Autodesk Revit 8.0已经推出,并已开始提供API,这已经持续了超过10年时间。Revit API得到了迅速发展,从一开始的API只能访问文档中的对象[9],到后续的版本中逐渐增加族创建API,文档级事件API,对象过滤API,用户交互的API,动态模型的修正,对该模型的分析结果显示等。API的数量每年都在大幅增加,其功能也越来越强。到2013年,API功能就可以做大量的定制工作。

Revit的用户界面可以自定,但是只能通过Revit API来实现。无法像AutoCAD里面通过界面的功能设置的方式来实现,并能保存成cui文件,发送给别人。只能通过二次开发来实现Revit的自定义界面功能,可以在既有选项卡(外部命令选项卡和分析选项卡)中添加自定义的功能按钮,也可以创建自定义的功能选项卡,布置自己的选项卡样式。Revit 提供的API接口无法对你所创建的选项卡进行隐藏,删除。你只能用字符串的形式来指代自定义选项卡向其中添加Panel。

在Revit被收购之前,原业主Revit技术公司计划提供完整的解决方案,提供了所有的设计者所需要的功能[9]。这种想法对于美国或美国的某些地区是可行的,但是如何满足全球市场并非一家公司所能解决。Autodesk已有多年的全球实践和战略,深知API的重要作用,只有API能解决世界不同的需求和标准[1]。所以被Autodesk收购后,Revit开始封装API供二次发展使用。

2 Revit API功能介绍

近几年随着API的迅速发展和完善,在土木工程建设领域,出现了一大批Revit二次发展人才[4]。自从Autodesk开始提供API以来,已经有10多年的历史了,API不仅数量上逐年增加,而且变得越来越多样化。截至目前,API已经能够满足一般建筑工程的需要,并且随着BIM理念的推广应用,通过Revit二次开发实现,Revit软件会更加快捷,功能更加强大[4]。

二次开发技术能够在软件应用方面提供以下功能:

①访问模型的图形数据和参数数据;

②创建插件来完成对UI的增强;

③创建插件来完成一些对重复工作的自动化;

④执行一切种类的BIM分析和自动创建项目文档;

⑤集成第三方应用来完成诸如链接到外部数据库、转换数据到分析应用等[4]。

Revit API可以访问每个Revit功能,可以实现集成的分析和可视化应用建筑信息模型,用户可以根据需要定制相应的Revit功能的延伸,作为软件开发人员也可以实现随时访问所有信息的组件模型,组件的属性查询、更改和创建一个新组件[4]。

3 开发流程

Revit的开发基本流程具有统一的基本架构,首先基于C#创建一个类库(Class Libriary)工程,添加两个参考文件Revit API.dll和Revit APIUL.dll到类库项目。添加两个引用文件时,将命名空间引用添加到程序中并输入程序的内部设计[8]。第一步是将属性添加到开发命令类中,并新建一个派生类IExternal Command,第二步重载Execute()方法,第三步在Execute()函数中通过编写的代码实现需要的功能。开发流程见图1。

图1 Revit开发流程

4 API开发方式

Revit二次开发的调用方法主要有两种:方法一是简单方式,也是最常用的方式,是通过外部命令(External Command),添加一个Revit命令,通过软件开发插件(SDK)工具包提供的插件加载功能[10],将用户开发的插件加载运行即可;另一种是高级方式,通过加载外部应用(External Application)的方式[10],外部应用随着Revit软件一起启动和关闭,同时在Revit面板中添加按钮。

4.1 简单方式

在外部命令Tab里面的外部工具下拉列表中显示你的命令名字。用户点击可以启动该命令。方法是制作一个插件加载文件(扩展名为addin),把这个文件放到指定的目录下。这个文件定义了在Revit启动的时候需要加载哪些dll中的哪些命令。优点是方案简单易行。配置一个文件就好了;弱点是如果功能很多,组织的就不太好,用户使用起来不方便。

1)新建项目(Create a New Project)

Visual Studio编写C#程序的第一步是选择一种项目类型并创建新的类库。从“文件”菜单选择新建>项目。从安装的样板框架中,单击Visual C#。在右边框架内,单击类库(如图2)在名称字段,键入“Hello World”作为项目名称。单击确定。

2)添加引用(Add References)

解决方案资源管理器窗口如果未能打开,可以在“视图”菜单中选择解决方案资源管理器。在解决方案资源管理器中,右键单击引用以显示上下文菜单。在上下文菜单中,单击添加引用,如图3所示。出现“添加引用”对话框。在添加引用对话框中,单击浏览选项卡。找到Revit安装的文件夹,然后单击RevitAPI.dll。单击确定以选择.dll并关闭对话框。RevitAPI会出现在解决方案资源管理器引用树中。

图2 Visual Studio 2010新建项目界面

图3 添加引用RevitAPI.dll、RevitAPIUI.dll

注意,对于新项目,RevitAPI的“复制本地”属性应始终设置为false。这会节省硬盘空间,并避免Visual Studio调试器不知道使用哪个DLL副本。右键单击RevitAPI.dll,选择属性,并将“复制本地”设置从true(默认设置)改为false。对RevitAPIUI.dll重复上述步骤。

3)添加代码(Add Code)

添加以下代码以创建插件

每个Revit插件应用程序都必须有一个进入点类来实现IExternalCommand接口,且必须实现Execute()方法。插件程序的进入点是Execute()方法,类似于C#语言中的Main()方法。插件程序进入点类的定义包含在一个程序集内。

4)构建程序(Build the Program)

在完成代码之后,必须构建文件。从“构建”菜单单击生成解决方案。若构建输出出现在输出窗口中,则说明项目编译已成功,如图4所示。

5)创建.addin清单文件(Create a.addin Manifest File)

HelloWorld.dll文件出现在项目输出目录中。在Revit中调用该应用程序,则需创建一个清单文件将它注册到Revit。要创建清单文件,可用文本编辑器新建一个文本文件。添加代码如下所示。

图4 输出窗口

6)调试插件(Debug the Add-in)

在调试模式下运行程序可使用断点暂停程序,以便检查变量和对象的状态。如果出现错误,则可以检查程序运行的变量,来推断为什么不是预期的值。在“工具”菜单中,选择附加到进程(如图5所示),在可用进程中选择Revit.exe然后点击附加。在Revit软件附加模块中选择外部命令开始调试。

4.2 高级方式

在命令栏上生成你自己的按钮,可以显示名字,图片,可以按照你希望的方式组织你所有的按钮位置和分组关系。功能区面板可以添加到插件或分析选项卡,也可以添加到一个新的自定义功能区选项卡,仅在必要时才使用此选项。为确保标准Revit功能区选项卡可见,自定义功能区选项卡上限数量强制为20个。这个是最完美的解决方案。

1)新建项目(Create a New Project)

在Visual Studio中使用类库样板创建C#项目。键入AddPanel作为项目名称。按前一个外部命令中的说明,添加对 RevitAPI.dll和 RevitAPIUI.dll的 引用。添加PresentationCore参考,添加WindowsBase、System.Xaml引用,如图6所示。

2)添加代码(Add Code)

添加面板项目不同于Hello World项目,因为在Revit运行时它是自动调用的。此项目使用IExternalApplication接口。IExternalApplication接口包含两个抽象方法,即OnStartup()和OnShutdown()[5]。

图5 设置调试环境

图6 添加对RevitAPI.dll、RevitAPIUI.dll等的引用

3)构 建 程 序(Build the Application)

在完成代码之后,构建应用程序。从“生成”菜单单击生成解决方案。若构建输出出现在输出窗口,则说明项目编译成功。addPanel.dll位于项目输出目录中。

4)创建.addin清单文件(Create the .addin Manifest File)

如果在Revit中调用应用程序,则需要创建清单文件注册到Revit。用文本编辑器创建文本文件。在文件中代码如下:

5)调试(Debugging)

启动调试,生成项目,然后运行Revit。如图7所示一个新的Hello World功能区面板显示在插件选项卡上,带有小火车头图标的是生成的按钮。单击Hello World运行程序会显示如图8所示对话框。

图8 Hello World对话框

5 结论

目前,建筑业正处于技术变革的时期,如何应对这一变化,进入数字化三维设计的时代,将关系到企业的未来发展。如果能通过BIM定制开发,尽快实现全方位的专业三维设计和BIM合作,将大大促进国内外工程设计院的业务发展。

BIM技术的应用可以提高设计质量,已成为业界的共识。在这个阶段,使用Revit代替AutoCAD全套施工设计是不现实的,BIM技术对施工图设计是比较适合验证和深化设计。Revit建模效率低、工作量大,严重阻碍了BIM技术的发展。通过开发Revit插件,它是提高建模效率的可行方法之一。作者对有二次开发兴趣的人进行入门级别的

图7 将新功能区面板添加到Revit

简单介绍,希望起到抛砖引玉的作用,相信对于Revit二次开发的普及和提高起到积极的推动作用。

[1]袁明伟. 基于BIM技术的结构设计方法研究[D].沈阳:辽宁工业大学,2017.

[2]吴明辉. 基于BIM的弹性支承块式无砟轨道三维数字化设计研究[D]. 石家庄:石家庄铁道大学,2016.

[3]徐迪. 基于Revit的建筑结构辅助建模系统开发[J]. 土木建筑工程信息技术,2012,4(03):71-77.

[4]柳娟花,李艳妮. 基于BIM的虚拟施工技术应用探究[J]. 电脑知识与技术,2011,7(29):7266-7268.

[5]张艺晶,杜守军,赵坤,张鹏飞. Revit软件二次开发和项目上的应用研究[J]. 河北企业,2015,(11):121-123.

[6]樊永生. 建筑信息模型的空间拓扑关系提取和分类研究[D].西安:西安建筑科技大学,2013.

[7]李桐. Revit MEP管道自动标注及优化布置算法的研究[D].西安:西安建筑科技大学,2016.

[8]邢振业. 基于混凝土结构耐久性影响因素的BIM研究[D].西安:西安建筑科技大学,2016.

[9]Revit二次开发现状(2009)- CAD定制乐园[DB/OL]-博客频道-CSDN.NET-《网络(http://blog.csdn.net)》

[10]韩宇. 基于BIM技术的建设项目施工阶段动态资源管理研究[D].兰州:兰州交通大学,2015.

LIU Zi-peng,ZHANG Xiao-dong,DING Yi-nan,WU Si-si,WANG Yang

(Shijiazhuang Tiedao University)

In order to enable domestic Revit development enthusiasts or software companies to have a basic understanding of the current development situation of Revit, as well as promote the Revit in China, we need a basic understanding of the basics introduction of secondary development. The professional design function of BIM Tool is not perfect, however, this is the strengths of Revit secondary development.Localization issues can also be tailored to local specifications and custom-compliant secondary development tools. The author makes a simple introduction for those who are interested in secondary development, the author hopes this entry level introduction can play a role as throw a sprat to catch a whale. The author believes that this introduction can play a positive role in promoting the popularization and improvement of Revit secondary development.

computer aided design; Revit secondary development; API; external commands; external application

猜你喜欢

选项卡二次开发插件
自编插件完善App Inventor与乐高机器人通信
PPT中巧作形意信息图
巧用Word替换纠正角标跑偏
基于OSGi的军用指挥软件插件机制研究
浅谈Mastercam后处理器的二次开发
禁用一切 优化无限
例谈课本习题的“二次开发”
基于jQUerY的自定义插件开发
ANSYS Workbench二次开发在汽车稳定杆CAE分析中的应用
关于平面设计软件二次开发的分析