zoukankan      html  css  js  c++  java
  • Revit二次开发 屏蔽复制构件产生的重复类型提示窗

    做了很久码农,也没个写博客的习惯,这次开始第一次写博客。

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

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

    下弹窗。

     

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

    API如下:

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

    因为源代码中在调用此函数时参数如下

    于是跳到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做出决策,它就不会再弹窗问我们怎么做了,错误和警告弹窗已经有博主发过了,这里就不再赘述了。
  • 相关阅读:
    JQuery实现页面跳转
    CSS中让背景图片居中且不平铺
    C#后台将string="23.00"转换成int类型
    BootStrap的一些基本语法
    CSS实现文字阴影的效果
    BootStrap自定义轮播图播放速度
    BootStrap 轮播插件(carousel)支持左右手势滑动的方法(三种)
    C#常用快捷键
    jQuery hover() 方法
    鼠标移动有尾巴
  • 原文地址:https://www.cnblogs.com/FireFlyWings/p/11493348.html
Copyright © 2011-2022 走看看