Accéder au contenu principal

Le guide et le média de l'écosystème construction numérique et BIM

Espace membre

Thématique header

Dynamo: identifiant automatique

MP mélanie pecheux
15 juillet 2020
4.78K
10
Bonjour,

Je suis débutante sur Dynamo mais avec quelques recherches, j'ai réussi à trouver et modifier un script pour mettre un identifiant automatique sur mes éléments porteurs.

L'idée est de numéroter par niveau et par coordonnées (x,y comme la lecture d'un livre...). Exemple: 1.1 pour niveau 1, poteau/poutre 1

Le soucis que je rencontre est que la numérotation commence à 0 au lieu de 1.
Ensuite, je ne sais pas comment faire pour que l'identification se fasse en x et y et pas "n'importe comment" (j'ai beaucoup de mal avec les noeuds et l'anglais n'aide pas du tout...).

J'ai mis en pièce jointe mon script, merci pour votre aide :)

Photos

hxrel-u

Morphé
Plugin pour Grasshopper et Rhino 8 destiné à la fabrication additive et à la conception avancée, introduisant la modélisation implicite et voxel pour la création de géométries complexes.
BIMR.NET
Modeleur BIM textuel fonctionnant entièrement dans le navigateur, permettant d'écrire des scripts Python pour générer des fichiers intermédiaires et compiler des modèles en IFCX pour la visualisation.
ZWCAD
Logiciel de CAO 2D et 3D orienté dessin DWG, permettant aux architectes, ingénieurs et modeleurs de produire et modifier des plans, annotations et mises en page tout en exploitant des...
PIComposer Basic Edition
Outil de gestion de données BIM et PMI basé sur le schéma ISO 10303, permettant de restructurer, transformer et transférer des modèles IFC et STEP via une interface de programmation...
GSA
Logiciel de calcul et d’analyse par éléments finis pour structures complexes, permettant de modéliser la géométrie et les chargements avec une séparation explicite entre structure et modèle d’analyse.
ggRhinoIFC
Plugin pour Rhino et Grasshopper facilitant l'import, la manipulation, la conversion et l'export de fichiers IFC, permettant aux modeleurs BIM et architectes de structurer leurs données IFC.
ArcGIS Pro
Logiciel SIG bureautique centralisant cartes 2D, scènes 3D et données spatiales pour visualiser, éditer et analyser des projets complexes, notamment dans les domaines de l'urbanisme et des infrastructures.
Fologram
Plugin reliant Rhino et Grasshopper à des appareils de réalité mixte pour visualiser des modèles, piloter des interactions paramétriques et assister la fabrication ou l'implantation sur site.
Rhino.Inside.Revit
Plugin permettant d'exécuter Rhino et Grasshopper au sein de Revit pour créer des éléments natifs et piloter la conception paramétrique, destiné aux modeleurs BIM, architectes et ingénieurs.
Versur
Plateforme d’orchestration de workflows IA pour les architectes et designers, permettant d’assembler des agents spécialisés en graphes visuels pour automatiser les processus de conception métier.
Armox AI
Plateforme cloud de génération visuelle par IA permettant aux architectes et designers de transformer des croquis et plans en rendus photoréalistes et vidéos via des workflows nodaux réutilisables.
Wallacei
Plugin pour Grasshopper 3D dédié à l'optimisation évolutionnaire multi-objectifs, permettant aux architectes et designers d'analyser, de regrouper et de sélectionner des variantes de conception.
Rhino 3D
Application de modélisation 3D polyvalente pour la conception géométrique, le paramétrage via Grasshopper et la préparation à la fabrication, utilisée pour les formes libres et les études urbaines.
Tapir
Plugin open source pour Archicad exposant les fonctions internes via une API JSON, permettant le pilotage par Python, Grasshopper et des agents IA en langage naturel.
ShapeDiver
Plateforme cloud exécutant des définitions Grasshopper dans un navigateur pour les publier comme applications 3D interactives, avec des modes d’exposition variés et des intégrations métiers.
Runchat
Plateforme de conception assistée par agents combinant un chat, un canvas visuel de workflows et des connecteurs vers des logiciels de CAO pour générer des images, des scripts et des...
Nodepen
Plateforme de conception générative permettant de créer, exécuter et partager des scripts Grasshopper dans le navigateur, avec édition collaborative et un agent conversationnel intégré.
Beegraphy
Plateforme cloud de conception paramétrique avec éditeur visuel par nœuds, elle permet de générer des géométries 3D, des configurateurs intégrables et des fichiers de fabrication.
OPEN GEOMETRY
Noyau CAO open source natif web, il fournit les briques de bas niveau pour construire des outils de conception architecturale dans le navigateur, tels que la modélisation de plans et...
Karamba
Plugin pour Grasshopper (Rhino) de calcul de structure par éléments finis, il permet la conception paramétrique, l'analyse de second ordre, l'optimisation de sections et l'export vers Robot ou Rstab.
Rhinoceros Interface
Plugin pour Rhino et Grasshopper qui intègre des objets de calcul structurel, des appuis, des charges et des propriétés de section pour constituer un modèle analytique directement dans l'environnement de...
Raven
Plugin pour Rhino 8 ajoutant une interface en langage naturel dans Grasshopper pour construire, modifier et organiser des définitions paramétriques, avec des profils de contexte partageables.
Conduit
Plugin Grasshopper pour Rhinoceros 3D qui affiche des visualisations de données en direct dans le viewport 3D, met à jour les rapports au fil des modifications du graphe et est...
LunchBox
Plugin pour Grasshopper centré sur la modélisation paramétrique, le traitement de données et l’analyse géométrique, incluant des composants d’apprentissage automatique pour architectes et designers.

