Revit二次开发之DMU

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

  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值