Grasshopper

algorithmic modeling for Rhino

Question posé sur RhinoForYou :

Bonjour, je vous contacte au sujet de RhinoCivil.

En effet,j'ai pu voir la vidéo suivante https://www.youtube.com/watch?v=hZdjAlhWghw  qui permet de faire des profils en long et en travers.

J'aurais besoin de cette fonction pour créer des profils en travers sur la modélisation d'un rail de montagne russe.

Le but est de comparer la section de la modélisation à la section d'un nuage de point créé un an après dans le but de vérifier les> mouvements de la structure.

Votre plug-in permettrait de faire des profils le long de l'axe du rail facilement mais le nuage ne serait pas coupé et encore moins reporté sur les profils.

Pensez qu'il y ait un moyen d'arriver à mes fins.

Si vous souhaitez des précisions, contactez moi.

Merci à vous.

 

Réponse(mail):

Bonjour ,

Des outils d'interpolations ont étaient intégré a RhinoCivil Engineering (RCE) qui vous permettent par exemple d'effectuer une recherche de points 3D sur un axe 2D avec un rayon de recherche et ainsi créer une courbe 3D.

 Ensuite vous pouvez utiliser le Profil en Long de courbe 3D.

 Si vous avez besoin d'un exemple n'hésitez pas, mais vous devrez avoir activer RCE pour que vous puissiez l'ouvrir dans grasshopper.

 Bien cordialement

Questions(mail):

Bonjour,

Je vous envoie une image qui montre un peu mieux mes attentes.

On peut y voir le nuage de points d'une montagne russe (importé avec Pointools). A partir de ce nuage, j'ai modélisé un cylindre qui suit les courbes de la structure.

 Avec Pointools, je peux créer une vue de section du nuage qui suit le courbe d'axe du cylindre modélisé (Vue résultante affichée sur la partie droite de l'image).