hxrel-m

Caneco BIM
Plugin Revit pour les projets d'installations électriques synchronisant en temps réel les données avec Caneco BT pour automatiser le routage des câbles et enrichir la maquette.
new.family
Outil web de génération de familles Revit paramétriques à partir de descriptions textuelles, d'URL de produits ou de fiches techniques, destiné aux modeleurs BIM et architectes.
BIMR.NET
Modeleur BIM textuel fonctionnant entièrement dans le navigateur, permettant d'écrire des scripts Python pour générer des fichiers intermédiaires et compiler des modèles en IFCX pour la visualisation.
Geopogo Claude to Revit Plugin
Plugin connectant les assistants IA Claude et GPT à Autodesk Revit pour créer et modifier par le langage naturel des éléments BIM natifs destinés aux architectes et modeleurs.
TrussLab
Application web de modélisation, d'analyse par éléments finis, de vérification réglementaire et d'optimisation paramétrique de fermes métalliques dédiée aux ingénieurs structure et modeleurs BIM.
Resolving
Plateforme de gestion de projet pour la construction et l'immobilier regroupant GED, suivi terrain, formulaires, planning et revue BIM.
SmartRouting
Plugin natif pour Revit dédié à la tuyauterie industrielle, permettant de calculer automatiquement des chemins 3D, d'insérer des composants et d'exporter des fichiers PCF.
SiloLink
Plateforme cloud de coordination BIM centrée sur l'examen et la hiérarchisation des résultats de détection de clashes pour les professionnels du bâtiment.
SpaceSync
Plateforme de programmation et d'esquisse architecturale regroupant sur un espace unique les tâches de brief, de volumétrie et de présentation pour les phases amont.
RayCAD
Plugin Revit qui automatise le placement des étiquettes sur les vues MEPF selon des règles configurées, sans recouvrement, tout en incluant des utilitaires de production de réseaux.
GRAITEC Steel
Plugin de modélisation et de dessin de détail pour structures métalliques, escaliers et garde-corps, utilisé dans Advance Steel et Inventor.
Ask Gaudi
Plateforme de recherche produit en ligne pour architectes et modeleurs BIM, répondant en langage naturel aux questions techniques à partir de données fabricants et de documents sources.

hxrel-t

nVibe
Plateforme de création d'applications métier permettant aux professionnels de l'architecture, de l'ingénierie et de la construction de concevoir des outils en décrivant leurs besoins en langage naturel.
Reiner AI
Plateforme d'intelligence artificielle combinant un assistant conversationnel et des agents autonomes pour les bureaux d'études et entreprises de construction, intégrant une base normative sectorielle.
Gradon
Agent intelligent destiné aux ingénieurs en infrastructure et en structure, capable de réaliser de bout en bout des travaux de calcul, de rédaction de rapports et de production de plans...
ARES Neo
Solution cloud d automatisation et de production de documentation 2D à partir de modèles Revit, IFC et Rhino, conçue pour générer des plans, coupes, élévations et appliquer des annotations paramétrables.
Conduit AEC
Service logiciel de génération d'applications internes pour Revit, AutoCAD et Autodesk Construction Cloud à partir de descriptions en langage naturel, avec gestion des versions et déploiement ciblé.
Forma Construction Connect
Plateforme d'intégration sans code ou à faible code connectant les modules Forma à des applications tierces pour automatiser les workflows et synchroniser les documents et données projet.
Volve
Plateforme d'analyse documentaire assistée par IA dédiée aux appels d'offres et contrats, permettant de structurer, comparer et vérifier la conformité des dossiers pour les équipes de construction.
PIComposer Basic Edition
Outil de gestion de données BIM et PMI basé sur le schéma ISO 10303, permettant de restructurer, transformer et transférer des modèles IFC et STEP via une interface de programmation...

