Encore un article sur Dynamo, me direz-vous! Celui-ci est né d’une demande de quelques utilisateurs qui désespéraient (ils se reconnaitront :)) de trouver dans le logiciel Revit le centre de gravité des objets crées.
Le but de cet article est de vous montrer que Dynamo devient le véritable compagnon de Revit notamment lorsqu’il permet d’accroitre les fonctionnalités de celui-ci.
Comme vous l’avez compris, je vais vous montrer comment extraire dans Dynamo le centre de gravité d’un objet modélisé dans Revit (voir capture d’écran ci-dessous).
En vue de matérialiser le centre de gravité sous forme d’une sphère de couleur et d’afficher les coordonnées (x,y et z), j’ai d’abord crée une famille de type “Modèle générique” qui s’appelle “CdG.rfa”:
Voici la famille créée en version Revit 2016 : Téléchargement CdG
Cette famille à la particularité d’avoir un “Texte 3D” paramétrique dont la variable s’appelle “Centre de Gravite” :
Nota : pour le nom des variables évitez les caractères accentués.
Passons à Dynamo. Après l’avoir téléchargé ici et installé, vous retrouvez l’icône dans l’onglet “Complément” de Revit.
Cliquer sur l’icône Dynamo. Lorsque l’interface de Dynamo est ouverte cliquer sur “Open” puis cliquer sur le fichier “AfficheLeCentreDeGravite.dyn” que vous pouvez télécharger ici.
Voici la programmation visuelle complète de la détection du centre de gravité. Impressionnant, non?
Une fois bien expliqué, vous pourrez vous lancer tout seul.
Explications du code : Téléchargement AfficheLeCentreDeGraviteBlog
1- Calcul du centre de gravité :
Tout commence avec la fonction “Solid.Centroid”, cette fonction permet de calculer le centre de gravité d’un objet. Cette fonction à besoin d’un objet de type “Solid”.
Nous avons donc besoin en amont de sélectionner un objet dans l’interface Revit et l’afficher dans l’interface Dynamo et relier le tout :
– La fonction “Select Model Element” permet de sélectionner un objet dans l’interface Revit,
– La fonction “Element.Geometry” dessine l’objet sélectionné dans l’interface Dynamo,
Avec la fonction “Watch”, elle vous affiche le résultat du calcul :
2- Transformation du centre de gravité en chaîne de caractères :
La famille qui va afficher la valeur du centre de gravité est de type “Texte” donc nous devons transformer les types numériques en type “String” puis les formater (nombre de chiffres affichés…).
Nous allons utiliser les fonctions suivantes:
– La fonction “Point.X” pour extraire la cordonnée suivant l’axe x,
– La fonction “String for Object” pour transformer un objet en string,
Résultat :
Notez qu’une fois le numérique transformé en string, le point se change en virgule.
Il ne reste plus qu’à faire cela pour les deux autres coordonnées en utilisant respectivement “Point.Y” et “Point.Z”.
Nous allons maintenant formater le texte récupéré pour n’afficher que six caractères. J’ai utilisé la fonction “String.Substring” qui permet à partir d’une valeur de départ et d’une longueur d’extraire exactement la partie voulue.
J’utilise deux “Number”, un égal à 0 pour démarrer au début de la chaîne de caractères puis je donne au deuxième la valeur 6 (attention la virgule est considérée comme un caractère).
Résultat :
Il faut faire cela pour les autres coordonnées Y et Z.
Résultats :
Il faut ensuite réunir les différentes données avec un séparateur. Pour ce faire, nous allons utiliser les fonctions suivantes:
– La fonction “String.Concat” à trois entrées pour concaténer les valeurs,
– La fonction “String.join” pour leur adjoindre un séparateur, par exemple “;” de type string
Résultat :
3- Chargement de la famille “CdG.rfa” à l’emplacement du centre de gravité :
Nous allons charger la famille “CdG.rfa” à l’emplacement correspondant aux coordonnées du centre de gravité. Nous allons utiliser :
– La fonction “FamilyInstance.ByPoint” qui a besoin de la famille “CdG.rfa” et des coordonnées du centre de gravité,
– La fonction “Family Types” qui permet de sélectionner la famille “CdG.rfa”
Après raccordement, voici le résultat :
4- Affectation des coordonnées du centre de gravité dans la variable de la famille :
Nous arrivons à la fin, courage! Il ne reste plus qu’à affecter le résultat du centre de gravité à la variable “Centre de gravite” qui se trouve dans la famille “CdG.rfa”. Nous allons utiliser la fonction “Element.SetParameterByName” qui permet de faire ce travail.
Celle-ci dispose de trois entrées :
– “Element” : c’est justement la famille “CdG.rfa”,
– “ParameterName” : la variable à laquelle il faut affecter la valeur du Centre de gravité,
– “String.join” : c’est le résultat de notre transformation de numérique en chaîne de caractères.
5- Vidéo de l’utilisation de l’exemple via Dynamo :
Fichier exemple en version Revit 2016 : Téléchargement Centre de gravite
6 - Conclusions:
J'espère que toutes ces explications vont vous aider à prendre en main Dynamo. L'exemple que je vous ai présenté peut être sûrement amélioré et je compte sur vous bien sûr pour le faire :-).