本節將解答 Revit 巨集的常見問題。
| 問題 | 回答 |
|---|---|
|
為什麼我持續看到「您是否信任此資料夾中檔案的作者」訊息?如何阻止此訊息出現? |
此訊息來自 VSCode,是 Microsoft「工作區信任」程式的一部分,可提升安全性。 若要阻止訊息出現,請執行以下操作:
|
| 我本來預期可以在巨集管理員的分類清單中看到新建立的巨集,但巨集並未顯示在清單中。為什麼? | 您必須先在 Revit 巨集 IDE 中成功建立巨集專案 (使用「建立」功能表),新巨集才會出現在巨集管理員中。 |
| 撰寫新巨集時,需要加入 RevitAPI.dll 和 RevitAPIUI.dll 作為參考嗎? | 否。您不需要參考 RevitAPI.dll 和 RevitAPIUI 檔案,因為系統已為您完成此步驟。Revit 巨集專案會使用這兩個檔案作為必要參考。 |
| 需要編輯我的 Revit.ini 檔案嗎? | 否。Revit 巨集會自動登錄以顯示在巨集管理員中,不會對系統進行進一步修改。 |
| 在 Revit 巨集 IDE 中,我透過移除 This*.cs 檔案或 This*.vb 檔案中的方法來刪除巨集。但是當我重新開啟巨集管理員的分類清單時,清單中仍出現刪除的巨集名稱。我該如何從清單中清除名稱? | 您必須先成功建立編輯的專案,巨集管理員才能認定移除。 |
| 我應該在啟動和關閉方法中包含哪些項目:Module_Startup 和 Module_Shutdown? |
載入模組時會呼叫 Module_Startup 方法,卸載模組時會呼叫 Module_Shutdown。 若為應用程式層級巨集模組,Revit 啟動時會呼叫 Module_Startup,而在 Revit 關閉時則會呼叫 Module_Shutdown。 若為文件層級巨集模組,開啟 Revit 專案時會呼叫 Module_Startup,而在關閉專案文件時會呼叫 Module_Shutdown。 重新建立巨集專案時,也會呼叫 Module_Startup 和 Module_Shutdown。 您可以在 Module_Startup 方法中加入起始程式碼,並在 Module_Shutdown 方法中執行清理工作。例如,您可以在啟動時登錄事件處理常式,並在關機時加以解除登錄 (建議作法)。 |
| 我應該登錄和解除登錄 Revit 事件處理常式的方法和原因為何? | 如前所述,在 Revit IDE 中執行此項操作的建議方法是在 *_Startup 方法中登錄事件處理常式,並在 *_Shutdown 方法中解除登錄。如此即可動態載入和卸載每個巨集。偵錯巨集時,如果未正確解除登錄事件處理常式,Revit 可能會呼叫錯誤的方法 (可能是無效的記憶體位址)。雖然 Revit IDE 在此情況下均可防止 Revit 損毀,但任何未正確解除登錄的事件處理常式,可能會在目前 Revit 工作階段期間引發效能問題。 |
| 有一個對話方塊似乎運作不正常,並導致 Revit 發生問題。 | 在執行中 API 收回的範圍外運作的無模式對話方塊可能會引發問題。建議您避免這類收回以防止 Revit 發生不穩定的事件。 |
| 我想要試驗 Startup 和 Shutdown 方法及事件處理常式。可以展示範例嗎? | 下列範例程式碼展示如何登錄 OnDocumentNewed 事件處理常式,它會在建立新 Revit 專案時自動啟動訊息方塊。注意事項:Revit SDK 提供的其中一個巨集範例,可能會展示文件層級事件處理常式的啟動和關閉範例。此常見問題展示應用程式層級事件處理常式範例。
請注意,在 2011 中,所有 API 事件都可由 Revit IDE 存取。2011 之前的事件均已移除。下列範例展示了新事件。 |
C# 範例,應用程式層級:
private void Module_Startup(object sender, EventArgs e)
{
this.Application.DocumentOpened
+= new EventHandler<Autodesk.Revit.DB.Events.DocumentOpenedEventArgs>(Application_DocumentOpened);
}
private void Module_Shutdown(object sender, EventArgs e)
{
this.Application.DocumentOpened
-= new EventHandler<Autodesk.Revit.DB.Events.DocumentOpenedEventArgs>(Application_DocumentOpened);
}
void Application_DocumentOpened(object sender, Autodesk.Revit.DB.Events.DocumentOpenedEventArgs e)
{
System.Windows.Forms.MessageBox.Show("message here");
}