Solutions citées

Dynamo
Environnement de programmation visuelle pour la conception calculatoire, il assemble des graphes de nœuds...
Revit
Logiciel BIM de modélisation bâtiment, il permet de produire une maquette paramétrique unique et...

Réponses

MP mélanie pecheux
·
En cherchant j'ai trouvé d'où venait les index non renseignés: ce sont des poteaux porteurs mais crée in situ (car forme particulière), je les numéroterais donc à la main pour ceux là.

Pour le reste, j'ai réussi à faire ce que je pensais, j'ai testé sur 3 niveaux et ça marche!
Par contre je n'ai pas utilisé de List.GroupByKey.... mais ça fonctionne après plusieurs FilterByBoolMask.

Je t'ai mis le fichier ci-joint si ça peut te servir ;)

Rejoindre la discussion

GJ Guillain Jolivet
·
Des index non renseignés? Si tu prends le niveau de base, c'est bizarre qu'il renvoie des valeurs vides (sauf si c'est un paramètre que tu remplies toi même). Et attention, pcq si tu vires des index de ta liste de niveau, après tu manipuleras des listes de coordonnées, et de poteaux qui seront de tailles différentes de ta liste de niveau, et ça va foirer à un moment. Mieux vaut voir pourquoi il renvoie des valeurs vides.

Si tu veux fonctionner par niveau, alors effectivement tu fais un tri par niveau, et à partir de ta liste de booléen, tu vas chercher dans ta liste de poteaux tous les indices correspondants. Ce qui revient à faire un List.GroupByKey!
MP mélanie pecheux
·
En fait au début, j'avais mis niveau de base et ça me met le même résultat... En cherchant ce matin, j'ai vu que dans ma liste, il y a des index de niveau non renseigné (un index avec du vide à côté) d'ou le fait qu'il ne puisse pas le convertir.

J'essaie un list.clean mais ça ne nettoie rien ^^ donc je dois trouver un noeud qui enlève les valeurs vide ou nul (et non null).

Concernant le non du niveau, c'est déjà réglé à la fin du script, j'ai mis un groupe "pour numéroter par niveau" et je l'ai mis en entrée.

En clair je souhaiterais faire une ligne par niveau en filtrant avec "R+0", "R+1", "R+2"... car ce sont des noms que l'on retrouvera dans plusieurs projet. Je pensais utiliser un String.contains par ligne et ne prendre que les True pour trier ensuite en X et Y avec le reste de mon script

Merci de ton aide en tout cas :)
GJ Guillain Jolivet
·
C'est quoi le paramètre "Niveau" que tu utilises? C'est toi qui l'a créé? Ce qui est bizarre c'est que sur ta capture d'écran, ça te renvoie bien un objet revit de type Niveau, et que derrière il t'envoie une erreur. J'ai essayé ton script avec "Niveau de base" comme paramètre, et je n'ai pas d'erreur.

Ensuite pour le tri et le nommage de tes poteaux, tu fais la même chose que pour ton tri en Y et en X, avec une couche de tri supplémentaire. Un List.GroupByKey de ta liste de poteaux avec tes étages en clefs, puis ton tri en Y puis en X.

Après si tu veux appeler tes poteaux P.2.11 plutôt que P.R+2 44.36.11, il faut trouver un moyen de transformer "R+2 44.36" en "2". Soit c'est un paramétrage avant où tu renseignes un numéro d'étage (à la main ou avec un script dynamo), soit tu dis directement dans ton script que "R+1 41.57" = "1", "R+2 44.36" = "2",... mais ça veut dire adapter ton script à chaque projet.
MP mélanie pecheux
·
Je reviens pour avoir de l'aide afin d'améliorer encore mon script :D

Comme tu l'a suggéré Guillain, je prend tout les poteaux de mon projet et je tente de trier par niveau avant le reste.
J'ai donc fais 2 lignes: une pour le RDC et l'autre pour le R+1

