Depuis un bon moment, je cherchais un moyen de montrer l’utilité de Dynamo dans Civil 3D. Après réflexion, une idée m’est venue : partir d’un cas réel, un besoin fréquent, et détailler chaque étape du développement d’un script Dynamo.
J’ai donc décidé de vous partager cette réflexion et la création de ce script sous la forme d’une série de post LinkedIn, accessible avec les liens ci-dessous, et regoupré dans cet article :
- #0 Introduction et présentation du cas d’usage
- #1 Définir les besoins et structurer le projet Dynamo
- #2 Sélection et importation des données dans le script Dynamo
- #3 Traitement et ajustement des données dans Dynamo
- #4 Axe de référence et positionnement des annotations DWG
- #5 Génération des annotations DWG dans Civil 3D
Étape 0 : Définition du projet
𝗟𝗲 𝗰𝗮𝘀 𝗱’𝘂𝘀𝗮𝗴𝗲 𝗮̀ 𝘁𝗿𝗮𝗶𝘁𝗲𝗿 ?
Lors d’une inspection caméra de collecteurs, nous recevons un rapport qui détaille : Les anomalies détectées (fissures, joints déboîtés, obstructions…)
Leur position précise depuis un regard de départ
Le degré de gravité de chaque défaut, accompagné d’une photo





Ces informations sont essentielles pour évaluer l’état du réseau, mais leur report sur Civil 3D est fastidieux, long et répétitif : Extraction manuelle des données à partir d’un rapport papier ou PDF
Calcul des distances et positionnement manuel des anomalies
Saisie et création de blocs AutoCAD avec attributs pour chaque défaut
𝗟’𝗼𝗯𝗷𝗲𝗰𝘁𝗶𝗳 : 𝗴𝗮𝗴𝗻𝗲𝗿 𝗲𝗻 𝗽𝗿𝗲́𝗰𝗶𝘀𝗶𝗼𝗻 𝗲𝘁 𝗲𝗻 𝗲𝗳𝗳𝗶𝗰𝗮𝗰𝗶𝘁𝗲́
Avec Dynamo, nous allons automatiser ce processus en générant directement dans Civil 3D : Le positionnement automatique des défauts aux bonnes distances
Une symbologie pour représenter la gravité de chaque défauts.
La création d’un Property Sets pour structurer les données
𝟭𝟬 𝗲́𝘁𝗮𝗽𝗲𝘀 𝗽𝗼𝘂𝗿 𝘂𝗻 𝘀𝗰𝗿𝗶𝗽𝘁 𝗳𝗼𝗻𝗰𝘁𝗶𝗼𝗻𝗻𝗲𝗹 : Définir les besoins et structurer le projet
Organiser les données du rapport d’inspection
Récupérer les tronçons de collecteurs dans Civil 3D
Extraire les informations liées à la géomètrie
Placer les défauts aux bonnes distances
Ajouter des symboles et annotations
Générer un Property Set adapté aux besoins
Extraire les données et remplir le Property Sets (PSet)
Tester et optimiser le script → Vérifications, corrections et améliorations
Aller plus loin ? Export IFC ? Affichage des images dans Civil 3D
Symbologie du script
Afin de rendre les scripts dynamo, je conseil vivement d’utiliser les ‘Groupes’ et de les corlorer selon la symbologie recommandée.

Étape 1 : Définir les besoins et structurer le projet Dynamo
𝘈𝘷𝘢𝘯𝘵 𝘥𝘦 𝘴𝘦 𝘭𝘢𝘯𝘤𝘦𝘳 𝘥𝘢𝘯𝘴 𝘭𝘦 𝘥𝘦́𝘷𝘦𝘭𝘰𝘱𝘱𝘦𝘮𝘦𝘯𝘵 𝘥’𝘶𝘯 𝘴𝘤𝘳𝘪𝘱𝘵 𝘋𝘺𝘯𝘢𝘮𝘰, 𝘪𝘭 𝘦𝘴𝘵 𝘦𝘴𝘴𝘦𝘯𝘵𝘪𝘦𝘭 𝘥𝘦 𝘥𝘦́𝘧𝘪𝘯𝘪𝘳 𝘱𝘳𝘦́𝘤𝘪𝘴𝘦́𝘮𝘦𝘯𝘵 𝘭𝘦𝘴 𝘰𝘣𝘫𝘦𝘤𝘵𝘪𝘧𝘴 𝘦𝘵 𝘴𝘵𝘳𝘶𝘤𝘵𝘶𝘳𝘦𝘳 𝘭𝘦 𝘱𝘳𝘰𝘫𝘦𝘵. 𝘊’𝘦𝘴𝘵 𝘶𝘯𝘦 𝘦́𝘵𝘢𝘱𝘦 𝘤𝘭𝘦́ 𝘱𝘰𝘶𝘳 𝘨𝘢𝘳𝘢𝘯𝘵𝘪𝘳 𝘶𝘯 𝘸𝘰𝘳𝘬𝘧𝘭𝘰𝘸 𝘧𝘭𝘶𝘪𝘥𝘦 𝘦𝘵 𝘦𝘧𝘧𝘪𝘤𝘢𝘤𝘦.
𝗟𝗲 𝗯𝗲𝘀𝗼𝗶𝗻 𝗺𝗲́𝘁𝗶𝗲𝗿
Lors d’une inspection caméra des collecteurs, on obtient un rapport décrivant : Les anomalies détectées (ex. : fissures, joints déboîtés, obstructions)
Leur distance depuis le regard de départ
Leur niveau de gravité, parfois accompagné d’une photo
𝘓𝘦 𝘤𝘩𝘢𝘭𝘭𝘦𝘯𝘨𝘦 ?
Représenter ces données efficacement dans Civil 3D, afin d’aider à la prise de décision et à la planification des interventions.
Actuellement, le processus manuel comprend plusieurs étapes fastidieuses : Relecture du rapport et extraction des anomalies
Mesure et calcul manuel des distances
Positionnement des défauts dans Civil 3D
Création de blocs AutoCAD avec attributs pour chaque anomalie
Ajout d’annotations et d’informations complémentaires
Ce workflow est chronophage et source d’erreurs. L’idée est donc de l’automatiser avec Dynamo.
𝗢𝗯𝗷𝗲𝗰𝘁𝗶𝗳𝘀 𝗱𝘂 𝘀𝗰𝗿𝗶𝗽𝘁 𝗗𝘆𝗻𝗮𝗺𝗼
Importer et structurer les données du rapport d’inspection


Positionner les défauts aux distances exactes sur la polyligne
Ajouter des symboles et annotations selon la gravité du défaut
Associer des Property Sets (PSet) pour structurer les données
Le tout en garantissant : Un gain de temps significatif
pas d’erreur de report
𝗦𝘁𝗿𝘂𝗰𝘁𝘂𝗿𝗮𝘁𝗶𝗼𝗻 𝗱𝗲𝘀 𝗱𝗼𝗻𝗻𝗲́𝗲𝘀
Dans notre cas, les informations étaient fournies dans une base de données. Pour faciliter leur exploitation dans Dynamo, ces données ont été exportées sous la forme d’un fichier Excel contenant : La distance depuis le regard de départ
Le type d’anomalie
Le nom du fichier photo
Le degré de gravité

