欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2022-05-03 22:27:02
做了很久码农,也没个写博客的习惯,这次开始第一次写博客。 这个问题也是折腾了我接近一天时间,网上也没有任何的相关博文,于是决定分享一下,以供同样拥有此问题的小伙伴们参考。 内容源于目前在做的一个项目,已经封好的功能里,在生成构件时,会产生以 下弹窗。 原以为是前辈留下的信息提示,没想到是revit自 ......

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

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

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

 

 

下弹窗。

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

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

api如下:

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

 

 

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

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

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

于是跳到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做出决策,它就不会再弹窗问我们怎么做了,错误和警告弹窗已经有博主发过了,这里就不再赘述了。