J'ai réussi à prendre le niveau de mes poteaux mais quand je demande juste le nom, il m'indique une erreur (bien que ça ai l'air de marcher...) et ensuite, je ne vois pas comment faire pour que le bon niveau aille sur la bonne ligne (et donc trie mes poteaux par la suite)

J'ai tenté boolean mais je n'ai que des erreurs...

Rejoindre la discussion

MP mélanie pecheux
·
Merci beaucoup, ça marche!

En fait il n'y avait pas besoin d'autant de noeud ^^ mais l'idée était là :)
GJ Guillain Jolivet
·
Tu mets un booléen dans ton script : SI true -> liste reverse, SI false -> liste normale. En configurant ce booléen en entrée de script, tu auras juste à exécuter ton script via le lecteur dynamo, et si le sens ne te conviens pas, tu le ré-exécutes en cochant l'autre option.
MP mélanie pecheux
·
En fait je ne veux pas que mon script s’exécute dans plusieurs sens. C'est juste que dans mon script, j'ai un noeud "reverse" qui me permet de numéroter dans un sens ou l'autre mon plan et il ne marche que s'il est relié a "list.flatten" sur ma 2e capture...
Seulement, on est obligé d'ouvrir dynamo pour le relier et voir quelle numérotation est la meilleure (suivant la configuration du plan).

J'aimerais faire une entrée ou l'on peux "activer" reverse ou non et voir le resultat directement à partir du lecteur dynamo.
J'ai tenté avec le noeud boolean mais j'ai l'impression que ça ne me donne que des vrai/faux après et des résultats null... par contre je n'ai pas pensé au if car pour moi il n'y a pas de conditions, juste l'un ou l'autre (d'où mon noeud "or";).
GJ Guillain Jolivet
·
Je ne suis pas bien sûr d'avoir compris ce que tu voulais faire... Mais si tu veux choisir "vrai" ou "faux", via le lecteur dynamo dans revit et que ton script s'exécute dans un sens ou dans l'autre selon ce qui est coché, il suffit de créer un noeud Boolean, tu le définit en tant qu'entrée de ton script (clique droit > Est une entrée). Et derrière tu fais ton script avec un if qui te renvoie la liste inversée ou non.
MP mélanie pecheux
·
J'ai un autre "souci" sur ce script:
J'aimerais mettre une entrée pour le lecteur dynamo afin de choisir le sens de lecture sans ouvrir dynamo lui-même.

Je pense qu'il faut faire 2 lignes du style "vrai = lecture du haut vers le bas (avec reverse)" et "faux= lecture du bas vers le haut (sans reverse). En clair, je veux un sens OU l'autre.

J'ai mis plein de noeuds mais impossible d'avoir le résultat souhaité, je pense que ce point serait pas mal pour d'autres scripts.
MP mélanie pecheux
·
Ci-joint le script en capture d'écran, j'ai légèrement modifier pour ajouter une entrée pour choisir le premier numéro de la liste
AH Agathe Hoffart
·
Tu peux refaire une capture d'écran de ton dernier script s'il te plait? :) Merci beaucoup!!
MP mélanie pecheux
·
Après pas mal de bidouillages et recherches sur internet, j'ai réussi à faire un script qui marche avec un préfixe pour le niveau (ici 1.xxx )

Ce que je fais, c'est que j'isole la catégorie par niveau, je sélectionne tout mes poteaux et je met le numéro/texte souhaité.
J'ai mis la sélection et le numéro d'étage en entrée pour que ça soit plus fluide avec le lecteur.

Si je veux faire un autre étage, je copie le script en dessous et je refais la même manip'

Si ça peut aider d'autres personne =)

Pour répondre à Guillain, quand je supprime un poteau, rien ne change car je ne fais pas le script en automatique mais en manuel. S'il y a des modifications, je change au cas par cas au fur et à mesure mais au moins je gagne du temps dès le début avec une numérotation plus ou moins correct.

Rejoindre la discussion

GJ Guillain Jolivet
·
Est-ce qu'à tout hasard tu as des bandes noyées? Quand tu lances le script, est-ce que dans les résultats du noeud Element.Geometry, tu as un "Empty List"? Si c'est le cas, lorsque tu applatis ta liste, tu vas décaler tes valeurs de Y. Donc quand tu vas chercher à rattacher cette liste de coordonnée à ta liste de poutre ça va tout se décaler et ta numérotation n'aura plus trop de sens. Il faut donc identifier le problème de pourquoi il y a une empty list.

