J’ai découvert le pakcage Elk, qui permet de récupérer des données d’Open Street Map (OSM) et à partir d’une de ses vidéos (ici), j’ai eu l’idée vous proposer ce script Dynamo for Revit.
But du script : Après avoir récupérer des données d’Open Street Map, transformation des contours des bâtiments en volume puis affecter à chacun des volumes une couleur.
1- Récupération des données sur OSM :
Même si la vidéo de ELK explique la procédure, voici quelques unes des différentes étapes :
- rendez-vous sur le site Open Street Map,
- après avoir tapé l’adresse du lieux que vous cherchez, cliquez sur le bouton “Exporter”,
- cliquez sur la ligne “Sélectionner manuellement une autre zone”,
- définissez l’aire d’export,
- enfin cliquez sur bouton bleu “Exporter”,
2- Import des données OSM et extraction dans Dynamo :
Avant de commencer, je vous conseille d’utiliser une version de Revit en langue Anglaise (voir ici la méthode). Cela est fortement recommandé lorsqu’on utilise un package.
Tout d’abord, il vous faudra télécharger et installer le package de Elk sur votre Dynamo (Menu “Packages/ rechercher un package”).
Je vais utiliser les nœuds “OSM.OSMData” et “ OSM.Location” dans la bibliothèque Elk. Le nœud “File Path” pointe sur le fichier téléchargé de OSM.
Enfin, je vais créer deux nœuds “String” :
- “building”: récupération des objects qualifiés comme “bâtiment”,
- “*” : récupération de tous les sous types.
Nota : le nœud “OSM.Features” vous servira pour connaître tous les objets contenus dans le fichier OSM,
3- Création des contours des batiments :
Le nœud “Polygon.ByPoints” connecté à la sortie “Points” permet de créer les lignes de contours des bâtiments.
4- Extraction des contours en volumes de différentes hauteurs :
Le nœud “Curve.ExtrudeAsSolid” permet à partir d’un contour de créer un volume. Les entrées de ce nœud sont :
- “curve” : récupère les contours des bâtiments (le nœud “Flatten” renvoie une liste unique des listes la précédentes),
- “direction” : sens de l’extrusion. Le nœud “Vector.ZAxis” indique l'extrusion vers l’axe Z,
- “distance” : hauteur d’extrusion.
Les informations fournies par OSM ne contiennent pas les hauteurs des bâtiments, donc je vais générer aléatoirement des hauteurs en utilisant un nœud du package LunchBox appelé “LunchBox Random Numbers”:
- “Min” : valeur minimum
- “Max” : valeur maximum
- “Amount” : la quantité à générer.
- “Seed” : nombre de génération (permet de changer la distribution aléatoire)
5- Création des volumes dans l’interface Revit :
Je vais utiliser le nœud “DirectShape.ByGeometry” qui permet de créer des volumes dans l’interface Revit sur la base de la géométrie Dynamo. J’utilise la catégorie “Mass” mais une autre catégorie peut être utilisée. J’affecte un matériau afin que les volumes crées ne soient pas translucides (ici le matériau “Défaut”).
6- Affectation de couleurs :
Je vais utiliser le nœud “Element.OverrideColorInView” qui a besoin de :
- la géométrie : donnée par le noeud “DirectShape.ByGeometry”,
- la couleur : définit ci-dessous:
– “Colour Range” : génère une couleur en fonction d’un intervalle,
– “Math.RemapRange” : créer une liste de chiffres compris entre un minimum, un maximum et une liste* de nombre de valeurs à générer.
*la liste est réalisée à partir d’un "codeblock" avec le script suivant : "1..Count(VolumeVillage)".
Attention au nombre de bâtiments que vous allez créer car le temps de génération de ceux-ci sera proportionnel au nombre demandé.
Nota : Pour diminuer le temps de génération, vous pouvez supprimer la partie affectation de couleur.