Une colonne supplémentaire, « AnnotationDWG », a été ajoutée pour contenir le texte qui sera affiché dans Civil 3D.
Étape 2 : Sélection et importation des données
𝘈𝘱𝘳𝘦̀𝘴 𝘢𝘷𝘰𝘪𝘳 𝘥𝘦́𝘧𝘪𝘯𝘪 𝘭𝘦𝘴 𝘰𝘣𝘫𝘦𝘤𝘵𝘪𝘧𝘴, 𝘯𝘰𝘶𝘴 𝘢𝘭𝘭𝘰𝘯𝘴 𝘪𝘮𝘱𝘰𝘳𝘵𝘦𝘳 𝘭𝘦𝘴 𝘥𝘰𝘯𝘯𝘦́𝘦𝘴 𝘯𝘦́𝘤𝘦𝘴𝘴𝘢𝘪𝘳𝘦𝘴 𝘥𝘢𝘯𝘴 𝘭𝘦 𝘴𝘤𝘳𝘪𝘱𝘵, 𝘲𝘶𝘪 𝘳𝘦𝘱𝘰𝘴𝘦 𝘴𝘶𝘳 :
𝟭. 𝗦𝗲́𝗹𝗲𝗰𝘁𝗶𝗼𝗻 𝗱𝘂/𝗱𝗲𝘀 𝗰𝗼𝗹𝗹𝗲𝗰𝘁𝗲𝘂𝗿(𝘀) 𝗱𝗮𝗻𝘀 𝗖𝗶𝘃𝗶𝗹 𝟯𝗗
L’utilisateur doit sélectionner les objets concernés dans Civil 3D. Ces objets permettrons de positionner les anomalies.
Actuellement, aucun contrôle n’est mis en place pour éviter une mauvaise sélection ou une saisie incomplète (Future amélioration).
𝟮. 𝗘𝘅𝘁𝗿𝗮𝗰𝘁𝗶𝗼𝗻 𝗱𝗲𝘀 𝗣𝗶𝗽𝗲 𝗡𝗲𝘁𝘄𝗼𝗿𝗸𝘀 (𝗗𝘆𝗻𝗮𝗺𝗼 𝗣𝗹𝗮𝘆𝗲𝗿)
Le script extrait la liste des Pipe Networks de Civil 3D pour affichage dans le Dynamo Player. Cette extraction permet de visualiser les réseaux disponibles.
Le Node Watch est défini comme ‘Est une sortie’
𝟯. 𝗜𝗺𝗽𝗼𝗿𝘁𝗮𝘁𝗶𝗼𝗻 𝗱𝗲𝘀 𝗱𝗼𝗻𝗻𝗲́𝗲𝘀 𝗱’𝗶𝗻𝘀𝗽𝗲𝗰𝘁𝗶𝗼𝗻 (𝗡𝗼𝗱𝗲 𝗜𝗺𝗽𝗼𝗿𝘁𝗘𝘅𝗰𝗲𝗹)
Le script demande à l’utilisateur de sélectionner un fichier Excel contenant les anomalies issues du rapport d’inspection caméra. Dynamo extrait ces données, en supprimant la première ligne (souvent les en-têtes du tableau). Ces entêtes sont stockée dans une liste (Pour une utilisation ultérieure : PSet)
Les données sont ensuite converties en une liste de listes (Transposées de ligne à colonne), prêtes à être traitées.
Ces données comprennent les types d’anomalies, distances, gravités et annotations.
𝟰. 𝗗𝗲́𝗳𝗶𝗻𝗶𝘁𝗶𝗼𝗻 𝗱𝗲 𝗹𝗮 𝗯𝗮𝘀𝗲 𝗱𝗲𝘀 𝗹𝗮𝘆𝗲𝗿𝘀 𝗖𝗶𝘃𝗶𝗹 𝟯𝗗
Un nœud String permet à l’utilisateur de saisir la base du nom des layers. Des suffixes seront automatiquement ajoutés dans le script (ex. : « _annot », « _DegatsGravites », « _Images »).
Cela garantit une cohérence dans la structure du fichier Civil 3D et facilite son exploitation.




