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

Groupe Macros dans Revit, avec au dessus le gestionnaire cherché

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

Gestionnaire de macros

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.

Création du module

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

Création de la macro

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 :

Logiciel SharpDevelop, éditeur de code intégré à Revit

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 *

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

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')

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 ?')

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.

Notre fenêtre

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)

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.

ListMaterials dans le gestionnaire

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

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.


Annexes

Articles connexes

Catégories : Python

0 commentaire

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *