RevitAPI:监听文档改变ControlledApplication/Application.DocumentChanged事件

很多时候,我想通过API获取上一次操作有哪些对象被创建、修改或者删除了。或者想监听文档的改变事件,一旦改变发生,程序就做一些特定的事情,例如,把这些改变记录在数据库中,再和其他应用进行交流。

这个时候,就要用到ControlledApplication.DocumentChanged或者Application.DocumentChanged事件了。

这里,我先推荐大家学习一个SDK里面的例子,名字就叫:DocumentChanged,它用来把所有的对文档的修改记录下来,显示在一个表格里面:


接下来我们看怎么使用。


首先,我们需要注册这个事件,通常情况下,会在IExternalApplication里面注册,因为它是ControlledApplication或Application类的事件,如果在IExternalCommand里面注册的话,当Execute函数退出的时候,需要注销这个事件,否则可能造成事件无法管控。

但是在测试环境的时候,我们可以使用IExternalCommand来注册事件,这样比较方便使用AddInManager来加载和调试。

这里我们就以IExternalApplication作为例子:

public class DocChangedRegistryApp : IExternalApplication
{
    public Result OnStartup(UIControlledApplication application)
    {
        //注册事件
        application.ControlledApplication.DocumentChanged
            += ControlledApplication_DocumentChanged;
        return Result.Succeeded;
    }

    public Result OnShutdown(UIControlledApplication application)
    {
        //注销事件
        application.ControlledApplication.DocumentChanged
            -= ControlledApplication_DocumentChanged;
        return Result.Succeeded;
    }

    void ControlledApplication_DocumentChanged(object sender, DocumentChangedEventArgs e)
    {
        var doc = e.GetDocument(); //获取对应的文档对象
        var added = e.GetAddedElementIds(); //获取增加的对象
        var deleted = e.GetDeletedElementIds(); //获取删除的对象
        var modified = e.GetModifiedElementIds(); //获取修改的对象
        //自己的后续程序
    }
}

可以看到,在事件的handler函数里面,我们可以获取对应的Document对象,以及增删改的元素的Id,获得这些对象之后,几乎可以做任何事情了。


评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值