IExternalCommand是Revit API用户通过外部命令来扩展功能的接口。IExternalCommand接口只有一个抽象函数Excute。重载这个函数来实现IExternalCommand,Excute函数将作为外部命令的主函数被调用,定义如下:

public interface IExternalCommand

{
public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
}

Execute函数有三个参数:输入参数commandData (ExternalCommandData类型)、输出参数 message (String类型)、输出参数 elements (ElementSet类型)。
这三个参数的用法分别是:

(1) 命令参数 commandData (ExternalCommandData类型)
ExternalCommandData对象包含了外部命令所属Application以及一些视图的引用。在外部命令中,所有的Revit的数据都可以通过这个参数直接或间接地取到。
如:

            UIApplication uiApplication = commandData.Application;Application application = uiApplication.Application;UIDocument uiDocument = uiApplication.ActiveUIDocument;Document document = uiDocument.Document;

ExternalCommandData 中的属性

属性

说 明

Application(Autodesk Revit. UI. UiApplication)

用于表示适用于当前外部命令的Application对象

View(Autodesk.Revit. DB. View)

用于表示当前外部命令起作用的视图对象

JournalData(IDictionary<Stnng,String〉)

用于在Revit Journal文件中读写数据的数据字典,主要应用 于做自动化测试时与外部命令做交互使用

(2) 输出参数 message (String)
外部命令可以通过这个参数来返回执行过程中的错误信息。这个参数作用于整个外部 命令的执行过程,用户可以在外部命令执行过程中的任何时候给这个信息设值或者追加信 息。当外部命令的 Execute 函数返回 Autodesk. Revit. UI. Result. Failed 或者 Autodesk. Revit. UI. Result. Canceled,这个错误信息将被显示在UI上。

[Transaction(TransactionMode.Manual)]public class Class1 : IExternalCommand{public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements){message = "这是个错误信息";return Result.Failed;}}

(3)输出参数 elements (ElementSet)
当外部命令返回Autodesk. Revit.UI. Result Failed 或者 Autodesk Revit.UI. Result. Cancel 并且 message 参数不为空的时候,错误或者警告对话框会 弹出来,点击上面的显示按钮,elements参数中的元素将被髙亮显示。

在2014里可以设置Selection .Elements

这里的Elements返回的是一个 SelElementSet :

SelElementSet  set = SelElementSet.Create();//创建一个SelElementSet

set.Add(Element ) // SelElementSet 中添加要选中的Element

Selection .Elements = set // 把 set 赋值个Selection .Elements这个就可以是刚才添加的构件选中

在2015及以后用Selection.SetElementIds( ICollection<ElementId>elementIds).

elementIds 这个就是要选中构件的Id的集合。

(4)返回值
Execute函数的返回值用于表示外部命令的执行状态,分为 Autodesk. Revit. UI. Result.Succeeded,Autodesk. Revit. UI. Result. Failed 和 Autodesk. Revit. UI. Result.Canceled 三种。如果返 回值不为Succeeded,那么Revit会把外部命令所做的所有操作和修改撤销。

=========【更多高级应用请关注公众号】========

===================================

Revit二次开发之关于外部命令IExternalCommand【比目鱼原创】相关推荐

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

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

  2. Revit二次开发之使用外部程序集DT_Mgd读取CAD图遇到的问题

    Revit二次开发学习笔记(一) 最近学习在revit中读取链接的CAD图纸信息(包括文字.图层.各种线型),由于小白也是初学者,遇到了一些问题,如图所示: 通过大量查阅参考资料发现,问题是:在类库项 ...

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

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

  4. Revit二次开发 外部命令和外部应用

    外部命令 通过IExternalCommand来添加自己的应用.Revit通过.addin文件来识别和加载外部插件 基本原理 Revit没有其他命令在运行或者没有处于编辑模式,那么已经注册了的外部命令 ...

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

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

  6. C# Revit二次开发基础/核心编程--- Application\Document\Transaction

    一.本节课程 C# Revit二次开发基础/核心编程--- Application\Document\Transaction 二.本节要讲解的知识点 Application\Document\Tran ...

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

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

  8. Revit二次开发01——环境搭建(附Revit 2018 + Visual Studio 2017下载地址)

    目录 1.准备工作 1.1 安装Revit 2018 1.2 安装Revit 2018 SDK 1.3 安装Visual Studio 2017 2.配置Addin Manager 3.测试 3.1 ...

  9. Revit二次开发教程提纲

    本文提供Revit二次开发教程提纲,教程内容包括下列部分 前言--BIM开发需要用到的技术 .NET及C#的基本介绍 1.1 基本语法 1.2 版本介绍 1.3 Visual Studio 1.4 C ...

最新文章

  1. redis stream java消息队列_Redis-消息队列的两种实现方式
  2. mysql有两个结果集,MySQL:两个结果集的差异
  3. linux 字符驱动阻塞型 等待队列
  4. SAP UI5 Fileupload control
  5. struts2框架下的一个简单的ajax例子
  6. python帮助文档快捷键_Pycharm快捷键手册
  7. 天池在线编程 2020国庆八天乐 - 6. 山谷序列(DP)
  8. 今天的天气格外地好的dabeicun
  9. python基础教程百度云-python从入门到精通视频百度云盘下载
  10. 家用智能门锁常见的开锁方式
  11. mac修改锁定文件的解决方法
  12. 北京年内首现二手房连续三日成交破450套
  13. 再次风靡春节的《熊出没》,究竟下了哪些硬功夫?
  14. JS实现快递单打印功能
  15. ios 穿山甲广告联盟集成_穿山甲广告集成支持IOS14
  16. 谈一谈游戏AI - 行为树
  17. 计算机翻译turtle,turtle是什么意思_turtle的翻译_音标_读音_用法_例句_爱词霸在线词典...
  18. 批量清理Unity项目Library目录 降低项目空闲占用空间
  19. 【推荐】《Java 并发编程的艺术》迷你书
  20. openssl命令查看证书有效期_kubeadm初始化k8s集群延长证书过期时间

热门文章

  1. APP弱网测试工具(QNET)
  2. 适合安装3dsmax软件的笔记本电脑配置
  3. android安全性测试工具,Android app安全性能测试
  4. 阻塞和非阻塞语句的区别
  5. 浏览器内核-一张图看懂
  6. linux复制和剪切文件命令,linux下文件夹的创建、复制、剪切、重命名、清空和删除命令...
  7. 作为产品经理,你目前薪资多少呢?
  8. mac使用skip-thoughts所出现的问题
  9. AiGuild:GameFi的3.0形态
  10. poj 2244 最短路 和 poj 1874 畅通工程续 dijkstra(迪杰斯特拉)