Python, ce simplissime langage de programmation, est disponible sur Revit afin de créer des macros.
La gestion des macros
Afin de créer, éditer et exécuter des macros, il est nécessaire d’ouvrir le gestionnaire de macro. Vous le trouverez dans l’onglet Gérer de Revit, au dessus dans le groupe Macros

Lorsque vous cliquez sur le gestionnaire de macros, vous obtenez la fenêtre suivante :

Pour créer une macro, il est déjà nécessaire de créer un module qui contiendra ladite macro. Il est possible de mettre plusieurs macros dans un même module. Pour créer le module, il suffit de cliquer sur Module dans l’onglet Créer. Il est important de préciser le langage utilisé dans notre module, à savoir ici Python.

Une fois le module créé, on peut créer de façon analogue la macro dans le module.

Il est possible qu’une fenêtre de code se soit ouverte pendant la création du module ou de la macro. Si ce n’est pas le cas, cliquez sur le bouton Edition dans le gestionnaire.
Nos premières macros
Vous devriez avoir désormais la fenêtre suivante :

Le début du code automatiquement généré ne nous intéresse pas :
import clr
import System
clr.AddReferenceByName("RevitAPI.dll");
clr.AddReferenceByName("RevitAPIUI.dll");
from Autodesk.Revit import *
from Autodesk.Revit.UI import *
from Autodesk.Revit.UI.Macros import *
from Autodesk.Revit.UI.Selection import *
from Autodesk.Revit.DB import *
from System.Collections.Generic import *
from System.Collections import *
from System import *
from math import *
Code language: Python (python)
Il s’agit de l’importation de divers modules utiles à Revit.
Nous allons travailler dans la class ThisDocument. Il y a 8 méthodes auxquelles ils ne faut pas toucher, elles sont indispensables pour le bon fonctionnement de notre module :
FinishInitialization OnShutdown InternalStartup InternalShutdown Startup Shutdown GetTransactionMode GetAddInId
Réaliser une MessageBox
Retrouvons en bas de notre module la macro nous avons créé. Il est pour l’instant bien vide !
def bonjour(self):
pass
Code language: Python (python)
Nous allons juste remplacer la commande pass par la fonction TaskDialog.Show. Il ne faut toucher au paramètre self, il est nécessaire pour le bon fonctionnement de notre macro.
def bonjour(self):
TaskDialog.Show('Titre de la fenêtre','Message dans la fenêtre')
Code language: Python (python)
Le premier argument de TaskDialog.Show est le titre de la fenêtre, le second correspond au message affiché dans la fenêtre.
Exemple :
def bonjour(self):
TaskDialog.Show('Dis bonjour','Bonjour, comment ça va bien ? \nÇa vous dit une raclette ?')
Code language: Python (python)
Pour l’utiliser, il faut Construire notre code : dans la barre en haut : Construction/Construire la solution (ou utilisez le raccourci en dessous faisant la même chose).
Vous pouvez ensuite exécuter notre macro via le gestionnaire de macros.

Un exemple déjà présent dans le code
Si vous regardez le début de la class ThisDocument, vous pouvez observer quelques exemples de macro pré enregistrées. Nous allons regarder comment l’un d’eux est construit.
Obtenir la liste des matériaux
if False: # Basic sample method, set to True to enable
def ListMaterials(self):
""" A sample macro to show the use of filtered element collector, collection iteration,
and use of GetClrType as a way to get the System.Type needed by element filtering.
"""
collector = FilteredElementCollector(self.Document)
collector.OfClass(clr.GetClrType(Material))
materials = collector.ToElements()
materialString = "Materials: \n"
for material in materials:
materialString += material.Name + "\n"
TaskDialog.Show("Python Sample", materialString)
Code language: Python (python)
Pour exécuter cette macro, il faut re construire le code après avoir passer la condition ligne 1 en True. La macro apparaitra alors dans le gestionnaire de macros.

En l’exécutant, on obtient la liste des matériaux utilisés dans le projet.

Intéressons-nous maintenant au code lui-même. Les lignes 5, 6 et 7 vont nous permettre d’abord d’accéder aux éléments du documents, puis de garder uniquement les matériaux (sous forme de chaîne de caractères) et d’enregistrer ceux-ci dans une liste.
A la ligne 8, nous créons la chaîne qui nous renverrons à la fin. Ligne 9 et 10, nous ajoutons avec une boucle for les différents matériaux à notre string. Enfin, ligne 11, nous renvoyons la liste des matériaux de façon analogue à celle utilisée dans notre macro précédente.
0 commentaire