Revit二次開發 屏蔽復制構件產生的重復類型提示窗

  • A+
所屬分類:revit

做了很久碼農,也沒個寫博客的習慣,這次開始第一次寫博客。

這個問題也是折騰了我接近一天時間,網上也沒有任何的相關博文,于是決定分享一下,以供同樣擁有此問題的小伙伴們參考。

內容源于目前在做的一個項目,已經封好的功能里,在生成構件時,會產生以

下彈窗。

Revit二次開發 屏蔽復制構件產生的重復類型提示窗

原以為是前輩留下的信息提示,沒想到是revit自帶的信息提示,起因是在搜索構件時會查找當前文檔的構件,查找到之后僅進行復制操作,于是就涉及到調用elementtransformutils.copyelements()這個函數。

api如下:

Revit二次開發 屏蔽復制構件產生的重復類型提示窗

 

 

其中最后一個參數就是我們要設置的部分。

因為源代碼中在調用此函數時參數如下

Revit二次開發 屏蔽復制構件產生的重復類型提示窗

于是跳到copypasteoptions類,發現有iduplicatetypenameshandler這個事件接口。

這個接口就是專門處理上面的彈窗事件的,而由于在調用copy函數時傳參時直接默認構造了copypasteoptions類,所以我猜測此時revit不確定該如何處理,于是給出彈窗提示。

那么接下來就好辦了,我們自己創建一個copypasteoptions類,然后給它一個處理方式就行了。

改過后代碼如下:

1
2
3
4
5
transaction.start("copyelement");
copypasteoptions opt = new copypasteoptions();
opt.setduplicatetypenameshandler(new copyeventhandler());
ids = elementtransformutils.copyelements(sdoc, elementstocopy, ddoc, transform.identity, opt);
transaction.commit();
1
copyeventhandler繼承自iduplicatetypenameshandler接口,接口實現如下:<br>
1
2
3
4
5
6
7
public class copyeventhandler : iduplicatetypenameshandler
{
????public duplicatetypeaction onduplicatetypenamesfound(duplicatetypenameshandlerargs args)
????{
????????return duplicatetypeaction.usedestinationtypes;
????}
}
1
其中duplicatetypeaction是個枚舉類型,有兩個選項usedestinationtypes和abort。<br>前者就是我們需要的操作,后者是告訴revit中斷此操作,這肯定不行。<br><br>經測試,彈窗已經不會再出現了,搞定。<br>其它的彈窗大同小異,只要找到對應的接口實現它,我們在代碼里幫revit做出決策,它就不會再彈窗問我們怎么做了,錯誤和警告彈窗已經有博主發過了,這里就不再贅述了。<br>
weinxin
自學設計網
微信掃一掃領取設計學習資料/本站會員

發表評論

您必須登錄才能發表評論!