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.
Dernière mise à jour
Ce script dynamo à pour vocation de positionner de multiples instances d'une famille d'arbre dans un projet.
Dernière mise à jour
Le script a été créé suite à la demande d'un utilisateur du Forum Hexabim. Voici le lien du topic.
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 !
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é.
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 :
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.
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.
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.
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.TransposeCe 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é
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 "."
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.
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
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
ExempleSi 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] ]
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.
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
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
x | y | z | Paramè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