Étape 3 : Traitement et ajustement des données
𝘗𝘢𝘴𝘴𝘰𝘯𝘴 𝘮𝘢𝘪𝘯𝘵𝘦𝘯𝘢𝘯𝘵 𝘢𝘶 𝘱𝘳𝘦𝘮𝘪𝘦𝘳 𝘵𝘳𝘢𝘪𝘵𝘦𝘮𝘦𝘯𝘵 𝘥𝘦𝘴 𝘥𝘰𝘯𝘯𝘦́𝘦𝘴
Après l’importation des données d’inspection, nous devons maintenant : Extraire et contrôler les informations
Formatter les informations sur les dégâts (Etiquette DWG)
Puis avec les longueurs des collecteurs et la localisation des dégâts : Ajuster la position des anomalies sur le collecteur en tenant compte des écarts de mesure
𝟭. 𝗘𝘅𝘁𝗿𝗮𝗰𝘁𝗶𝗼𝗻 𝗲𝘁 𝗳𝗼𝗿𝗺𝗮𝘁𝗮𝗴𝗲 𝗱𝗲𝘀 𝗱𝗼𝗻𝗻𝗲́𝗲𝘀 𝗱’𝗶𝗻𝘀𝗽𝗲𝗰𝘁𝗶𝗼𝗻
Les données du rapport sont récupérées sous forme d’une liste de listes dans Dynamo. Pour simplifier leur exploitation, chaque élément est extrait grâce à son index dans un Code Block.
Ensuite on contrôle ces valeurs via des Nodes ‘Watch’ Deuxième traitement, le formattage des futures annotations des dégâts. Les distances sont extraites sous forme de chaînes de caractères avec des zéros inutiles. Une étape de nettoyage est nécessaire pour obtenir un format cohérent avant l’affichage dans Civil 3D.
Une dernière concaténation, permet d’obtenir les futures annotations. Exemple : Fissure latérale (12.75) 𝟮. 𝗖𝗮𝗹𝗰𝘂𝗹 𝗱𝘂 𝗰𝗼𝗲𝗳𝗳𝗶𝗰𝗶𝗲𝗻𝘁 𝗱𝗲 𝗰𝗼𝗿𝗿𝗲𝗰𝘁𝗶𝗼𝗻
Les distances relevées par le robot caméra ne sont pas toujours exactes. La précision de mesure peut varier, ce qui entraîne des écarts entre la longueur totale du collecteur et la longueur mesurée par la caméra. Solution : calculer un coefficient de correction en comparant ces deux longueurs :
Longueur réelle du collecteur dans Civil 3D (somme des tronçons sélectionnés)
Longueur mesurée par la caméra (issue du rapport d’inspection)
Une fois ce coefficient obtenu, il sera appliqué à chaque anomalie pour corriger sa position et garantir un placement précis sur le tracé du collecteur.






