2 从“HelloWorld”入手

在欧特克的官方网页上有个叫《My First Plug-in Training》的项目,号称可以让一个完全没有编程基础的人照着做出一个插件来。我快速浏览了一下,觉得这个例子还是太复杂了,虽然一步一步依葫芦画瓢能做出来,但最后能有多少收获就不好说了。所以,我决定还是先参考官方在线帮助的例子,从大家都喜闻乐见的“HelloWorld”入手,自己摸索一下。

2.1 先来看下具体步骤

1、启动Visual Studio,新建项目,在“模板”里选择“Visual C#”→“类库”,在下方的名称栏填上HelloWorld。好了以后点确定,可以看到程序自动生成了相关的代码。

2、添加引用,在引用管理器中选择“浏览”,在Revit安装目录下找到RevitAPI.dll和RevitAPIUI.dll,把这两个文件分别添加到项目中。然后记得把上述两个引用的“复制到本地”属性改为False,否则你编译会生成一大堆没什么用的东西。因为我们做的是插件,不可能脱离Revit程序本身来运行的。

3、把默认生成的“using……”代码块只留下
using System;
在后面加上
using Autodesk.Revit.DB;
using Autodesk.Revit.UI;

4、在默认生成的public class Class1{}前面加上
[Autodesk.Revit.Attributes.Transaction(Autodesk.Revit.Attributes.TransactionMode.Manual)]

5、把默认生成的public class Class1{}改成
public class Class1: IExternalCommand{}

6、在public class Class1: IExternalCommand{}内部添加
public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements) { }

7、在public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements) { }内部添加
TaskDialog.Show("Demo", "Hello World!");
return Result.Succeeded;

8、完成的代码应该是这个样子:

 1 using System;
 2 using Autodesk.Revit.DB;
 3 using Autodesk.Revit.UI;
 4
 5 namespace HelloWorld
 6 {
 7     [Autodesk.Revit.Attributes.Transaction(Autodesk.Revit.Attributes.TransactionMode.Manual)]
 8     public class Class1: IExternalCommand
 9     {
10         public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
11         {
12             TaskDialog.Show("Demo", "Hello World!");
13             return Result.Succeeded;
14         }
15     }
16 }

View Code

9、保存全部文件。在项目属性里把“生成”→“目标平台”由Any CPU改成x64(省略这步的话编译时会出现警告)。检查无误后生成类库,并记下输出窗口中的文件位置。

10、添加一个文本文件,输入以下内容:

 1 <?xml version ="1.0" encoding ="utf-8" standalone ="no"?>
 2 <RevitAddIns>
 3   <AddIn Type="Command">
 4     <Assembly>{类库的路径(含文件名)}</Assembly>
 5     <AddInId>{Guid}</AddInId>
 6     <FullClassName>HelloWorld.Class1</FullClassName>
 7     <Text>HelloWorld</Text>
 8     <VendorId>NAME</VendorId>
 9   </AddIn>
10 </RevitAddIns>

View Code

注意第4行和第5行都要根据实际情况填写。第4行就是上一步记下的文件位置,第5行可以在ssemblyInfo.cs文件里找到。

11、把这个文本文件重命名为“HelloWorld.addin”,复制到Revit插件目录下。Win7/8的位置是%programdata%\Autodesk\Revit\addins\201*,其中“%programdata%”一般是“C:\ProgramData”(系统装在C盘),“201*”是Revit的版本。

12、启动Revit,在“附加模块”→“外部工具”的下拉箭头处找到“HelloWorld”,执行后,可以看到弹出对话框,成功。

2.2 接下来把代码逐行过一遍

2.2.1 先看程序本身

第1行,使用system命名空间。这个是默认生成的。其他暂时用不到所以删掉了。

第2行,使用Autodesk.Revit.DB命名空间。这个是自己添加的,要先添加引用RevitAPI.dll。

第3行,使用Autodesk.Revit.UI命名空间。这个是自己添加的,要先添加引用RevitAPIUI.dll。

“using+命名空间”的用法,可以粗略的理解为类似于Java和Python中的“import+包名称”的作用;也可以把各级命名空间想象成文件系统中的树状目录,那么就是类似于环境变量中“path”的作用。

第5行,声明一个叫HelloWorld的命名空间,没什么可说的。

第7行,定义Transaction特性。这个特性源自Autodesk.Revit.Attributes.TransactionAttribute。该特性有三种模式:Automatic(自动)、Manual(手动)和ReadOnly(只读)。因为该特性没有默认值,所以必须显式指定。在本例中,模式可任选。

如果觉得这句太长,可以在“using……”代码块加上using Autodesk.Revit.Attributes;

这句就可以写成[Transaction(TransactionMode.Manual)]

第8行,声明一个类,继承RevitAPI的IExternalCommand(外部命令)接口。

第9行,重载Execute()函数。可以把它粗略的理解为IExternalCommand接口类的主函数或入口函数,类似于Java里的main()函数那样的东西。这个函数被Autodesk.Revit.UI.Result限制,所以必须有返回值。

第12行,显示一个对话框,标题栏显示“Demo”字样,对话框显示"Hello World!"字样。当然显示的文字内容可以自己随便改。

第13行,返回Succeeded。Autodesk.Revit.UI.Result有三个值,分别是Succeeded、Failed和Canceled。如果没有返回Succeeded,Revit会撤销所做的操作。

2.2.1 再看配置文件.addin

第1行,XML头部声明,照抄就是。

第2行和第10行,成对<RevitAddIns>标签,固定格式,表明做的是Revit插件。

第3行和第9行,成对<AddIn>标签,type参数Command表明插件是IExternalCommand(外部命令)类型。相应的还有IExternalApplication(外部应用)和IExternalDBApplication(外部数据应用)类型。