Autre point, si tu bosses sur plusieurs niveaux, Dynamo s'exécute indépendamment de l'altimétrie, il faudrait trier par niveau avant. Pour ma part, je renseigne manuellement le numéro de niveau dans un paramètre et j'utilise ce paramètre pour trier et nommer mes poutres.

Après je ne sais pas sur quel genre de projet tu travailles, mais je viens d'essayer le script sur un de mes projet (type centre commercial) et la numérotation en X et Y n'a vite plus beaucoup de sens (j'ai des poutres dans tous les sens, en biais, alignés ou non sur les poteaux,...). D'autant qu'à chaque fois que tu vas ajouter/supprimer/modifier une poutre, ta numérotation va changer. Donc au cours d'un projet à chaque modification de ta poutraison, tu auras une nouvelle numérotation.
MP mélanie pecheux
·
Guillain Jolivet, j'ai repris ton script pour essayer de "classer" les éléments car de mon coté, ça ne se range pas bien.

J'ai fais le même principe avec les X mais je ne sais pas quel noeud utiliser pour lui faire comprendre qu'il faut nommer en X puis en Y...

Je trouve dommage que dynamo ne soit pas plus intuitif...

Rejoindre la discussion

GJ Guillain Jolivet
·
Voila une capture du script
RM Rémy MAURCOT
·
Guillain Jolivet j'ai pas compris ta question, ta définition marche très bien.
AH Agathe Hoffart
·
Génial! Merci beaucoup pour ta réactivité :)
MP mélanie pecheux
·
Bonjour,
Voici les captures d'écran des 2 scripts, j'espère que l'on voit bien (j'ai dû les mettre sur un fichier word, le site ne prennais pas mes images...)

Rejoindre la discussion

AH Agathe Hoffart
·
Salut! Peux-tu mettre une capture d'écran de ton script? Je n'arrive pas a ouvrir le fichier sur dynamo
GJ Guillain Jolivet
·
Bonjour,

personnellement, j'utilise le centre de gravité pour trier mes éléments. Ensuite je trie simplement sur le Y. Si deux poutres ont le même Y, dynamo semble trier tout seul les éléments sur le X.

Ci-joint un exemple montrant comment le script numérote les poutres.



La ça se complique un peu, il va falloir pour chaque poteaux/poutre extraire les coordonnées pour en déduire l'identifiant.

A partir des coordonnées tu peux facilement trier tes éléments en X puis en -Y pour qu'il doit rangé dans le sens de lecture.

N’hésite pas à revenir vers moi


@Rémy MAURCOT# Comment tu fais pour relier directement l'identifiant aux coordonnées? Je trouverais ça plus "propre" que ma solution et sûrement plus approprié pour faire des manipulations d'objet un peu plus complexe

Rejoindre la discussion

MP mélanie pecheux
·
Effectivement j'avais pensé également à All elements of Category mais je voulais tester sur une partie du plan en ne sélectionnant que quelque éléments (et ne pas faire mouliner le PC).

J'ai réussi à commencer la numérotation à 1 (ce qui n'était pas compliqué au final...)

Pour le sens de numérotation, j'ai un autre script (voir ci-joint).
J'arrive a avoir une liste en X et Y de mes ossatures mais apparemment ça donne une "ligne" plutôt qu'une coordonnée XY.

Peut-être qu'en résolvant ce script, je pourrait le copier dans le premier et faire un mixe pour la numérotation.

Rejoindre la discussion

RM Rémy MAURCOT
·
Premièrement si tu veux opérer sur tous tes poteaux/poutres tu devrait plutôt utiliser All Elements of Category pour sélectionner tous les éléments d'une catégorie (ici Poteaux / ossatures)

Le soucis que je rencontre est que la numérotation commence à 0 au lieu de 1.

Pour commencer à 1 sur la création de ta séquence au debut de ta définition lieu de laisser par défaut 0, met la valeur 1.

Ensuite, je ne sais pas comment faire pour que l'identification se fasse en x et y et pas "n'importe comment" (j'ai beaucoup de mal avec les noeuds et l'anglais n'aide pas du tout...).


La ça se complique un peu, il va falloir pour chaque poteaux/poutre extraire les coordonnées pour en déduire l'identifiant.

A partir des coordonnées tu peux facilement trier tes éléments en X puis en -Y pour qu'il doit rangé dans le sens de lecture.

N’hésite pas à revenir vers moi
Voir plus de commentaires
La lettre HEXABIM

Les outils qui comptent, tous les 15 jours.

Nouveautés utiles, un comparatif, un retour d'expérience. Désinscription en un clic.

Newsletter
Newsletter