1.首先安裝好Revit,至於版本是哪個關係不大。具體怎麼安裝,就不囉嗦了。安裝完成後,桌面會有類似這樣的圖標:
上圖是Revit2020和2019的圖標,我自己的電腦是安裝了兩個版本的Revit。
2.找到安裝目錄下的兩個dll文件,你可以把它copy出來,或者直接在C#工程項目中引用它:
3.新建一個C#新項目,我們以.net standard類庫進行創建,然後編寫一個類實現IExternalCommand接口
<code>using Autodesk.Revit.DB; using Autodesk.Revit.UI; using System; namespace UseIExternalCommand { /// /// 演示類 /// /// marc [Autodesk.Revit.Attributes.Transaction(Autodesk.Revit.Attributes.TransactionMode.Manual)] [Autodesk.Revit.Attributes.Regeneration(Autodesk.Revit.Attributes.RegenerationOption.Manual)] [Autodesk.Revit.Attributes.Journaling(Autodesk.Revit.Attributes.JournalingMode.NoCommandData)] public class Helloworld : IExternalCommand { /// /// 執行指令 /// /// /// /// /// public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements) { using (Transaction tran = new Transaction(commandData.Application.ActiveUIDocument.Document, Guid.NewGuid().ToString())) { tran.Start(); TaskDialog.Show("提示", "工程名:" + commandData.Application.ActiveUIDocument.Document.ProjectInformation.Name); tran.Commit(); } return Result.Succeeded; } } } /<code>
4.編譯後,將生成bin目錄,我們把bin目錄的路徑copy到下圖中:
選擇外部工具下的Add-In Manager(Manual Mode),如果你沒有外部工具,那麼你可以先找一下其它文章,先讓Revit把這個插件裝上。至於為什麼會選擇第一項Add-In Manager(Manual Mode),這個是在代碼中定義的:
5.好,下面將bin目錄的地址copy進去 :
點擊“Load"按鈕,然後選擇bin目錄下的編譯好的項目dll文件。然後截入得到下面的效果:
6.選中剛剛載入的helloworld,進行點擊"Run"的按鈕,運行它:
7.如此便可完成Revit的IExternalCommand擴展入門。
除了IExternalCommand外,還有一個相應的叫IExternalApplication,二者的區別在於:
IExternalCommand:是用來執行具體的命令任務的,是執行者。如客戶拿著一個菜單跟你說要來份炒粉,那麼炒粉這個事情,就你來做。
IExternalApplication:是界面相關,主要用途是顯示菜單。如客戶拿著一個菜單跟你說要來份炒粉,那麼菜單上有什麼可以選的,那麼這個菜單就是用IExternalApplication來做的。他不做具體的炒粉動作,只負責告訴客戶,我有炒粉這道菜,你可以選擇。
如果你實現了IExternalApplication,那麼就可以類似上圖紅圈一樣,在面板上任意加上你起的名字的菜單 。當點擊這個菜單 的時候 ,會自動執行IExternalCommand這個動作。
IExternalApplication是與IExternalCommand關聯的,你指定一個菜單的時候,必須告訴Revit點擊這個菜單的時候 ,要啟動哪個動作(IExternalCommand)。
8.IExternalApplication接口,他的使用時機是在Revit啟動時進行初始化加載,關閉Revit的時候進行資源卸載。
<code>namespace Autodesk.Revit.UI { public interface IExternalApplication { Result OnShutdown(UIControlledApplication application); Result OnStartup(UIControlledApplication application); } }/<code>
OnShutdown:在Revit這個軟件關閉時被調用。
OnStartup:在Revit這個軟件打開並初始化時被調用,軟件打開後,不論你再新建幾個Revit工程項目,都不會再第2次執行此方法。
9.介紹.addin文件。
上述操作是在外部工具中加載的。正常一個插件開發出來後,使用者,即我們的用戶,他們是不會去用“外部工具”的,所以,我們需要配置一份執行指令以及菜單的.addin文件,具體這個文件的內容,讀者可以參考其它文章。
<code> UseIExternalCommand.dll ac97eb33-31cb-434e-a496-d1c5dd079681 UseIExternalCommand.Helloworld 你好世界 Revit二次開發入門。 AlwaysVisible ADSK Autodesk, www.autodesk.com 菜單 UseIExternalCommand.dll 9db84df0-b5b6-4ffb-ad16-a5c607f5624a UseIExternalCommand.Menu ADSK /<code>
10.如上面所示,一個帶有執行指令IExternalCommand和菜單功能IExternalApplication的.addin文件就是這樣,此時,重新打開Revit軟件,將出現如下效果
菜單叫什麼名字,是我們在IExternalApplication文件中定義的,具體代碼,請參看源碼即可。
至於點擊“世界”這個菜單按鈕,為什麼會執行我們的IExternalCommand指令?也是在IExternalApplication中寫好的,所以他才觸發執行這個指令。
源碼下載
下載地址:https://download.csdn.net/download/mazhiyuan1981/12875400
關鍵字: Attributes using UseIExternalCommand