笔者曾经回顾了20世纪80年代之前早期计算机辅助设计(CAD)软件的发展历史,参见(如果你每天都用AutoCAD画图,你真的了解CAD的历史吗?)。 20 世纪 80 年代,随着 Apple 和 IBM 推出自己的个人电脑,单用户计算机开始蓬勃发展。 同时,电子CAD、机械CAD和建筑CAD又分为不同的行业。 也正是在这个时期,约翰·沃克基于一个售价1000美元、可以在PC上运行的CAD程序的想法,于1982年4月创立了Autodesk,推出了后来工程师们几乎每天都在使用的AutoCAD。 在引入 AutoCAD 之前,大多数商业 CAD 程序都在大型计算机或小型计算机上运行,每个 CAD 操作员(用户)在单独的图形终端上工作。 AutoCAD取得了巨大的成功,迅速占领了二维绘图领域的广阔市场。 它一度成为CAD的代名词,DWG文件格式也成为二维图形事实上的标准。
我国其实很早就开始了CAD系统的自主研发。 “七五”到“九五”期间,一些高校和科研单位开发了一些CAD软件,但商品化和市场化都做了。 贫穷的。 1991年,随着时任国务委员宋健提出的“扔掉画板”的口号,我国CAD产业开始蓬勃发展。 国内众多CAD企业如雨后春笋般涌现。 最有代表性的是CAS PICAD。 、高华CAD、凯木CAD、忠旺CAD等。 此时,AutoCAD也开始进入中国市场。 此时,国内CAD行业的发展大致可分为两个方向。 一是坚持国产CAD系统自主开发,二是基于AutoCAD进行二次开发。
AutoCAD作为通用绘图软件,没有足够的能力来掌握特定行业设计的具体细节。 主要表现在行业中经常使用的图形每次都要重新绘制,这就需要将图形中的这些基本图元或块设置为基本元素以供复用; 另外,早期的结构计算软件中模型的建立和结构图的绘制是分开的,计算时需要重新建模,造成大量的重复工作。 而且,很多早期的数值模拟软件都没有比较完整的前处理和后处理文件。 结构输入和结果输出仍然采用*.dat等文本文件格式。 这在 ABAQUS 中也可以看到。 ABAQUS的CAE仍然无法支持所有关键字,并且某些功能需要修改输入文件才能使用。 从这两点来看,基于通用CAD程序的二次开发有现实的需求,也有广阔的市场。
所谓“二次开发”是指由熟悉产品设计、掌握计算机应用技术的人员根据产品设计的具体要求在一定的软件平台上进行软件的应用开发。
自第一版软件推出以来,AutoCAD也相应推出了二次开发工具。 并且随着AutoCAD技术的不断发展和新版本的不断推出,其相应的二次开发技术也取得了长足的进步。 AutoCAD的几种二次开发工具经历了三个时代,分别是:AutoLISP、ADS、DSL、ADSRX、ObjectARX、ActiveX、VBA、Visual Lisp和AutoCAD.NET。 其中,AutoCAD.NET仅适用于2006以上版本,通过二次开发,可以针对特定领域扩展AutoCAD的功能,方便外部程序访问DWG程序中的数据进行数值计算软件建模。
AutoCAD的开放API允许其他公司或个人基于它进行二次开发,这可以说是一个非常成功的策略。 它让Autodesk能够专注于自己软件的开发,同时将一些细分领域留给其他专业公司,从而使AutoCAD能够快速适应市场需求,快速占领市场。 这从Autodesk的市场行为就可以看出。 在autoCAD与国产CAD的竞争中,培养了一大批二次开发人员,开发出更符合国内设计师和工程师需求的插件,克服了刚进入中国市场的挑战。 “水土不服”的问题占据了中国CAD市场的大部分。
浩辰成立于1992年,是最早基于AutoCAD进行二次开发的公司之一。 现在还有知名的AutoCAD二次开发商,1994年成立的天正公司(我想大家都听说过天正CAD),还有1998年成立的广联达、2000年成立的Sver和2001年成立的鲁班等。
2.Revit API及Revit二次开发
在开始讲Revit二次开发之前,还是有必要先了解一下Revit软件的发展历史。 Revit最初由成立于1997年的Charles River Software开发。Charles River Software于2000年更名为Revit Technology Corporation,并于2002年被Autodesk收购。2013年之前,Revit Structure、Revit MEP和Revit Architecture是分开的。 2013年,不同专业合并为一款Revit软件。 在Revit模型中,所有图纸、2D视图、3D视图和明细表都是同一基本建筑模型数据库的信息表示。 有观点认为,BIM时代的Revit相当于2D CAD时代的AutoCAD。
在 Revit 被收购之前,它没有 API。 收购后,Autodesk开始提供API接口供Revit二次开发。 API 是应用程序编程接口的缩写。 Revit API 是在 Revit 产品的基础上构建的。 它是一个类库,需要在 Revit 运行时工作。 Revit API 允许用户通过任何 .NET 兼容语言进行编程,第三方开发人员可以通过 Revit API 将其应用程序集成到 Autodesk Revit 中。 使用API,我们可以创建插件来增强UI、自动执行一些重复性任务、导入外部数据以创建单位或设置参数值、连接到外部数据库、将数据转换为分析应用程序、访问模型参数数据等。功能。
Revit的二次开发主要是生成一个可以完成某些功能的动态链接文件dll文件(类似于exe文件,但没有命令执行的起点)。 dll文件可以链接到主程序。 Revit二次开发一般可以分为三种类型:外部命令(用于执行某种操作)、外部应用程序(用于创建选项卡)和数据库级外部应用程序。 (需要注意的是,进行Revit二次开发时,Revit SDK不是必须的)。
3.Revit二次开发步骤
下面以创建外部命令为例来说明二次开发的步骤。
(1). 创建一个新的类库/类库项目
(2)。 引用Revit界面定义文件RevitAPI.DLL和RevitAPIUI.DLL,并将RevitAPI和RevitAPIUI的Copy Local属性设置为False(以避免生成dll文件时复制许多相关的类库)。
Revit API.dll 程序集包含用于访问 Revit 中数据库级应用程序、文档、元素和参数的方法,以及 IEXternalDBApplication 接口和其他相关接口。
Revit APIUI.dll 程序集包含用于操作和自定义 Revit UI 的所有接口,包括:IEXternalCommand 相关接口、IExternalApplication 相关接口、选择、菜单类 RibbonPanel、RibbonItem 及其子类。 TaskDialog是一个任务对话框。
(3)。 命名空间引用并为命令类添加属性
首先引入以下命名空间
然后添加以下属性
Transaction主要控制命令的事务行为,是必填属性。 有 3 个值:手动、自动和只读。 一般来说android手机游戏开发从入门到精通,选择Manual意味着你需要在自己的外部命令中创建自己的事务(Transaction)。
再生控制模型修改后是否重新生成。 在早期版本中,它有两个属性,Automatic和Manual,分别表示自动重建和手动重建。 自动重建每次修改模型都会重建模型,这会消耗大量的计算机资源。 现在不再支持自动,只有手动选项。
日志记录控制已执行的进程命令的记录行为。 NoCommandData 不会将 JournalData 的内容写入 Revit 日志。
(4)。 然后创建一个名为MyCommand的类(您可以自由选择名称)。 由于它是实现外部命令,因此新类需要实现 IExternalCommand 接口。 接口是包含非抽象类或结构必须实现的一组相关函数的定义。 IExternalCommand 接口需要实现 Execute() 方法。
执行包含3个参数,1个传入参数commandData,2个输出参数message和elements。
传入参数CommandData即可获取应用程序对象和文档对象。
传出参数消息:传出提示字符串,提示用户存在的问题
传出参数ElementSet:传出对象集合,用户可以查看其中的对象
(5)。 在Execute中添加代码,实现命令功能
完成上述步骤后,您将得到以下代码。 通过build生成对应的dll文件。
4.插件注册
生成dll文件后,需要将*.dll文件注册到revit中,以便revit可以调用。 早期程序开发,add-in是通过修改Revit.ini文件来注册的。 由于修改ini文件非常麻烦,而且所有用户都使用同一个ini文件,如果反复添加或删除add-in,*.ini文件将变得难以维护。 。 从Revit 2011开始,*.addin文件用于注册插件。 *addin 文件是一个 xml 文件。 XML 是一种可扩展标记语言android手机游戏开发从入门到精通,也是一种元标记语言。 所谓“元标签”,就是开发者可以根据自己的需求,定义自己的标签。 .NET 提供了一个 API (RevitAddInutility.dll),可以读取、写入和修改 Revit *addin 文件。 您可以参考SDK安装文件夹中的RevitAddIninin.chm来了解如何调用该API。
对于所有用户都可以使用的插件,需要将*.addin文件放入以下文件中(笔者使用的是revit 2018,如果是其他版本,需要将2018替换为对应版本)
C:\ProgramData\Autodesk\Revit\Addins\2018
下面我截取了Mount Olive和Dynamo的addin文件。 通过两者的比较,我们可以很容易的知道每个xml标签的含义。需要指出的是,AddInId是一个GUID,它可以为*.dll提供唯一标识。 详情请参考以下链接
()。
最后,重新启动Revit。 您可以在附加模块和外部工具中找到我们编写的命令。 单击以获取 helloRevit 对话框(请注意,我使用了加载项管理器)。
5. 后记
从编程的角度来看,如果你有一定的C#面向对象编程基础,那么上手revit API二次开发是非常简单的。 但经过一段时间的学习,可以明显感觉到,了解C#编程只是Revit API开发的基础。 如果想深入学习Revit二次开发,就必须了解Revit各种图元(图元)、参数、各种类型之间的关系。 必须理解和掌握概念。
另外,学习Revit二次开发时,还得考虑开发前景。 目前,早期基于AutoCAD进行二次开发的公司大多已经基于Revit进行二次开发,并推出了相应的产品。 在Revit二次开发时代,也出现了一些新公司,比如Mount Olive。
另一个值得讨论的问题是CAD技术是工程设计行业重要的核心竞争力之一。 “中兴事件”中,美国对华禁运的一项重要内容就是停止提供电子设计自动化软件(EDA)及相关服务。 这也让国人认识到工业软件的重要性。 在AutoCAD时代,基于AutoCAD的二次开发本质上起到了帮助AutoCAD适应国人使用习惯、占领大量国内市场的作用。 这也间接导致了具有自主知识产权的国产CAD软件发展放缓,很多国产CAD最终“消失”。 并且由于是基于AutoCAD进行二次开发,国内相关企业的发展不得不依赖他人,后期的发展也受到限制。 国外CAD公司占领国内市场后,开始逐步压制国内CAD公司的发展。 这一点从浩辰CAD的采访中就可以看出。 现在BIM时代,我们必须思考基于Revit的二次开发是否也会得到与基于AutoCAD二次开发类似的结果。 而且,与二维CAD图形相比,BIM模型中包含的数据量大大增加。 BIM的一个重要发展方向是如何高效、合理地利用BIM中的数据,这需要我们对模型中数据的组织有更深入的了解。 理解。 基于以上两点考虑,我们在进行二次开发时必须更加注重平台的选择和核心技术的积累。
参考
[1]
[2]
[3]Revit 2011 API 开发人员指南()
[4]
[5]
[6]
为了方便大家交流技术,交流行业信息,
请添加我们的“大飞儿”微信3D植物,
加入相关讨论组。
往期回顾 非解构参数化设计工具箱(NSOrigin)正在内测中,敬请期待! AR——让虚拟建筑模型真实呈现超高层支腿桁架的一切。 如何成为一名合格的驻场设计师。 国内外防连续倒塌设计思路总结让结构树生根发芽——树形柱设计实例。 有限结构设计(二)——灵活的时程分析今天不想加班——Autolisp编程入门案例一步步教你如何入门BIM(一)
文章来源:https://m.blog.csdn.net/weixin_39926040/article/details/111196320