- A+
所屬分類:revit
做了很久碼農,也沒個寫博客的習慣,這次開始第一次寫博客。
這個問題也是折騰了我接近一天時間,網上也沒有任何的相關博文,于是決定分享一下,以供同樣擁有此問題的小伙伴們參考。
內容源于目前在做的一個項目,已經封好的功能里,在生成構件時,會產生以
下彈窗。
原以為是前輩留下的信息提示,沒想到是revit自帶的信息提示,起因是在搜索構件時會查找當前文檔的構件,查找到之后僅進行復制操作,于是就涉及到調用elementtransformutils.copyelements()這個函數。
api如下:
其中最后一個參數就是我們要設置的部分。
因為源代碼中在調用此函數時參數如下
于是跳到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> |

自學設計網
微信掃一掃領取設計學習資料/本站會員