Placement d'arbres via un fichier excel

Ce script dynamo à pour vocation de positionner de multiples instances d'une famille d'arbre dans un projet.

Origine de la demande

Le script a été créé suite à la demande d'un utilisateur du Forum Hexabim. Voici le lien du topic.

Prérequis pour ce script

  • Une liste des points de positionnement des arbres.

  • Une famille d'arbre (Environnement métrique).

  • Dynamo

Aucun package supplémentaire n'est nécessaire pour ce script !

But du script

Le but est de placer un grand nombre d'arbres de manière automatique grâce à dynamo. Après avoir déterminer l'emplacement des arbres (via une liste de point [x,y,z]), le script placera automatiquement le type d'arbre choisi à l'ensemble des points indiqué.

Données d'entrées

Structure des données dans excel

Commençons à rentrer dans le vif du sujet. Pour créer le dynamo j'ai imaginé que l'utilisateur ai à entrer ses données dans un fichier excel sous la forme suivante :

xyzParamètre A

valeur du x

valeur du y

valeur du z

valeur de A

valeur du x

valeur du y

valeur du z

valeur de A

valeur du x

valeur du y

valeur du z

valeur de A

Bien-sûr le nombre de paramètres supplémentaires comme le paramètre A n'est pas limité. On peut ajouter autant de paramètres que l'on souhaite.

Les noms de paramètres saisis doivent être exactement les mêmes que dans la famille.

Nom de la famille et du type

Le premier nœud du script vous demande quel type de famille utiliser pour le reste. C'est ici que vous devez choisir vote famille d'arbre ainsi que son type. Dans mon exemple, la famille s'appelle ENVM_Arbre et le type ENVM_Arbre.

Le fichier excel

Une fois que vous avez créé votre fichier excel comme indiqué au dessus, dans le nœud Chemin vers le fichier excel indiquez l'emplacement de votre fichier. Dans le nœud Nom de la feuille de données inscrivez le nom de la feuille dans laquelle se trouve les données renseignées. Si vous avez créé un fichier excel tout neuf alors le nom de la feuille est le même que le nom du fichier.

Organisation des données de Excel

Le premier groupe de nœuds permet d'organiser les données reçues d'Excel. En effet, même si Excel est un tableur intelligent il n'est pas dit que Dynamo comprenne tout de suite ce que vous souhaitez faire de vos données. Par exemple, en sorti du nœud Data.ImportExcel, Dynamo vous fourni une liste des colonnes de votre fichier. Dans notre cas, cette organisation n'est pas très utile, nous préférerions avoir une liste de nos données organisées par lignes.

List.Transpose

Ce nœud permet de réorganiser une liste de données et de "basculer" son ordre de sortie de colonne par colonne à ligne par ligne.

Maintenant que nous avons notre liste de lignes (qui correspond ici à chaque instance d'arbre que nous souhaitons placer) nous allons pouvoir séparer les noms des paramètres des données.

A la suite de List.Transpose, les noms des paramètres se trouvent dans la liste 1 de notre liste de lignes. Les données sont quant à elles dans le reste de la liste. Nous allons utiliser deux nœuds pour séparé nos informations :

List.DropItems

Entrées

  • Liste de données

  • Le nombre d'objet à ignorer

Sorties

  • Une nouvelle liste sans les objets indésirables.

List.GetItemAtIndex

Entrées

  • Liste de données

  • L'index auquel prendre l'objet dans la liste

Sorties

  • L'objet de la liste a l'index donné

Création des points 3D

Dans cette partie, il est question de transformer nos données de coordonnées en vrais points dans Revit. Pour ce faire, nous récupérons 3 listes depuis notre liste de données précédemment extraite. En réutilisant List.GetItemAtIndex, on récupère les colonnes 0, 1, 2 (ce qui correspond au x, y, z). Il suffit ensuite d'injecter ces listes de valeurs directement dans le nœud suivant :

Point.ByCoordinates

Entrées

  • une valeur de x

  • une valeur de y

  • une valeur de z

Sorties

  • un point ou liste de points 3D interprétable par Dynamo

Dans votre excel, il faut que les valeurs numériques soient saisies avec "," et non "."

Placement des objets

Pour placer les objets il suffit d'utiliser le nœud suivant :

FamilyInstance.ByPoint

Entrées

  • type de famille

  • point ou liste de points

Sorties

  • une liste des éléments placer dans le projet.

Modification des objets placés

Maintenant que les objets sont placés, il est possible de modifier leurs propriétés sans avoir besoin de refaire un autre script dynamo. Je ne vais pas plus rentrer dans les détails de l'organisation des données dans les listes (si vous explorez le script, vous comprendrez plus vite qu'en me lisant) mais je vais expliquer le principe général et le fonctionnement de quelques nœuds.