Les points bleus visible sur les différentes fenêtres de gauche représentent le pas des sections, et la petite ligne bleue montre la position actuelle de la section. A ce moment là, j'ai sectionné le cylindre au même endroit que la nuage est sectionné, et cela a créé le cercle visible en orange. Ce qui m'intéresse, c'est d'obtenir de façon automatique des sections tous les X mètres le long de cette courbe 3D avec le cercle (provenant de la section du modèle 3D) ainsi que les points du nuage de points sectionné (visible en blanc à droite de l'image).

 Actuellement, si j'ai bien compris avec votre fonction de profil en> travers, on peut obtenir des sections le long d'un courbe (mais seulement> 2D c'est ça?) et seulement du modèle 3D et pas du nuage de points. Est-ce plus clair maintenant? Je fais tout cela dans le but de pouvoir comparer le modèle 3D au nuage de point. Dans ce cas là, le modèle a été crée à partir de ce même nuage, donc si une comparaison est faite, elle pourrait servir de contrôle de la précision de la modélisation. Mais le but réel est de pouvoir ensuite comparer cette modélisation à des nuages capturés année après année pour suivre l'évolution de cette structure.

 Merci à vous.

Réponse:

Tout d'abord bienvenue sur le forum à Clément qui a posé cette question.
Bien sur grasshopper permet de remplir l'intégralité de la demande et même plus encore.

  • Obtention des points

A partir de l'axe du cylindre division en point pour obtenir le paramètre t de tous les points sur la courbe.


Utilisation du composant de RhinoCivil Plan sur Courbe pour créer des plans normales à la courbe.Ces plans sont les plans de coupes.

Ensuite " le plus compliqué" et de filtrer les points à une distance raisonnable du plan de coupe, pour cela j'ai choisit d'utilisez une boite avec des dimensions X et Y égales et une profondeur à chaque plan de coupes.(Plein de solution existe pour filtrer les points)

Puis a partir de ces boites, isoler les points à l'intérieur.
Puis projeter les points à l'intérieur de chaque boite sur chaque plan de coupe.

  • Obtention de la coupe

A partir des plans de coupe créer une surface avec les mêmes dimensions que les boites mais sans épaisseur, puis calculer l'intersection avec la géométrie 3D.

  • Mis à plat des sections (Points + Coupe)

Créer des plans XY avec une serie de points de longueur égale au nombre de section.
Orienter les sections sur les plans.

Définition Grasshopper:

Résultats:

Views: 3254

Attachments:

Replies to This Discussion

A partir des points et des coupes nous pouvons en déduire la distance moyenne entre chaque coupe et ces points, puis en déduire la distance moyenne globale.

A partir du profil en long, nous pouvons savoir à quel endroit se situe les coupes en vue en plan et en 3D.

Définition grasshopper:

Résultats:

Profil en long

Coupes

Calcul de la longueur

Calcul de la distance moyenne entre points et coupes

Attachments:
Bonsoir,
 
J'ai fait la demande de licence de RCE et j'ai reçu les fichiers qu'il faut. J'ai pu lancé le document grasshopper que vous avez mis en lien sur le forum. Je l'ai modifié pour faire en sorte que les dimensions des boîtes pour récupérer les points soient à peu près adaptées. Puis j'ai fait en sorte qu'à partir de points sectionnés, il crée un cercle (CircleFit) et qu'il compare la position du nouveau cercle à celle du modèle, en X et en Y, ça me paraissait plus judicieux comme indications. (Mais je n'ai sûrement pas dû utiliser la meilleure méthode)
Les nuages de points ainsi que le modèle sont très loin de l'origine. Je suis pas sûr de la méthode pour mettre les sections à plat (sur le plan XY général) mais près de la position du modèle. Malheureusement, j'ai peu de temps pour avoir des résultats donc je reviens encore à vous.
 
J'aimerais bien vous transmettre le fichier avec le nuage de point mais c'est assez lourd.
Le nuage de point en pts allégé pèse 35Mo, le fichier Rhino 5Mo. Mais dans le nuage de points, il n'y a pas que les rails, il y a le reste. Pensez vous qu'il soit possible d'utiliser les composants Point in Brep+Dispatch afin de filtrer le nuages et de garder uniquement les points autour du modèle 3D pour recréer un nuage plus léger et moins pollué (en plusieurs fois étant donné qu'il y a quand même 500 000 points je crois)? Car le nettoyage du nuage de points à la main est vraiment pas rapide.
J'ai tout de même testé sur une portion, et aux endroits où il a assez de points autour du cercle, les résultats sont plutôt satisfaisants. J'essaierai de faire afficher un tableau récapitulatif, distance moyenne en X et en Y, écart type en X et en Y.
Attachments:

Clément,

Vous avez bien activer grasshopper, vous devez être en mesure d'utiliser mes composants.

Ok pour le composant Circle fit et le calcul de  différence de position, très bon raisonnement ;)...

Je vous conseille lorsque vous utilisez GH de travailler exclusivement en vue parallèle (changer la projection dans la vue perspective) ou bien changer la position du modèle(pas évident pour certains projets)

Pour le nettoyage je crains que grasshopper ne sois pas adapté vu le nombre de points.

Sans fichier associé, je ne peut lire votre définition pensez y avant de partager !

Vous pouvez internaliser vos données aux fichiers GH (attention au poids)

A lire:

http://www.grasshopper3d.com/forum/topics/how-to-get-help-when-you-...

Pour le changement de position des sections, j'ai seulement modifier un composant qui vous permet non plus de travailler sur le plan XY mais sur le plan que vous sélectionné.

N’hésitez pas si pas si vous avez encore besoin d'aide.

Cdt,

Attachments:

Désolé, je pensais avoir internalisé les données. Je vous renvoie le fichier .gh avec les données internalisées. J'ai remodifié les distances en X et Y.

 

Pour ce qui est du nuage de points, j'ai réussi à faire le tri avec Grasshopper et l'outil Points in Brep, comme je pensais. Je suis passé d'environ 400 000 points à uniquement 20 000 points autour de mes 3 rails. C'est très efficace (mais un peu dangereux avec tous ces points).

J'ai interdit au composant CircleFit de faire un cercle, s'il n'y a pas au moins 5 points présents sur la section. Car lorsqu'il y a seulement 3 ou 4 points, il suffit qu'il y en ait un pour que le cercle soit faux, alors qu'au delà, le cercle a plus de chance d'être "bon".

J'ai également créé des "Pipe" (créés à partir de portions de l'axe) au lieu des "Box » de sélection des points pour éviter de sélection trop de points que ne serait pas des points du rail.