第4行,成对<Assembly>标签,这里写插件所在的路径。

第5行,成对<AddInId>标签,这里写插件的Guid。

第6行,成对<FullClassName>标签,“命名空间”+“类名”。在程序代码里变了的话,这里也要相应改过来。

第7行,成对<Text>标签,插件显示的名字,随你喜欢。只有外部命令类型的插件才需要。

第8行,成对<VendorId>标签,这里写插件供应商的名称。注意要符合Autodesk插件供应商命名标准。没有注册过的,可以填写NAME之类。

以上几项都是必须的。

看上去是不是很简单。那么,下次我再试试稍稍复杂点的。

转载于:https://www.cnblogs.com/bimer/p/7473208.html

踏上Revit二次开发之路 2 从“HelloWorld”入手相关推荐

  1. Revit二次开发从入门到精通学习之路, (含Revit二次开发教程下载)

    Revit二次开发从入门到精通学习之路 Autodesk Joe Ye叶雄进 2. 18 2014    yexiongjin@hotmail.com Revit在国内的应用越来越广泛, Revit ...

  2. 十年盘点,Revit二次开发这条路不易

    年底盘点Revit插件研发企业的不同发展形态,有停止更新的,有放弃的,有继续在大力研发的.相比AutoCAD当年的格局,看起来Revit插件公司失败概率更高.记得黄亚斌先生说过99%的插件公司会死掉, ...

  3. Revit二次开发从入门到精通学习之路

    Revit的在国内的应用越来越广泛, Revit 2011在速度和功能上有显著的提高,所以现在对Revit应用关注更多.Revit二次开发亦受到大量的关注和评估,许多国内朋友想了解学习 Revit 二 ...

  4. Revit二次开发入门秘籍 01如何入门

    关于入门 我想在开始学习之前大家应该更需要知道如何入门,对比一下我们在学校的学习,我们需要书.老师-书上呢,是有所有的知识点,有重要的,有不重要的,而老师呢,会知道哪些是重点,也就是我们考试要考的,教 ...

  5. Revit二次开发入门捷径_升维学习、降维打击

    问题 入门Revit二次开发有捷径吗? 答案 量子力学:有也没有.(皮一下:叠加态) 没有:目的地只有一个,路只有一条,学习没有捷径. 有:虽然路只有一条,但我们可以借助交通工具,缩短时间就是捷径. ...

  6. 原创-含泪贡献:Revit二次开发,从零开始,利用socket实现Revit的远程调用,读取rvt文件信息

    我是一名Java开发程序员,在一家建筑企业担任软件开发工作.大家都知道,建筑行业离不开画图软件,像CAD.Revit等画图建模软件时常使用.一个月前,接到领导的一个任务,要求提供一个接口,供用户远程调 ...

  7. python revit二次开发_Revit怎么二次开发?Revit开发问题汇总

    现如今Revit软件还无法满足所有领域的工作需求,然而其二次开发技术能够适应用户个性化的定制要求,来扩展软件功能或对其功能进行修正. 为了更大程度上方便二次开发,开发商将集成的数据库函数封装到Revi ...

  8. Revit二次开发_1.过滤器笔记篇

    Revit二次开发_1.过滤器笔记篇 前言 对象分类 过滤方法 前言 最近在用过滤器功能,先按照教程做了筛选墙,再自己做了筛选常规模型的功能,发现有点不一样,问题在于筛选这些Elements的时候没弄 ...

  9. revit二次开发之教学视频

    一.背景 刚入门revit二次开发的小伙伴,很多是零基础的工程人员,为了解决这个问题,博主做了revit二次开发的一系列教学视频(包括C#基础与revit二次开发两个模块),来帮助大家更好的入门. 二 ...

最新文章

  1. 学好机器学习,这里有想要的一切
  2. java词类_英语词类浅谈
  3. 阿里云2011.9.17招聘会笔试题
  4. brew mysql 添加修改mysql配置
  5. egg 编码规范_Egg 框架简述 (仅学习)
  6. bigdecimal 判断是否为数字_C语言判断字符串是否为回文
  7. 人到六十岁还是黑头发好吗?
  8. git——远程仓库基本操作与冲突解决
  9. iphone4刷android,iPhone4如何刷机
  10. DPI和DFI带宽管理技术分析
  11. 内齿轮铣齿机铣削动力头的设计(论文+CAD图纸)
  12. 全球及中国吊臂汽车起重机行业研究及十四五规划分析报告
  13. 夏至日环食奇趣天象将在中国天空上演 错过再等十年
  14. 我的世界html启动器资源,我的世界hmcl启动器mod
  15. 智慧农业,数字农业经济效益,社会,经济,生态,运行
  16. 配置文件的rc的由来
  17. 日志门面技术(3):JCL(Jakarta Commons Logging)
  18. html——input标签设置不可编辑属性
  19. DIV+CSS浏览器兼容问题
  20. 计算机基础16秋在线作业,答案计算机基础16秋在线作业四

热门文章

  1. 数据项目总结 -- 深圳租房数据分析
  2. sangfor EDR漏洞(CNVD-2020-46552)复现
  3. Master shiny learning log
  4. java分苹果_java 分苹果
  5. IOS开发—IOS绘制圆,直线,弧线,矩形,扇形,三角形,贝塞尔等图形
  6. 红酒进口报关环节介绍,进口通关时效说明:
  7. 用Python找出了删除自己微信的所有人并将他们自动化删除了
  8. 大话西游经典台词2-重温经典
  9. 公司邮箱格式申请注册哪个好?
  10. 社会信用代码 验证php,PHP校验信用卡号实例