Dynamo: identifiant automatique
MP
mélanie pecheux
15 juillet 2020
4517 0 10 0
Réponses
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
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
MP
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!
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!
GJ
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
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
MP
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.
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.
GJ
Je reviens pour avoir de l'aide afin d'améliorer encore mon script
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...
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...
MP
Merci beaucoup, ça marche!
En fait il n'y avait pas besoin d'autant de noeud ^^ mais l'idée était là
En fait il n'y avait pas besoin d'autant de noeud ^^ mais l'idée était là
MP
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.
GJ
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"
.
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"
MP
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.
GJ
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.
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
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
MP
Tu peux refaire une capture d'écran de ton dernier script s'il te plait?
Merci beaucoup!!
AH
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.
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.
MP
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.
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.
GJ
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...
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...
MP
GJ
Génial! Merci beaucoup pour ta réactivité 
AH
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...)
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...)
MP
Salut! Peux-tu mettre une capture d'écran de ton script? Je n'arrive pas a ouvrir le fichier sur dynamo
AH