Étape 4 : Axe de référence et positionnement des annotations DWG
𝘕𝘰𝘶𝘴 𝘢𝘷𝘰𝘯𝘴 𝘮𝘢𝘪𝘯𝘵𝘦𝘯𝘢𝘯𝘵 𝘥𝘦𝘴 𝘥𝘪𝘴𝘵𝘢𝘯𝘤𝘦𝘴 𝘤𝘰𝘳𝘳𝘪𝘨𝘦́𝘦𝘴 𝘱𝘰𝘶𝘳 𝘱𝘰𝘴𝘪𝘵𝘪𝘰𝘯𝘯𝘦𝘳 𝘭𝘦𝘴 𝘢𝘯𝘰𝘮𝘢𝘭𝘪𝘦𝘴 𝘴𝘶𝘳 𝘭𝘦 𝘤𝘰𝘭𝘭𝘦𝘤𝘵𝘦𝘶𝘳.
Cet étape consiste à déterminer précisément où placer les annotations dans Civil 3D :
𝗢𝗯𝗷𝗲𝗰𝘁𝗶𝗳 :
Créer une polycurve 2D qui représente le tracé continu du collecteur
Placer les points de référence aux distances des anomalies
Générer un vecteur perpendiculaire pour insérer les annotations DWG
𝟭. 𝗖𝗿𝗲́𝗮𝘁𝗶𝗼𝗻 𝗱𝗲 𝗹’𝗮𝘅𝗲 𝗱𝗲 𝗿𝗲́𝗳𝗲́𝗿𝗲𝗻𝗰𝗲 𝗱𝘂 𝗰𝗼𝗹𝗹𝗲𝗰𝘁𝗲𝘂𝗿
Le collecteur est composé de plusieurs tronçons. Afin de simplifier ceci, nous créons une seule polycurve 2D qui suit l’ensemble du tracé. 𝘗𝘰𝘶𝘳𝘲𝘶𝘰𝘪 𝘶𝘯𝘦 𝘱𝘰𝘭𝘺𝘤𝘶𝘳𝘷𝘦 ?
Elle offre une référence unique et continue
Elle permet de positionner précisément les annotations
𝟮. 𝗣𝗼𝘀𝗶𝘁𝗶𝗼𝗻𝗻𝗲𝗺𝗲𝗻𝘁 𝗱𝗲𝘀 𝗽𝗼𝗶𝗻𝘁𝘀 𝗱’𝗮𝗻𝗻𝗼𝘁𝗮𝘁𝗶𝗼𝗻 𝘀𝘂𝗿 𝗹𝗮 𝗽𝗼𝗹𝘆𝗰𝘂𝗿𝘃𝗲
Ensuit, nous plaçons les points des annotations selon les distances corrigées des anomalies. 𝘔𝘦́𝘵𝘩𝘰𝘥𝘦 𝘶𝘵𝘪𝘭𝘪𝘴𝘦́𝘦 : 𝘊𝘶𝘳𝘷𝘦.𝘕𝘰𝘳𝘮𝘢𝘭𝘈𝘵𝘗𝘢𝘳𝘢𝘮𝘦𝘵𝘦𝘳
La distance d’une anomalie est transformée en une valeur comprise entre 0.0 et 1.0 en fonction de la longueur totale de la polycurve.
Cette valeur est dans la valeur ‘param’ qui permet d’obtenir le point exact sur la courbe. 0.0 : Début de la polycurve
1.0 : Fin de la polycurve
La distance de l’anomalie est recalculée en proportion
Grâce à ce calcul, les anomalies sont toujours bien positionnées, même si la géométrie du collecteur est complexe.
𝟯. 𝗚𝗲́𝗻𝗲́𝗿𝗮𝘁𝗶𝗼𝗻 𝗱𝘂 𝘃𝗲𝗰𝘁𝗲𝘂𝗿 𝗱’𝗮𝗻𝗻𝗼𝘁𝗮𝘁𝗶𝗼𝗻
Les annotations doivent se situer à 90° par rapport à l’axe, nous générons un vecteur perpendiculaire à chaque point de référence. 𝘊𝘦 𝘷𝘦𝘤𝘵𝘦𝘶𝘳 𝘱𝘦𝘳𝘮𝘦𝘵 𝘥𝘦 :
Déplacer l’annotation à une certaine distance du collecteur
Déterminer l’angle du texte
Grâce à cette approche, les annotations seront toujours bien placées, avec une orientation adaptée à la géométrie du collecteur.




