Dynamo repose entièrement sur une unité de base : le nœud. Tout ce que vous faites dans Dynamo passe par des nœuds que vous reliez entre eux. Ce guide couvre les nœuds essentiels, la logique des listes, les nœuds spécifiques à Revit et les bonnes pratiques pour construire vos premiers scripts.
⚡ Résumé de l'article
- Un nœud Dynamo est une brique de traitement : il reçoit des données en entrée et produit un résultat en sortie.
- Chaque nœud a des ports d'entrée (gauche) et de sortie (droite) avec des types de données définis.
- Dynamo manipule des listes partout : apprendre la logique de liste est la clé pour débloquer 80 % des scripts.
- Les nœuds Revit : Element.GetParameterValueByName, FamilyInstance.ByPoint, All Elements of Category.
- Un script robuste utilise Watch pour vérifier les données à chaque étape ; ne jamais construire à l'aveugle.
Qu'est-ce qu'un nœud dans Dynamo ?
Dans Dynamo, tout passe par des nœuds. Un nœud est une opération encapsulée : il reçoit des données, effectue un traitement, et renvoie un résultat. Vous reliez ces nœuds entre eux avec des câbles pour créer un flux de travail visuel, sans écrire une seule ligne de code.
Cette approche s’appelle la programmation visuelle. Pour les architectes et ingénieurs BIM qui n’ont pas de formation en développement, c’est une entrée accessible dans l’automatisation. J’ai vu des projeteurs sans expérience en programmation réaliser leur premier script fonctionnel en moins d’une journée de formation.
Anatomie d'un nœud : les 5 parties clés
Chaque nœud Dynamo se compose de cinq éléments que vous apprendrez à lire instantanément.
Nom du nœud
Le nom indique l’opération effectuée. Il suit souvent le format Catégorie.Opération (ex. : Element.GetParameterValueByName). La catégorie avant le point vous dit dans quel domaine le nœud opère ; l’opération vous dit ce qu’il fait.
Ports d'entrée (gauche)
Les ports d’entrée sont sur le côté gauche du nœud. Chaque port attend un type de donnée précis : un nombre, une chaîne de texte, un élément Revit, une liste… Survolez le port pour voir son type et sa description. Certains ports ont des valeurs par défaut ; d’autres sont obligatoires.
Port de sortie (droite)
Le port de sortie est sur le côté droit. Un nœud peut avoir plusieurs sorties. Chaque sortie peut être connectée à plusieurs nœuds en aval. C’est ce qui permet de réutiliser une valeur dans plusieurs branches du script.
Zone de prévisualisation
Le texte sous le nœud affiche la valeur actuelle de la sortie. C’est votre premier outil de débogage : si la valeur affichée ne correspond pas à ce que vous attendez, le problème est dans ce nœud ou en amont.
État de la prévisualisation
Un nœud peut être en état Normal (fond gris), Avertissement (fond jaune) ou Erreur (fond rouge). Un nœud en jaune a exécuté mais produit un résultat inattendu (souvent null). Un nœud en rouge a échoué : lisez le message d’erreur en survolant l’état.
Les types de nœuds essentiels
La bibliothèque Dynamo contient des centaines de nœuds. Pour débuter, concentrez-vous sur quelques familles fondamentales.
Nœuds de données (Input)
Number, String, Boolean : ces nœuds créent des valeurs fixes dans votre script. Le nœud Number Slider crée un curseur interactif, ce qui est très utile pour tester différentes valeurs sans modifier le script.
Nœuds de liste
List.Create, List.Map, List.Filter, List.GetItemAtIndex : ces nœuds sont indispensables. Dans Dynamo, presque tout est une liste. Maîtriser ces quatre nœuds résout la majorité des problèmes que rencontrent les débutants.
Nœuds Math et logique
Math.Add, Math.Multiply, ==, &&, If : ces nœuds permettent d’effectuer des calculs et des conditions. Le nœud If en particulier est structurant ; il renvoie une valeur si la condition est vraie, une autre sinon.
Nœuds Watch
Le nœud Watch affiche la valeur exacte qui le traverse. Insérez-en après chaque nœud critique lors du développement. En formation, c’est la première chose que j’enseigne : ne jamais construire un script sans surveiller les données intermédiaires.
Comprendre les listes dans Dynamo
Dynamo traite quasiment toutes les données sous forme de listes. Même une valeur unique est techniquement une liste d’un élément. Comprendre comment les listes fonctionnent est la clé qui distingue les scripts qui marchent de ceux qui échouent silencieusement.
Listes simples et listes de listes
Une liste simple contient des éléments du même type : [« Mur A », « Mur B », « Mur C »]. Une liste de listes contient des listes : [[« Mur A », « Mur B »], [« Poteau 1 »]]. La plupart des erreurs de débutants viennent d’une confusion entre les deux niveaux de liste.
Lacing : Shortest, Longest, Cross Product
Quand vous connectez deux listes à un nœud à deux entrées, Dynamo doit décider comment les apparier. Shortest : s’arrête à la plus courte. Longest : répète le dernier élément. Cross Product : toutes les combinaisons possibles. Faites un clic droit sur le nœud pour changer le mode de lacing.
Niveaux de liste (@L1, @L2)
Dynamo 2.x a introduit les niveaux de liste (List Level). En cliquant sur la flèche d’un port d’entrée, vous pouvez spécifier à quel niveau de la liste vous souhaitez opérer. C’est une fonctionnalité puissante qui remplace beaucoup de nœuds List.Map imbriqués.
Connecter les nœuds : bonnes pratiques
La qualité d’un script Dynamo se juge aussi à sa lisibilité. Un script bien cablé se lit de gauche à droite, sans croisements de câbles ni noeuds isolés.
Grouper les nœuds par logique
Sélectionnez un ensemble de nœuds et appuyez sur Ctrl+G pour les regrouper. Donnez un nom explicite à chaque groupe : « Collecte des murs », « Filtrage par type », « Mise à jour des paramètres ». Vous retrouverez votre script six mois plus tard sans le relire intégralement.
Nommer les nœuds
Double-cliquez sur le titre d’un nœud pour le renommer. Sur les nœuds complexes ou les Code Blocks, un nom explicite évite de devoir lire le contenu pour comprendre le rôle.
Code Block : le nœud universel
Le Code Block (touche double-clic sur le canvas, ou DesignScript) permet d’écrire des expressions directement : 0..100..10 crée une séquence, [1,2,3] crée une liste. C’est souvent plus compact et lisible que d’utiliser plusieurs nœuds séparés.
Nœuds spécifiques à Revit
Dynamo for Revit ajoute des centaines de nœuds dédiés à l’interaction avec le modèle. Les connaître réduit le temps de développement de vos scripts de moitié.
Collecter des éléments
All Elements of Category retourne tous les éléments d’une catégorie (murs, portes, fenêtres…). All Elements of Family Type filtre par type de famille. Element.GetParameterValueByName lit la valeur d’un paramètre nommé. Ces trois nœuds couvrent 80 % des besoins de collecte.
Modifier des éléments
Element.SetParameterValueByName écrit une valeur dans un paramètre. L’opération s’effectue dans une transaction Revit automatique ; un message Annuler apparaît dans Revit après exécution. Element.Move déplace un élément, Element.Rotate le fait pivoter.
Créer des éléments
FamilyInstance.ByPoint place une famille à une position XYZ. Wall.ByCurveAndHeight crée un mur depuis une courbe. Ces nœuds s’appuient sur des points ou des courbes que vous aurez générés en amont avec des nœuds de géométrie.
Déboguer un script avec des nœuds
Le débogage est la compétence que les tutos n’enseignent presque jamais. C’est pourtant ce que vous ferez 50 % du temps au début.
Isoler le problème
Désactivez les nœuds en aval (clic droit > Gel) pour isoler la partie qui pose problème. Remontez le script de droite à gauche jusqu’au premier nœud rouge ou jaune. C’est là que la donnée se corrompait.
Watch3D pour la géométrie
Pour les scripts qui créent de la géométrie, le nœud Watch3D affiche une prévisualisation 3D. C’est indispensable pour vérifier que vos courbes et points sont bien positionnés avant de créer des éléments Revit.
Construire son premier workflow
La meilleure façon d’apprendre est de construire un script concret et utile. Voici la séquence que je recommande en formation pour un premier script réel.
Objectif : renommer des niveaux
Collectez tous les niveaux du projet avec Level.All. Lisez leur nom actuel avec Level.Name. Construisez les nouveaux noms avec String.Concat. Écrivez les nouveaux noms avec Element.SetParameterValueByName (paramètre : « Name »). Vérifiez dans Revit que les niveaux ont été renommés.
Prochaines étapes
Une fois ce premier script maîtrisé, explorez List.Map pour traiter des listes de listes, le Code Block pour des expressions compactes, et les packages Clockwork et archi-lab pour des nœuds supplémentaires.
