作了好久碼農,也沒個寫博客的習慣,此次開始第一次寫博客。函數
這個問題也是折騰了我接近一天時間,網上也沒有任何的相關博文,因而決定分享一下,以供一樣擁有此問題的小夥伴們參考。測試
內容源於目前在作的一個項目,已經封好的功能裏,在生成構件時,會產生以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作出決策,它就不會再彈窗問咱們怎麼作了,錯誤和警告彈窗已經有博主發過了,這裏就再也不贅述了。