Voir la version complète : Aligner des objets sur une spline
Coucou me revoilou. :odile:
Bon j'avance dans mon petit projet de premier plug et j'arrive a un probleme (oui encore).
Je voudrais aligner des objets sur une spline (genre la fonction "Disposer")
Je pense que ce doit etre soit le fonction AlignToPathKey ou AlignToSplineKey.
Le probleme est que c'est deux fonction sont des classes et il n'y a pas d'exemple d'utilisation. J'ai réussi a créé un dossier avec mes objets, mais la je sais pas comment faire :oops:
Un petit peu d'aide serait bienvenue :prie:
Il te suffit d'examiner le code COFFEE de l'expression ChainSpline, dans la rubrique Xpresso -> Modélisation ... :wink:
Merci Tengaal :poucehaut:
J'aurais jamais pensé que tu laissais certain code accessible.
Apparemment j'y étais pas du tout. :mrgreen:
Je vais décortiquer ca.
Ok, j'ai réussi!
Mais je n'ai fais que copier une ligne.
position=courbe->GetSplinePoint(courbe->UniformToNatural(i*inter/longueur),1);
Aurait tu l'amabilité de la détaillé que je la comprenne mieux. :grin:
Merci :odile:
En cherchant chaque fonction dans la doc du SDK Coffee c'est très facile de comprendre. C'est facile avec la doc en version WinHelp puis qu'il y a un index avec une recherche auto par mot-clé.
GetSplinePoint(x,segment) :
"x" est une valeur entre 0 et 1 (0% et 100%) qui représente le placement sur la spline
"segment" est le numéro du morceau de la spline à utiliser, dans le cas où la spline est constituée de plusieurs tracés séparés.
Dans ma ligne de code x c'est "courbe->UniformToNatural(i*inter/longueur)"
UniformeToNatural(xx) retourne la position en mode de spline "naturelle", donc une valeur entre 0 et 1 (0% et 100%)
(i*inter) : "i" est une valeur variable, "inter" est un espacement.
si i=0 alors (i*inter)=0, donc on est en position 0% de la spline.
Si i est à son maximum tel que (i*inter)=longueur, alors on est à la position 1 (100%), à la fin de la spline.
Donc pour conclure, on calcul d'abord la longueur de la spline, ensuite quand on sait combien d'éléments on veut placer sur celle-ci, on en déduit "inter" (longueur/nombre_éléments).
"i" va donc varier de 0 à (nombre_éléments-1)
Ainsi chaque élément sera réparti sur la spline en utilisant l'algorithme "naturel", donc en ayant la même distance entre eux. :wink:
Merci,
Ce qui me troublait c'est l'imbrication de fonction, surtout le UniformToNatural. A ca se rajputé le fait que pour moi un segment était un bout de spline (du point 0 au point 1 par exemple), ce qui m'embrouille un peu la tete. Maintenant je comprend mieux. :prie:
Mais en fait j'ai besoin de faire une répartition selon la longueur de chaque "morceau" de spline. Donc en fait il me faut aussi l'inverse, c'est a dire connaitre la position du point sur la spline.
donc je fais un truc comme ca
var long_tmp=abs(vlen(lespoints[1]-lespoints[0]));//on calcul la longueur entre le point 0 et le point 1
var pos_tmp=long_tmp/longueur;//on divise le résultat par la longueur totale ce qui donne la position relative du point sur la spline
Je ferais ca en boucle pour connaitre chaque longueur de "morceau" de spline et positionnerai les objets en fonctions.
Il est evident que ce résultat serait faux s'il s'agit d'une spline avec des tangeantes, mais dans un premier temps je pars du principe que j'en aurait pas. On verra pour la version 2 :mrgreen:
Qu'en pense tu ? :?
A moins qu'il y est une fonction inverse a GetSplinePoint, je vois pas d'autre solution.
PS: je te prie de croire que je m'efforce de fouiller un maximum dans le SDK avant de poster. Mais il est vraiment pas évident :arg:
Je comprends pas ce que tu cherche à faire, les explications de Tengaal sont très bien énoncés et claires, si tu cherche à récupérer les coordonnés des points réels de la spline, c’est la même chose que les polygones
Mon_point = Spline->GetPoint(indice du point) ;
Je comprends pas ce que tu cherche à faire,
Je vous le dit pas, vous allez me le faire en 2 temps 3 mouvements et je vais etre ecoeuré. :mrgreen: Je vous le dirai a la fin.
J'avais trouvé le GetPoint, mais cela donne les coordonnées, moi je veux savoir a quel valeur du GetSplinePoint tel point correspond.
Sachant que le premier point est a 0 de la spline et le dernier a 1, le sixieme par exemple a combien il est? 0,32 0,87? Comment le savoir?
En fait j'ai une spline avec x point. je veux pouvoir mettre sur le premier troncon de la spline 5 objets et sur un autre 10 objets.
Est ce que je suis plus claire :?
De toute facon quand j'aurai fini je vous montrerai tout mon code pour savoir si c'est bon. Vous allez pouvoir me casser en 8 :mrgreen:
Powered by vBulletin® Version 4.2.1 Copyright © 2024 vBulletin Solutions, Inc. Tous droits réservés