原先開發外掛程式時沒有注意到模態和非模態對話方塊在revit中的區別,直到最近做了乙個專案,需要啟動事務對revit資料進行修改,在視窗為模態對話方塊中沒有問題,但是變成非模態對話時則出現錯誤,大意是無法在api內容外啟動事務等等,其實質就是revit對多執行緒支援的問題,不能在除外掛程式主線程外的其他執行緒中對revit資料進行修改,好了問題已經定位了,下一步就是解決問題,按照以往解決問題的思路,先去sdk中的sample中找找看有沒有相關事例,發現了正好說明此問題的demo(modelessdialog), 參考研究改寫**後問題得到解決,解決問題的核心思路是使用事件機制,將revit資料修改這部分功能挪動到事件處理函式中,主線程中監聽並處理事件,子執行緒則控制事件的觸發目的和觸發時機, 目前revit針對多執行緒提供了兩種事件可供使用,一種是externalevent,另外一種是idlingevent,下面詳細說說它們。
1:externalevent
revit提供的外部事件機制,使用者在主線程中建立乙個外部事件,主線程會輪詢監聽該事件,子執行緒中使用該事件物件主動觸發事件,主線程監聽到後,就會主動呼叫事先註冊好的handler中的事件處理函式。
2:idlingevent
參考的sdk demo:sdk\samples\modelessdialog
externalevent可供參考的簡化demo:
Revit二次開發 初學
前言 由於工作需要,近期開始學習revit二次開發知識。學習的同時將學習過程與小夥伴們一起分享,希望後來的小夥伴在看到我的學習筆記的時候有所幫助。說明由於revit的版本在不斷更新中,所以我在學習revit的時候選擇了從revit自帶的幫助檔案開始學習,不同版本的revit,就看相應的help檔案。...
Revit二次開發 Revit擴充套件儲存資料
revit二次開發過程中,需要將相關資訊儲存到rvt檔案中,再次開啟rvt的時候,可以通過讀取這些資訊,知道當前構件的基本狀態,或者將乙個特殊的資訊儲存到rvt檔案中,從revit2012開始引入了擴充套件儲存這個新技術,就是可以把一些資料儲存在revit中的某乙個物件上。且這個儲存操作,只能通過程...
Revit二次開發 分割族
如有不明白,請qq254033230詢問。其實在revit裡是不存在分割族的概念。對於基於線形的族,截面沿線都是一樣,要想達到分割的狀態,只需要把族基於線的那條線變短,然後再在分割點複製乙個新的族即可。過程是先獲得線的均分點,然後把族的線縮短,接著再複製族,即可變成均分的效果。主要方法見 priva...