J'ai ensuite créé des « panel » pour la moyenne des distances en X et en Y et la moyenne des distances centre à centre.

 

Tout cela fonctionne bien avec un axe et un tuyau. Mais maintenant j'essaie d'appliquer ça à plusieurs rails en même temps. Je crois avoir compris qu'il faut créer des « path » dans l'imput manager, et faire correspondre le  « path » de l'axe et celui du Tuyau. 

Dans mon exemple j’ai mis 3 courbes et 21 sections. Au moment où j'utilise les boîtes pour créer les portions des axes, il crée 63 « sous-path » de 1 courbe alors qu'il faudrait qu'il crée 3 "paths" de 21 courbes, enfin si j'ai bien compris.

 Car une fois qu’il a créé les points à l’intérieur des « Pipe », il doit les projeter sur les plans correspondant. Et c’est là que le problème se voit. Il ne fait pas correspondre les points à projeter et les plans.

Je vous envoie la version à une courbe et un tuyau (c’est la v5 avec un fichier rhino ou la courbe d'axe est "bakée" pour pouvoir faire un zoom sur la zone plus rapidement) et je vous envoie également, celle avec 3 courbes et 3 tuyaux. Sachant qu’il faudra également attribuer un rayon pour un des tuyaux et un autre rayon pour les deux autres.

Tout ça est bien compliqué, j’espère que je ne vous embête pas trop.

Merci d’avance.

Attachments:

Bonjour Clément,

Il y a de grande incompréhension dans la gestion des listes et des arbres.

Chaque composant a son fonctionnement et selon son action, l'arbre de donnée en subit des modification. Par exemple, ce n'est pas parce que les listes sont différentes en sorties de composant qu'il ne faut pas l'utiliser.

A vrai dire je ne comprend plus votre définition, vous avez modifier les listes mais pas assurez une bonne liaison entre les listes.

La sélection de l'axe par exemple vous avez 4 élément répartie comme ceci:

{0}i=1, {1}i=2, {2}i=1

La sélection de vos tubes est différentes:

{0}i=1, {1}i=1, {2}i=1

Grasshopper pour fonctionner va comprendre ceci:

L'axe: {0;0}, {1;0},{1;1},{2;0}.

Tubes:{0;0}, {1;0},{2;0}

Incompatibilité des données !

Pour que dans un composant le paramètre A fonctionne avec le B il faut la même typologie de donnée.

Solution:

Sois ajouter un tube dans la deuxième branche {1;0} et {1;1}

Sois supprimer un axe {1;1} par exemple.

De plus si vous branchez ceci:

L'axe: {0}i=1, {1}i=2, {2}i=1

Tubes:{0}i=1, {1}i=2, {2}i=1

Vous en ressortirez forcement comme ceci:

L'axe: {0;0}, {1;0},{1;1},{2;0}.

Tubes:{0;0}, {1;0},{1;1},{2;0}.

en d'autre terme:

L'axe: {0;0}i=1,{1;0}i=1,{1;1}i=1,{2}i=1

Tubes:{0;0}i=1,{1;0}i=1,{1;1}i=1,{2}i=1

Vous remarquez que i=1 dans tous les cas.

Assurez vous que les listes sont les mêmes dans tous les cas. Le plus complexe à gérer pour vous est la question des dispatch et des fonctions F(x) car dans ce cas vous devez créer des blocs de composants vous permettant de filtrer des données par rapport à d'autre.

Il y a en effet de grandes incompréhensions de ma part à propos de la gestion des listes. Et je pense qu'apprendre tout cela sur cet exemple, et avec la complexité de cette définition est un peu vain. Etat donné que je suis vraiment novice sur le sujet.

Lorsque je me suis inscrit sur ce forum j'avais posté une question justement à propos de ces problèmes de gestion de listes. Le cas d'application est nettement plus simple. Voici, le lien :

http://www.grasshopper3d.com/forum/topics/how-to-set-different-valu...

Le post est en anglais, si vous voulez des précisions, je suis disponible.

Merci de prendre du temps pour m'aider.

RSS

About

Translate

Search

Photos

  • Add Photos
  • View All

© 2024   Created by Scott Davidson.   Powered by

Badges  |  Report an Issue  |  Terms of Service