In questa sezione vengono fornite risposte a domande frequenti sulle macro di Revit.
Domanda | Risposta |
---|---|
Perché la nuova macro creata non è visualizzata nell'elenco catalogato di Gestione macro? | Le nuove macro vengono visualizzate in Gestione macro dopo la corretta generazione del progetto macro in Revit macro IDE (utilizzando il menu Genera). |
È necessario aggiungere RevitAPI.dll e RevitAPIUI.dll come riferimento quando si scrive una nuova macro? | No. Questa operazione viene eseguita automaticamente. Un progetto macro di Revit utilizza entrambi come riferimenti necessari. Le macro di Revit non vengono eseguite correttamente se si eliminano i seguenti riferimenti in IDE: ![]() |
È necessario modificare i file Revit.ini? | No. Le macro di Revit vengono automaticamente registrate in modo da essere disponibili in Gestione macro senza apportare ulteriori modifiche al sistema. |
In Revit macro IDE, è stata eliminata una macro rimuovendo il relativo metodo nel file This*.cs o This*.vb. Il nome di tale macro è tuttavia ancora visualizzato nell'elenco catalogato di Gestione macro. Come è possibile eliminare il nome dall'elenco? | È necessario generare correttamente il progetto modificato affinché la rimozione venga rilevata in Gestione macro. |
Quali sono le differenze tra le macro a livello di applicazione e quelle a livello di documento? | Le macro a livello di applicazione possono essere eseguite in tutti i progetti di Revit aperti mediante una singola istanza dell'applicazione Revit. I progetti macro a livello di documento sono memorizzati in un file RVT. Questi progetti possono essere caricati dal documento attivo corrente ed eseguiti sullo stesso. |
Come è possibile accedere all'oggetto Application o all'equivalente externalCommandData? | Tutte le macro a livello di applicazione sono associate all'oggetto UIApplication. Nelle macro a livello di applicazione, la parola chiave Application in C # e VB.NET restituisce sempre l'oggetto API Application. Nelle macro a livello di documento, la parola chiave Document restituisce sempre l'oggetto API Document. Per accedere all'oggetto UIApplication da una macro a livello di documento, utilizzare this.Application. |
Si consiglia di includere nei metodi di avvio e arresto le seguenti funzioni: Module_Startup and Module_Shutdown? |
Il metodo Module_Startup viene richiamato quando si carica un modulo mentre il metodo Module_Shutdown viene richiamato quando il modulo viene scaricato. Per i moduli delle macro a livello di applicazione, Module_Startup viene richiamato all'avvio di Revit e Module_Shutdown alla chiusura di Revit. Per i moduli delle macro a livello di documento, Module Startup viene richiamato all'apertura di un progetto Revit e Module_Shutdown quando si chiude il documento di progetto. Module_Startup e Module_Shutdown vengono richiamati anche quando il progetto macro viene rigenerato. È possibile aggiungere il codice di inizializzazione ai metodi Module_Startup ed eseguire le operazioni di pulizia nei metodi Module_Shutdown. Ad esempio, è possibile registrare gestori di eventi all'avvio e annullare la registrazione all'arresto (procedura consigliata). |
Come e perché è necessario eseguire ed annullare la registrazione del gestore di eventi Revit? | Come osservato in precedenza, la procedura consigliata per eseguire tale operazione in Revit IDE consiste nel registrare i gestori di eventi nel metodo *_Startup e annullarne la registrazione nel metodo *_Shutdown. Ogni macro verrà caricata e scaricata dinamicamente. Quando si esegue il debug di una macro, se l'annullamento della registrazione del gestore di eventi non viene eseguita correttamente, Revit può richiamare un metodo errato (ad esempio un indirizzo di memoria non valido). Sebbene Revit IDE possa impedire la chiusura anomala di Revit, l'errato annullamento della registrazione di un qualsiasi gestore di eventi può comportare problemi di prestazioni durante la sessione corrente di Revit. |
Una finestra di dialogo sembra non funzionare correttamente e causa problemi in Revit. | Le finestre di dialogo non modali che operano al di fuori dell'ambito di un callback dell'API in esecuzione possono causare problemi. Si consiglia di evitare tali operazioni di callback per impedire instabilità in Revit. |
È possibile ottenere un esempio di utilizzo dei metodi Startup e Shutdown e di un gestore di eventi? | Il codice di esempio riportato di seguito consente di registrare un gestore di eventi OnDocumentNewed. In seguito a tale registrazione, viene visualizzata automaticamente una finestra di messaggio al momento della creazione di un nuovo progetto di Revit. Nota: uno degli esempi di macro in Revit SDK può includere un esempio dei metodi di avvio e di arresto di un gestore di eventi a livello di documento. Queste domande frequenti includono esempi di gestori di eventi a livello di applicazione. Si noti che nel 2011 è possibile accedere a tutti gli eventi API da IDE. Gli eventi precedenti al 2011 sono stati rimossi. Gli esempi seguenti mostrano i nuovi eventi. |
Esempio C#, a livello di applicazione:
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"); }
Esempio VB.NET, a livello di applicazione:
Private Sub Module_Startup(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.StartupAddHandler Me.OnDocumentNewed, AddressOf Me.ThisApplication_OnDocumentNewedEnd SubPrivate Sub Module_Shutdown(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.ShutdownRemoveHandler Me.OnDocumentNewed, AddressOf Me.ThisApplication_OnDocumentNewedEnd SubPrivate Sub ThisApplication_OnDocumentNewed(ByVal document As Autodesk.Revit.Document)System.Windows.Forms.MessageBox.Show("VB.NET Application event OnDocumentNewed")End Sub