上一講中,我們利用WPF創建簡單的界面,并通過點擊按鈕選擇族,來顯示族的信息,但如果我們想通過點擊按鈕建立事務實現對Revit文檔的修改,就沒有那么容易了,Revit從2013版之后就不允許在外部窗體下直接開啟事務,這時,我們可以使用模態窗體阻止線程的運行解決此問題,窗體本質上就是用戶與程序的交互界面,在窗體上設置好數據然后傳遞給主程序,但如果我們需要頻繁的數據交互,模態窗體顯然是很不方便的,RevitAPI為我們提供了外部事件ExternalEvent的方法,接下來我們使用ExternalEvent實現非模態窗體命令。
知識點介紹(關于模態與非模態窗體)
模態與非模態窗體的主要區別是窗體顯示的時候是否可以操作其他窗體。模態窗體不允許操作其他窗體,非模態窗體可以操作其他窗體。
呈上代碼
首先創建一個新類并繼承IExternalEventHandler
注冊一個通用外部事件可直接在窗體中使用事務
編寫代碼如下:
Class1類中修改代碼如下:
窗體代碼:
添加字段如下
添加構造函數重載
調用外部事件方法并建立事務
將之前創建基于標高實例的代碼移動到點擊按鈕的事件下
窗體界面如圖
運行結果:
點擊創建族實例按鈕
Revit中會出現通過點擊按鈕創建的樹的實例
小編有話說
到目前為止,我們的第一個Revit二次開發 小案例就完成了,在案例中介紹了Revit二次開發很基本也非常重要的知識,其中第一講介紹了創建族實例的方法,第二講介紹了修改族參數與創建基于標高族實例的方法,第三講介紹了WPF的基本知識,并通過實現了通過選擇元素,在界面顯示元素信息的功能,第四講介紹了建立外部事件來實現在外部窗體下開啟事務修改Revit文檔。
本次小案例旨在能夠激發大家對Revit二次開發的興趣,幫助大家快速熟悉二次開發的過程。
在Revit中修改管道附件中部分構件的顯示情況。在Revit建模過程中,需要在模型中放置設備,例如風機,可以分為吊裝式和落地式的,兩者的區別在在于有無底座,這時就可以通過控制族中部分構件的顯示情況來滿足要求。
在上一講中,介紹了通過二次開發創建族實例,并獲取族參數,修改角度參數的實現方法,但仍存在一些不足,比如在運行Revit后需要手動將做的族載入的Revit,本講將對其進行改進。并介紹另一種創建族實例的方法。