Revit二次开发 屏蔽复制构件产生的重复类型提示窗

作了好久码农,也没个写博客的习惯,此次开始第一次写博客。函数

这个问题也是折腾了我接近一天时间,网上也没有任何的相关博文,因而决定分享一下,以供一样拥有此问题的小伙伴们参考。测试

内容源于目前在作的一个项目,已经封好的功能里,在生成构件时,会产生以spa

 

 

下弹窗。3d

 

原觉得是前辈留下的信息提示,没想到是revit自带的信息提示,原由是在搜索构件时会查找当前文档的构件,查找到以后仅进行复制操做,因而就涉及到调用ElementTransformUtils.CopyElements()这个函数。code

API以下:orm

 

 

 其中最后一个参数就是咱们要设置的部分。blog

由于源代码中在调用此函数时参数以下继承

因而跳到CopyPasteOptions类,发现有IDuplicateTypeNamesHandler这个事件接口。接口

这个接口就是专门处理上面的弹窗事件的,而因为在调用copy函数时传参时直接默认构造了CopyPasteOptions类,因此我猜想此时revit不肯定该如何处理,因而给出弹窗提示。事件

那么接下来就好办了,咱们本身建立一个CopyPasteOptions类,而后给它一个处理方式就好了。

改事后代码以下:

                transaction.Start("copyElement");
                CopyPasteOptions opt = new CopyPasteOptions();
                opt.SetDuplicateTypeNamesHandler(new CopyEventHandler());
                ids = ElementTransformUtils.CopyElements(sDoc, elementsToCopy, dDoc, Transform.Identity, opt);
                transaction.Commit();
CopyEventHandler继承自IDuplicateTypeNamesHandler接口,接口实现以下:
    public class CopyEventHandler : IDuplicateTypeNamesHandler
    {
        public DuplicateTypeAction OnDuplicateTypeNamesFound(DuplicateTypeNamesHandlerArgs args)
        {
            return DuplicateTypeAction.UseDestinationTypes;
        }
    }
其中DuplicateTypeAction是个枚举类型,有两个选项UseDestinationTypes和Abort。前者就是咱们须要的操做,后者是告诉revit中断此操做,这确定不行。经测试,弹窗已经不会再出现了,搞定。其它的弹窗大同小异,只要找到对应的接口实现它,咱们在代码里帮revit作出决策,它就不会再弹窗问咱们怎么作了,错误和警告弹窗已经有博主发过了,这里就再也不赘述了。
相关文章
相关标签/搜索