Étape 5 : Génératon des annotations DWG dans Civil 3D
𝘕𝘰𝘶𝘴 𝘢𝘷𝘰𝘯𝘴 𝘮𝘢𝘪𝘯𝘵𝘦𝘯𝘢𝘯𝘵 𝘵𝘰𝘶𝘵𝘦𝘴 𝘭𝘦𝘴 𝘪𝘯𝘧𝘰𝘳𝘮𝘢𝘵𝘪𝘰𝘯𝘴 𝘯𝘦́𝘤𝘦𝘴𝘴𝘢𝘪𝘳𝘦𝘴 : 𝘱𝘰𝘴𝘪𝘵𝘪𝘰𝘯, 𝘵𝘦𝘹𝘵𝘦, 𝘰𝘳𝘪𝘦𝘯𝘵𝘢𝘵𝘪𝘰𝘯… 𝘐𝘭 𝘦𝘴𝘵 𝘵𝘦𝘮𝘱𝘴 𝘥𝘦 𝘨𝘦́𝘯𝘦́𝘳𝘦𝘳 𝘭𝘦𝘴 𝘢𝘯𝘯𝘰𝘵𝘢𝘵𝘪𝘰𝘯𝘴 𝘋𝘞𝘎 𝘭𝘦 𝘭𝘰𝘯𝘨 𝘥𝘶 𝘵𝘳𝘢𝘤𝘦́ 𝘥𝘦𝘴 𝘤𝘰𝘭𝘭𝘦𝘤𝘵𝘦𝘶𝘳𝘴. 𝗢𝗯𝗷𝗲𝗰𝘁𝗶𝗳 : afficher chaque anomalie sur le plan, automatiquement, au bon endroit.
𝟭. 𝗠𝗶𝘀𝗲 𝗲𝗻 𝗳𝗼𝗿𝗺𝗲 𝗱𝗲𝘀 𝘁𝗲𝘅𝘁𝗲𝘀
Un Code Block en DesignScript est utilisé pour assembler les informations (type d’anomalie + distance) dans une chaîne de caractères lisible.𝘋𝘦𝘴𝘪𝘨𝘯𝘚𝘤𝘳𝘪𝘱𝘵 : Plus léger et plus clair que plusieurs nœuds classiques.
Dans les détails : On récupère quelques variables (Contents, pt d’insertion, …)
On défini quelques valeurs pour l’insertion du text.
𝟮. 𝗚𝗲𝘀𝘁𝗶𝗼𝗻 𝗱𝗲𝘀 𝗰𝗮𝗹𝗾𝘂𝗲𝘀
Avant de créer quoi que ce soit dans Civil 3D, il faut organiser les données, et notamment définir sur quel calque elle sera créée.
Une fonction dédiée dans Dynamo, via un node ‘𝘊𝘰𝘥𝘦 𝘉𝘭𝘰𝘤𝘬’ permet de créer les calques Civil 3D nécessaires. Structuration propre du dessin
Anticipation de la gestion de visibilité
Ensuite, il suffit d’apeller la fonction, de lui donner le suffixe et récupérer la base du nom du calque qui sera saisie par l’utilisateur via le Dynamo Player. 𝟯. 𝗚𝗲́𝗻𝗲́𝗿𝗮𝘁𝗶𝗼𝗻 𝗱𝗲𝘀 𝗮𝗻𝗻𝗼𝘁𝗮𝘁𝗶𝗼𝗻𝘀
Pour terminer, nous utilisons le node ‘𝘛𝘦𝘹𝘵.𝘉𝘺𝘊𝘰𝘯𝘵𝘦𝘯𝘵𝘴𝘗𝘰𝘪𝘯𝘵’, qui permet de : Placer le texte au bon point d’insertion
Appliquer l’orientation calculée avec le vecteur perpendiculaire
Chaque anomalie est ainsi clairement annotée sur le plan, avec la bonne rotation pour garantir une lecture fluide.
Un dernier node ‘Watch’ permet de controler les annnotations créées.





𝗣𝗿𝗼𝗰𝗵𝗮𝗶𝗻𝗲 𝗲́𝘁𝗮𝗽𝗲 :
Création des symboles d’anomalies Ajouter un symbole graphique pour représenter la gravité ou la nature du dégât
Créer et saisir un Property Sets qui regroupera toutes les informations utiles.
Affichage des photos des anomalies Réflexion sur la possibilité d’afficher sur le tracé 3D des collecteurs séléctionnés, via un plan de référence, l’image de l’anomalie extraite de la visualisation.
Conclusion & appel à collaboration
Ce projet démontre concrètement l’intérêt d’utiliser Dynamo dans un contexte métier exigeant, en lien avec Civil 3D.
Le traitement de ce cas d’usage reflète également ma capacité à :
- Comprendre les problématiques terrain,
- Structurer une solution complète et pérenne,
- Automatiser des processus métiers pour gagner en fiabilité et en temps.
Vous travaillez sur des projets similaires ?
Vous souhaitez gagner en efficacité sur vos flux BIM ou DAO ?
Vous aimeriez un soutien ou tout simplement une solution clé en main ?
Contactez-moi pour en discuter. Nous pourrons en discuter sans aucun engagement.