1.首先安装好Revit,至于版本是哪个关系不大。具体怎么安装,就不啰嗦了。安装完成后,桌面会有类似这样的图标:

上图是Revit2020和2019的图标,我自己的电脑是安装了两个版本的Revit。

2.找到安装目录下的两个dll文件,你可以把它copy出来,或者直接在C#工程项目中引用它:

3.新建一个C#新项目,我们以.net standard类库进行创建,然后编写一个类实现IExternalCommand接口

using Autodesk.Revit.DB;
using Autodesk.Revit.UI;
using System;namespace UseIExternalCommand
{/// <summary>/// 演示类/// </summary>/// <creator>marc</creator>[Autodesk.Revit.Attributes.Transaction(Autodesk.Revit.Attributes.TransactionMode.Manual)][Autodesk.Revit.Attributes.Regeneration(Autodesk.Revit.Attributes.RegenerationOption.Manual)][Autodesk.Revit.Attributes.Journaling(Autodesk.Revit.Attributes.JournalingMode.NoCommandData)]public class Helloworld : IExternalCommand{/// <summary>/// 执行指令/// </summary>/// <param name="commandData"></param>/// <param name="message"></param>/// <param name="elements"></param>/// <returns></returns>public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements){using (Transaction tran = new Transaction(commandData.Application.ActiveUIDocument.Document, Guid.NewGuid().ToString())){tran.Start();TaskDialog.Show("提示", "工程名:" + commandData.Application.ActiveUIDocument.Document.ProjectInformation.Name);tran.Commit();}return Result.Succeeded;}}
}

4.编译后,将生成bin目录,我们把bin目录的路径copy到下图中:

选择外部工具下的Add-In Manager(Manual Mode),如果你没有外部工具,那么你可以先找一下其它文章,先让Revit把这个插件装上。至于为什么会选择第一项Add-In Manager(Manual Mode),这个是在代码中定义的:

5.好,下面将bin目录的地址copy进去 :

点击“Load"按钮,然后选择bin目录下的编译好的项目dll文件。然后截入得到下面的效果:

6.选中刚刚载入的helloworld,进行点击"Run"的按钮,运行它:

7.如此便可完成Revit的IExternalCommand扩展入门。


除了IExternalCommand外,还有一个相应的叫IExternalApplication,二者的区别在于:

IExternalCommand:是用来执行具体的命令任务的,是执行者。如客户拿着一个菜单跟你说要来份炒粉,那么炒粉这个事情,就你来做。

IExternalApplication:是界面相关,主要用途是显示菜单。如客户拿着一个菜单跟你说要来份炒粉,那么菜单上有什么可以选的,那么这个菜单就是用IExternalApplication来做的。他不做具体的炒粉动作,只负责告诉客户,我有炒粉这道菜,你可以选择。

如果你实现了IExternalApplication,那么就可以类似上图红圈一样,在面板上任意加上你起的名字的菜单 。当点击这个菜单 的时候 ,会自动执行IExternalCommand这个动作。

IExternalApplication是与IExternalCommand关联的,你指定一个菜单的时候,必须告诉Revit点击这个菜单的时候 ,要启动哪个动作(IExternalCommand)。

8.IExternalApplication接口,他的使用时机是在Revit启动时进行初始化加载,关闭Revit的时候进行资源卸载。

namespace Autodesk.Revit.UI
{public interface IExternalApplication{Result OnShutdown(UIControlledApplication application);Result OnStartup(UIControlledApplication application);}
}

OnShutdown:在Revit这个软件关闭时被调用。

OnStartup:在Revit这个软件打开并初始化时被调用,软件打开后,不论你再新建几个Revit工程项目,都不会再第2次执行此方法。

9.介绍.addin文件。

上述操作是在外部工具中加载的。正常一个插件开发出来后,使用者,即我们的用户,他们是不会去用“外部工具”的,所以,我们需要配置一份执行指令以及菜单的.addin文件,具体这个文件的内容,读者可以参考其它文章。

<?xml version="1.0" encoding="utf-8"?>
<RevitAddIns><AddIn Type="Command"><Assembly>UseIExternalCommand.dll</Assembly><ClientId>ac97eb33-31cb-434e-a496-d1c5dd079681</ClientId><FullClassName>UseIExternalCommand.Helloworld</FullClassName><Text>你好世界</Text><Description>Revit二次开发入门。</Description><VisibilityMode>AlwaysVisible</VisibilityMode><VendorId>ADSK</VendorId><VendorDescription>Autodesk, www.autodesk.com</VendorDescription></AddIn><AddIn Type="Application"><Name>菜单</Name><Assembly>UseIExternalCommand.dll</Assembly><AddInId>9db84df0-b5b6-4ffb-ad16-a5c607f5624a</AddInId><FullClassName>UseIExternalCommand.Menu</FullClassName><VendorId>ADSK</VendorId></AddIn>
</RevitAddIns>

