Réponses aux questions posées à Abdelhakim BENATTIA, Ingénieur Modélisation de Projets de construction, lors du webinaire du mercredi 25 mars sur le thème « Automatisation de taches et programmation de macros dans Revit en langage C# ».

Vous avez été très nombreux à suivre le webinaire dont le replay est disponible ici. C'est pourquoi nous avons transmis à Abdelhakim BENATTIA vos questions, auxquelles il a répondu par écrit. Nous publions donc en intégralité ses réponses.


1. Quelle sont les connaissances à acquérir pour pouvoir arriver à maîtriser les macros ?

Des bases en C# ou Python, une bonne maîtrise de Revit en modélisation et de son API. Une bonne connaissance de l'organisation des projets ainsi que des workflows, pour proposer des programmes utiles.


2. Qu'est ce qui vaut mieux : Faire un plug-in ou une macro ?

Cela dépend du type de développement et de la stratégie de l'entreprise :

  • Pour les petits développements : Une macro pour faciliter le partage et la diffusion, au sein des équipes.
  • Pour les gros développements : Plugin pour sécuriser le code, permet de mettre en place des licences, gérer les droit d'accès, etc... Avec un plugin, vous diffusez juste une DLL, l'utilisateur n'a pas accès au code source.

Les macros sont utiles pour les tests car on n'a pas besoin de fermer Revit pour régénérer le code contrairement aux plugins.


3. Quel est le gros avantage d'une macro (C#) par rapport à Dynamo (Python) ?

  • Possibilité d'utiliser plusieurs langages (c# , Python , vb.net), les exemples SDK de Revit sont fournis en C#.
  • Gestion des interfaces utilisateur plus facile (Windows form ou WPF)
  • Possibilité de connecter plus facilement l'API de Revit avec les API d'autres logiciels ou plateformes
  • Possibilité de détecter et de gérer des évènements qui se produisent dans la maquette (pas faisable avec Dynamo).
  • Code plus facile à organiser et à optimiser avec les classes (point de vue personnel).
  • Plus de liberté, vous ne dépendez pas de ce qu'ont fait les autres dans leurs nœuds et vous n'êtes jamais bloqué par un nœud qui vous manque.
  • Sharpdevelopp et Visual Studio facilitent le code avec l'IntelliSense qui est absente dans Dynamo, coder ses propres nœuds directement dans Dynamo est un enfer.
  • Le point fort de Dynamo c'est de pouvoir générer des formes géométriques complexes garce à des formules mathématiques. Dynamo est bien pour commencer et pour ceux qui n'aiment pas coder.

Attention à n'utiliser que des nœuds dont vous êtes sûrs de la provenance ou que vous avez vérifié ligne par ligne. Un nœud non officiel trouvé sur internet peut constituer un cheval de Troie. Il suffit d'une ligne de code bien dissimulée à un hacker pour envoyer un virus sur votre système.


4. Anglais ou français ça ne pose pas de souci ? 

Si le Revit installé sur votre poste est une version fr, il faut jongler entre les deux , parfois il faut utiliser l'anglais et parfois le français dans vos fonctions, cela dépend des fonctions.

Des bases en anglais sont nécessaires pour fouiller un peu dans les forum. On ne trouve pas toujours ce qu'on veut en français, et les exemples Autodesk sont en anglais.


5. Peut-on travailler directement sur des familles (.rfa )avec les macros ?

Oui faisable pour modifier ou rajouter des données aux familles. on l'a déjà fait.
Sélection de familles grâce à des filtres, ouvrir chaque famille, injection de données depuis un fichier Excel ou autre. Lancement d'une sauvegarde et rechargement dans la bibliothèque.

La modification des géométries (extrusion, révolution, ect…) en revanche me semble plus compliquée. Mais s'il s'agit de familles paramétriques, en modifiant les paramètres d'occurrence ou de type via l'API les géométries vont suivre.


6. Est-ce qu'une macro est valable pour toutes les versions de Revit ou faut-il les adapter ?

En migrant un document RVT d'une version à une autre, les macros qu'ils portent sont convertis également.

Il faut faire des macros sur une ancienne version Revit, puis les migrer sur plusieurs versions antérieures pour pouvoir les utiliser, comme pour les familles et gabarits de projets.

Est-ce que la macro pour vérifier le doublon marche aussi pour les familles systèmes ? (Doublon de gaine, canalisations, etc..), parce que normalement Revit ne trouve pas ces types de doublons avec les avertissements.

Les fonctions montrées lors de ces webinaires servaient uniquement à montrer ce qu'on pouvait faire, pour traiter les doublons des familles systèmes on utilise d'autres fonctions basées sur l'analyses des géométries et des connecteurs, cela aurait été compliqué d'aborder tout ça en 20 min.

Avec une Macro, quelle est la méthode pour scinder les familles systèmes (par exemple scinder les canalisatons et les gaines traversant les dalles) ?


Les plus rapides et les simples :

  • MechanicalUtils.BreakCurve (doc, gaine.Id ,point) pour les gaines.
  • PlumbingUtils.BreakCurve (doc, canalisation.Id ,point); pour les canalisations

Exemple ci-dessous pour scinder au milieu. Pour scinder au niveau des sols il faut calculer le point d'intersection entre la ligne de l'élément et les faces supérieures et inférieures du sol en clash avec l'élément.


7. Est-ce qu'on peut demander à REVIT de sortir les quantités directement avec une macro ?

Oui on peut piloter Excel depuis une macro Revit, l'intérêt est de pouvoir filtrer et regrouper les éléments et traiter les données grâce à des analyses et des calculs avant de les extraire dans des tableaux personnalisés qu'on ne peut obtenir directement avec les nomenclatures Revit. On peut même extraire des quantités vers des base de données (Access, SQL, ect.. )

Exemple : analyse surface vitrée détaillé pour le service CVC à l'aide d'une petite macro


  Une question ? N'hésitez pas à la poser en commentaire !