FAQ : macros Revit

Cette section répond aux questions fréquemment posées concernant les macros de Revit.

Question Réponse
Je pensais voir la macro que je viens de créer dans la liste classée du gestionnaire des macros, mais elle n'apparaît pas. Pourquoi ? Vous devez intégrer le projet de macro dans l'environnement de développement intégré (IDE) Revit (par le biais du menu de création) pour que vos nouvelles macros apparaissent dans le gestionnaire de macros.
Dois-je ajouter RevitAPI.dll et RevitAPIUI.dll comme références lorsque je rédige une nouvelle macro ? Non. Vous n'avez pas besoin de référencer les fichiers RevitAPI.dll et RevitAPIUI.dll, car cette étape a déjà été réalisée à votre place. Un projet de macro Revit utilise ces deux fichiers en tant que références requises. Les macros de Revit échouent si vous supprimez ces références dans l'IDE :

Voir Restauration de RevitAPI.dll et de RevitAPIUI.dll.

Dois-je modifier mes fichiers Revit.ini ? Non. Les macros de Revit sont automatiquement enregistrées pour apparaître dans le gestionnaire des macros sans aucune modification supplémentaire appliquée sur le système.
Dans l'environnement IDE Revit, j'ai supprimé une macro en effaçant sa méthode dans le fichier This*.cs ou This*.vb. Toutefois, le nom de la macro supprimée apparaît toujours lorsque je rouvre la liste classée du gestionnaire des macros. Comment supprimer le nom de la liste ? Vous devez intégrer votre projet modifié pour que le gestionnaire des macros reconnaisse la suppression.
Quelles sont les différences entre les macros au niveau de l'application et les macros au niveau du document ? Les macros au niveau de l'application peuvent s'exécuter sur tous les projets Revit ouverts au sein d'une seule instance de l'application Revit. Les projets de macro au niveau du document sont stockés dans un fichier RVT. Ils peuvent être chargés à partir du document actif et exécutés sur ce document.
Comment puis-je accéder à l'objet Application ou à l'équivalent externalCommandData ? Toutes les macros au niveau de l'application sont associées à l'objet UIApplication. Dans ces macros, le pointeur de mots-clés Application, en C# ou VB.NET, renvoie l'objet Application de l'API.

Dans les macros au niveau du document, le mot-clé Document renvoie l'objet de document de l'API. Pour accéder à l'objet UIApplication à partir d'une macro au niveau du document, utilisez this.Application.

Eléments à inclure dans les méthodes de démarrage et de fermeture : Module_Startup et Module_Shutdown ?

La méthode Module_Startup est appelée lorsqu'un module se charge et Module_Shutdown est appelée lorsqu'un module se décharge.

Pour les modules de macros au niveau de l'application, la méthode Module_Startup est utilisée lors du démarrage de Revit et la méthode Module_Shutdown est appelée à la fermeture de Revit.

Pour des modules de macros au niveau du document, la méthode Module_Startup est appelée lorsqu'un projet Revit s'ouvre et la méthode Module_Shutdown est appelée lors de la fermeture du document du projet.

Les méthodes Module_Startup et Module_Shutdown sont également appelées lorsque le projet de macro est recompilé.

Vous pouvez ajouter du code d'initialisation aux méthodes Module_Startup et procéder au nettoyage dans des méthodes Module_Shutdown. Vous pouvez, par exemple, inscrire des gestionnaires d'événements dans des méthodes appelées au démarrage et les désinscrire dans celles de la fermeture (procédure recommandée).

Comment et pourquoi devrais-je inscrire et désinscrire mon gestionnaire d'événements Revit ? Comme indiqué précédemment, la procédure recommandée pour effectuer ces opérations dans l'environnement IDE Revit est d'inscrire les gestionnaires d'événements dans la méthode *_Startup et de les désinscrire dans la méthode *_Shutdown. Chaque macro sera chargée et déchargée de façon dynamique. Lorsque vous déboguez une macro, si le gestionnaire d'événements n'est pas inscrit correctement, Revit risque d'envoyer une méthode incorrecte (peut-être une adresse mémoire incorrecte). Bien que l'environnement IDE puisse empêcher Revit de connaître un blocage dans ce scénario, les gestionnaires d'événements qui ne sont pas correctement inscrits peuvent entraîner des problèmes de performances lors de votre session Revit en cours.
Une boîte de dialogue semble ne pas fonctionner correctement et pose des problèmes dans Revit. Les boîtes de dialogue sans mode fonctionnant en dehors de la portée d'un rappel API peuvent entraîner des problèmes. Il est recommandé d'éviter ces rappels afin que Revit ne devienne pas instable.
Je souhaite utiliser les méthodes Startup et Shutdown et un gestionnaire d'événements. Pouvez-vous me montrer un exemple ? L'exemple de code suivant montre comment inscrire un gestionnaire d'événements OnDocumentNewed, qui affichera automatiquement une boîte de message à chaque fois qu'un projet Revit est créé. Remarque : un des exemples de macro fourni dans le SDK de Revit peut illustrer des méthodes de démarrage et de fermeture du gestionnaire d'événements au niveau du document. Ce FAQ présente des exemples de gestionnaires d'événements au niveau de l'application.

Notez que tous les événements API sont accessibles par le biais de la version 2011 de l'environnement IDE Revit. Les événements antérieurs à 2011 ont été supprimés. Les exemples suivants illustrent les nouveaux événements.

Pourquoi les macros que j'ai créées avec Python ne fonctionnent-elles plus ? Les macros Python requièrent .NET Framework 3.5. Celui-ci n'est pas installé par défaut. Installez .NET Framework 3.5 manuellement pour exécuter des macros Python.

Exemple C#, au niveau de l'application :

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");
}

Exemple VB.NET, au niveau de l'application :

Private
Sub Module_Startup(ByVal sender As Object, ByVal e As System.EventArgs)
Handles Me.Startup
AddHandler Me.OnDocumentNewed,
AddressOf Me.ThisApplication_OnDocumentNewed
End SubPrivate Sub Module_Shutdown(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Shutdown
RemoveHandler Me.OnDocumentNewed,
AddressOf Me.ThisApplication_OnDocumentNewed
End SubPrivate Sub ThisApplication_OnDocumentNewed(ByVal document As Autodesk.Revit.Document)
System.Windows.Forms.MessageBox.Show("VB.NET
Application event OnDocumentNewed")
End Sub