10.如上面所示,一个带有执行指令IExternalCommand和菜单功能IExternalApplication的.addin文件就是这样,此时,重新打开Revit软件,将出现如下效果

菜单叫什么名字,是我们在IExternalApplication文件中定义的,具体代码,请参看源码即可。

至于点击“世界”这个菜单按钮,为什么会执行我们的IExternalCommand指令?也是在IExternalApplication中写好的,所以他才触发执行这个指令。

源码下载

下载地址:https://download.csdn.net/download/mazhiyuan1981/12875400

Revit二次开发,新手接入IExternalCommand、IExternalApplication,如何使用它们!相关推荐

  1. Revit二次开发2、RevitAPI、RevitAPIUI及Revit开发三大利器

    Revit二次开发2.开发基础之--RevitAPI.RevitAPIUI及Revit开发三大利器 RevitAPI.dll RevitAPIUI.dll Revit开发三大利器 外部命令(IExte ...

  2. Revit二次开发有几种方式?做Revit二次开发的必看!

    Revit二次开发有三种方式:外部命令(IExternalCommand).外部应用(IExternalApplication)和宏(Macro).下面将简要说明外部应用.宏的开发过程,并着重说明外部 ...

  3. Revit二次开发5、外部事件(ExternalEvent)

    Revit二次开发5.外部事件(ExternalEvent) 外部事件ExternalEvent简介 事件 外部事件 实现步骤 外部事件的实现 实现IExternalEventHandler接口 Ex ...

  4. Revit二次开发——结构模型构件自动扣减

    **Revit二次开发实例--模型自动扣减** 本文章来源于微信公众号 '有福BIM' 有福BIM的第四篇原创文章! 阅读前望知悉: 我晓得各位读者和粉丝中不乏C#二开大佬 有福作为一个二开新手(编程 ...

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

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

  6. Revit二次开发——引用dynamo中的几何库

    前沿 dynamo的几何库其实是非常强大的,如果自己靠着RevitAPI去写还是非常费劲的.所以想引用dynamo的几何库来做一些工作.主要参考的就是这篇文章.Revit二次开发--不开启Dynamo ...

  7. Revit二次开发 获取模型截面线、截面轮廓

    描述 获取Revit模型的截面线.横切面线.截面轮廓. 用途 用于获取模型的截面线.横切面线.截面轮廓. 实现方式 创建视图平面: 从视图平面获取轮廓线: 获取平面标高处的截面线. 效果 示例 /// ...

  8. Revit二次开发环境搭建(Revit 2019+Visual Studio 2017)

    Revit二次开发环境搭建(Revit 2019+Visual Studio 2017) 安装 Revit 2019 Visual Studio 2017 Revit SDK 2019 配置Addin ...

  9. revit二次开发——如何选取元素(revit2016)

    revit二次开发--如何选取元素(revit2016) 这是我在网上和书中比较写出的代码,可能不是太成熟,希望大家多多指教 using System; using System.Collection ...

最新文章

  1. 下载的TXT小说如何去除广告、去除多余空行?
  2. 非侵入式监控php,非侵入式监控PHP应用性能监控分析
  3. 中国省市区json分享
  4. NET Core入门笔记
  5. RS(1)--10分钟了解什么是推荐系统
  6. 大规模天线阵列(massive-mimo)的介绍
  7. mysql 命令 utf8_Mysql 统一设置utf8字符
  8. Gensim word2vec计算多个词之间的相似度
  9. synchronize——对象锁和类锁
  10. 第七章 Git操作 7.1利用gitee提交代码
  11. 关于卸载流氓软件,自己试错的一些结论
  12. (10) IFC中的构件与空间结构(IfcRelContainedInSpatialStructure) (Industry Foundation Class)
  13. js 流文件下载zip压缩包
  14. 一 ROS基础教程
  15. 浏览器中实现深度学习?有人分析了7个基于JS语言的DL框架
  16. 瞧,他的代码,他的内裤
  17. springboot整合全文搜索引擎Elasticsearch | Spring Boot 28
  18. vc驿站视频教程笔记2 ansi 和 unicode
  19. matlab中nabisect函数,数值分析在MATLAB中的实现(M函数文件)
  20. esxi系统重装与vsan恢复

热门文章

  1. 对Rapidly-exploring Random Trees(RRT)路径规划方法的理解
  2. win7下ie6兼容测试之Windows7(win7)下 XP Mode 下载、安装、设置完全图解
  3. 边缘设备、系统及计算杂谈(12)——k8s学习之二
  4. keras+ ctpn 原理流程图
  5. 51单片机基础之蜂鸣器
  6. 对话 MySQL 之父 Monty:超越 MySQL 很难,但我做到了!
  7. 使用chrom访问本地项目需要输入http
  8. 多任务-协程(01-迭代器)
  9. b站弹幕姬python_Python 融合多方代码b站弹幕朗读姬代码
  10. 铯辐射原子钟的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告