Le principe pour la mise à jour des valeurs de paramètres des éléments placés et de créer autant listes qu'il y a d'éléments posés. Nous allons devoir créer 3 listes :

  • une liste d'éléments placés (extrait directement de FamilyInstance.ByPoint)

  • une liste de liste de noms de paramètre

  • une liste de liste de valeurs de paramètre

Liste de liste de noms

Même si nous n'avons que x paramètres à renseigner pour chaque éléments, il faut faire comprendre a Dynamo que c'est pour chacun de ces éléments que les paramètres sont à modifier. Plutôt que d'envoyer une liste de x paramètre et de se dire "tiens dynamo, tu prends ça et tu me le fais pour tous" on va plutôt tenter de lui dire "tiens dynamo, pour cet objet ce sont ces x nom de paramètre, pour le suivant, voici de nouveau x nom de paramètre".

Ici les "x noms de paramètre" est une liste des noms de paramètre extrait du excel et que nous avions mis de coté plus tôt. Pour créer cette répétition d'éléments, on utilise le nœud suivant :

List.OfRepeatedItem

Entrées

  • une liste d'éléments

  • le nombre de répétitions

Sorties

  • une liste d'éléments répétés

Exemple

Si ma liste d'éléments initiale est [a, b, c, d] et que je souhaite la répéter 3 fois alors ma sortie sera de la forme suivante :

[ [a, b, c, d] , [a, b, c, d] , [a, b, c, d] ]

Liste de liste de valeurs

Pour cette liste c'est un poil différent. Nous avons déjà à disposition une liste de liste de valeur de la forme suivante :

[ [valeur paramètre A, valeur paramètre A, valeur paramètre A] , [valeur paramètre B, valeur paramètre B, valeur paramètre B] ]

Ce que nous souhaitons c'est obtenir une liste de la forme suivante :

[ [valeur paramètre A, valeur paramètre B] , [valeur paramètre A, valeur paramètre B] , [valeur paramètre A, valeur paramètre B] ]

Pour cela rien de plus simple, on utilise le nœud List.Transpose.

Modification des valeurs

Maintenant que nos trois listes sont crées il ne reste plus qu'à utiliser le nœud suivant pour changer les valeurs des paramètres :

Element.SetParameterByName

Entrées

  • un élément ou une liste d'éléments

  • une liste de nom de paramètre

  • une liste de valeur de paramètre

Sorties

  • une liste d’éléments modifiés

Fin du script

Voila pour ce petit script qui fera bien des heureux. Afin de récompenser mon travail, les liens de ce site sont monétisés, c'est à dire que lorsque vous cliquez sur un lien de téléchargement, une pub s'affiche avant de vous amenez sur la page de téléchargement (plus d'info ici).

Le script est fourni avec :

  • Une famille d'arbre (Revit 2023)

  • Un projet avec les arbres (Revit 2023)

  • Un fichier excel avec la liste des points et valeurs de paramètre pour le script

  • Le script dynamo

Vous pouvez télécharger le script en cliquant sur Dowload TreePlacement.dyn

Dernière mise à jour