Encore un très bon exemple Dynamo for Revit du blog Revit beyond BIM, “Fire Exit Risk Assessment with Revit and Dynamo”.
L’auteur, Dieter Vermeulen, nous propose d’afficher les chemins les plus courts reliant les portes intérieures de l’ (ou des) issue de secours et cela dans une vue en plan dans Revit.
Vous trouvez dans son article toutes les explications nécessaires à la compréhension du code.
J’ai repris donc cet exemple pour afficher en rouge les pièces qui jouxtent la porte la plus éloignée de l’issue de secours.
Voici donc l’explication de mes ajouts :
1- Analyse des longueurs des chemins:
Il faut d’abord trouver dans le script de Dieter, l’endroit où se cachent les chemins calculés.
En fait, ils se trouvent dans le groupe appelé “Resolve jaggy path to smooth” et plus spécialement le nœud “NurbsCurve.ByControlPoints”.
Pour connaitre la longueur de chaque trajet, je vais relier le nœud précédent à un nœud appelé “Curve.Length”
Pour déterminer le chemin qui correspond à la longueur maximale, j’utilise le nœud “List.MaximumItem”.
Le nœud “List.FirstIndexOf” me retournera le rang du chemin le plus long.
Enfin, pour connaitre le nom de la porte qui correspond au chemin le plus éloigné, je vais utiliser le nœud “List.FirstIndexOf”.
- Entrée “List” : connectée à la liste des portes situées dans le groupe “Escape Route Initialization”,
- Entrée “ Index” : liée à l’index trouvé à l’étape précédente,
2- Détection des pièces communes à la porte la plus éloignée:
Nous allons sélectionner toutes les pièces puis nous allons les transformer en volume solide Dynamo (même opération pour la porte la plus éloignée).
Pour les pièces, j’utilise les nœuds suivants:
- “Categories” : sélectionne les éléments de la catégorie mentionnée (ici “Rooms”),
- “All Elements of Category” : sélectionne tous les éléments Revit de la catégorie indiquée,
- “Element.Solids” : transforme les objets Revit en Solide Dynamo,
Pour la porte la plus éloignée :
- “Element.Solids” : transforme les objets Revit en Solide Dynamo,
- “Solid.ByUnion” : fusionne tous les solides composant la porte en un seul solide,
Pour savoir si le solide “Porte” appartient à l'un des solides (pièces), je vais utiliser le nœud “Geometry.DoesIntersect”. Ce nœud retourne un booléen (Vrai ou Faux) indiquant la présence ou non de la porte pour chacune des pièces inspectées.
3- Affichage dans Revit des pièces concernées par la porte la plus éloignée :
Afin d’afficher les pièces concernées par la porte la plus éloignée, j’ai créé :
– une vue “Analysis” ,
– un paramètre projet “Occupant” pour les pièces,
- une légende de couleur sur le paramètre “Occupant” constituée de deux variables :
- “Yes” : couleur rouge,
- “Non” couleur “vert”.
Ensuite dans le script Dynamo, je vais utiliser un nœud :
– “If” lié à deux string “Yes” et “No” (si la porte est détectée dans pièce, le “if” retourne “Yes” sinon “No”.
– “Element.SetParameterByName” pour affecter les valeurs “Yes” ou “No” dans le paramètre projet “Occupant”.
4- Résultats:
En changeant de place l’issue de secours “Exit”:
Nota important : Utiliser un Revit en langue Anglaise car des packages sont utilisés (voir notre billet ici).
Voici la vidéo d'explication :
Voici les fichiers : Téléchargement Dynamo Fire
Et encore merci Dieter pour cet exemple DYnamo For Revit !