做了很久碼農,也沒個寫博客的習慣,這次開始第一次寫博客。 這個問題也是折騰了我接近一天時間,網上也沒有任何的相關博文,於是決定分享一下,以供同樣擁有此問題的小伙伴們參考。 內容源於目前在做的一個項目,已經封好的功能里,在生成構件時,會產生以 下彈窗。 原以為是前輩留下的信息提示,沒想到是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做出決策,它就不會再彈窗問我們怎麼做了,錯誤和警告彈窗已經有博主發過了,這裡就不再贅述了。