Revit二次开发之DMU

本文详细介绍了Revit的DMU(Dynamic Model Update)功能,包括UpdaterRegistry、IUpdater等核心类的使用,以及如何处理自定义联动关系。在Revit中,DMU允许开发者实现更复杂的模型更新逻辑,如两面墙长度固定、链接文档联动等。文章还强调了AddInId的重要性,并提供了代码实例,展示了如何注册、注销Updater。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Revit二次开发之DMU

  Revit是一款三维联动的设计软件,一处修改处处修改, 比如,在三维视图修改了墙的位置,二维视图上墙的位置也跟着变化了,同时,墙上的门窗也会跟着移动。 这种联动关系是Revit内部设计好的,如果我们需要一些自定义的联动关系, 比如我希望两面墙的总长度是固定的,增加一面墙长度之后,另外一面墙会跟着缩减。又或者,链接文档的某个构件移动了,希望主文件的某个不相关的构件也移动。这个时候,Revit本身的关系已经不足以满足我们的需求,我们就可以使用DMU(Dynamic Model Update)了。

一、相关类

1、UpdaterRegistry

  修改器注册工具类,Autodesk.Revit.DB下。

  用来向Revit注册、修改或销毁IUpdater实现类实例以及为Updater实例添加Trigger等。

public class UpdaterRegistry : IDisposable
{
    //给定ChangeType和一定的元素范围,当此范围中的元素发生ChangeType对应的改变时,给定的Updater执行
    //ElementFilter可以参考RevitApi,其所有的子类都可以使用,根据需求赋值即可
    public static void AddTrigger(UpdaterId id, ElementFilter filter, ChangeType change);
    public static void AddTrigger(UpdaterId id, Document document, ElementFilter filter, ChangeType change);
    public static void AddTrigger(UpdaterId id, Document document, ICollection<ElementId> elements, ChangeType change);
    
    //移除给定Updater相关的所有追踪器
    public static void RemoveAllTriggers(UpdaterId id);
    public static void RemoveDocumentTriggers(UpdaterId id, Document document);
    
    //使给定的Updater失效
    public static void DisableUpdater(UpdaterId id);
    //使给定的Updater生效
    public static void EnableUpdater(UpdaterId id);
    //给定的Updater是否有效
    public static bool IsUpdaterEnabled(UpdaterId id);
    
    //给定的Updater是否是必须的
    public static bool GetIsUpdaterOptional(UpdaterId id);
    //设置的Updater是否是必须的
    public static void SetIsUpdaterOptional(UpdaterId id, bool isOptional);
    
    //获取已经注册的所有Updater信息
    public static IList<UpdaterInfo> GetRegisteredUpdaterInfos();
    public static IList<UpdaterInfo> GetRegisteredUpdaterInfos(Document document);
    
    //给定的UpdaterId是否已经被注册
    public static bool IsUpdaterRegistered(UpdaterId id);
    public static bool IsUpdaterRegistered(UpdaterId id, Document document);
    
    //注册Updater
    public static void RegisterUpdater(IUpdater updater);
    public static void RegisterUpdater(IUpdater updater, Document document);
    public static void RegisterUpdater(IUpdater updater, bool isOptional);
    public static void RegisterUpdater(IUpdater updater, Document document, bool isOptional);
    
    //注销已经注册的Updater
    public static void UnregisterUpdater(UpdaterId id);
    public static void UnregisterUpdater(UpdaterId id, Document document);
    
    //设置两个Updater的执行顺序
    public static void SetExecutionOrder(UpdaterId first, UpdaterId second);
}

2、IUpdater

  接口,DMU的执行者,Autodesk.Revit.DB下。

public interface IUpdater
{
    //Revit的回调函数,当Updater追踪到相关元素发生变化时,自动调用此方法实现联动
    void Execute(UpdaterData data);
    //获取当前Updater的附加信息
    string GetAdditionalInformation();
    //获取执行的优先级,ChangePriority是一个枚举,定义了多个Updater实例共同被触发时执行的顺序
    ChangePriority GetChangePriority();
    //获取当前Updater实例的Id,UpdaterId类型
    UpdaterId GetUpdaterId();
    //获取当前Updater的名字
    string GetUpdaterName();
}

  当我们使用DMU时,第一步就是实现IUpdater接口,实现其中的方法,尤其是Execute方法。

3、Update

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值