PDA

Voir la version complète : Xpresso pour relier des splines



MacGreggor
31/12/2015, 13h30
Bonjour, je suis nouveau sur ce forum, je commence avec C4D (quel logiciel fantastique !), et je voudrais savoir si il existe une technique – genre Xpresso ou autre diablerie – pour faire que les points de splines en contact avec une autre spline suivraient au cas où cette dernière serait déplacée. Me suivez-vous ?

Imaginez que j'aurais déplacé la spline rouge et hop, automatiquement, les points en contact (A et B) des splines vertes suivraient le mouvement.
Je sais qu'il y a parmi vous des génies de la modélisation et de la programmation, comme César Vonc, Vesale, Aurety, Rudy, oli_d, Macgreggor, et surtout xs_yann, dans une moindre mesure Sansalvador, et j'en oublie, si vous pouviez me répondre, ça m'aiderait rudement. Merci d'avance !

16796

16797
http://www.zoominto.com/zoomapi/ZoomButt.gif


16798http://www.zoominto.com/zoomapi/ZoomButt.gifhttp://www.zoominto.com/zoomapi/ZoomButt.gif

sansalvador
31/12/2015, 13h52
Mmmmm.....si je comprends bien , tu voudrait modifier la cage spline de ta Topolino qui comporte plusieurs splines indépendantes , et le soucis est là , elles sont indépendantes et je pense qu'il n'y a pas 50 solutions pour faire ce que tu veux:

- connecter tes splines de manière à n'en faire plus qu'une , mais dans ce cas , je pense que ça met le bazar si tu utilises "Spline Patch"
-sélectionner les splines concernées , puis sélectionner les points respectifs aux coordonnées en commun pour ensuite les déplacer

Il reste une 3ème solution......celle où je n'ai rien compris à ta question :biggrin:

Sinon , j'imagine que tu savais déjà tout ça mais je me permets de te le rappeler étant donner tes antécédents céphaliques :icon_mrgreen:

MacGreggor
31/12/2015, 14h02
Tu as bien raison pour mes antécédents céphaliques, pour simplifier disons que chaque point d'une spline A en contact le long d'une autre spline B suivrait le mouvement si on déplaçait la B. (Je redis un peu la même chose mais je ne vois pas comment expliquer autrement.)

MacGreggor
31/12/2015, 14h09
Ah, céphalique, avec un seul L, tu parlais de la mémoire, j'avais compris tout autre chose.

xs_yann
31/12/2015, 14h48
Salut,

Y'a un peu de setup à faire, mais pour faire simple tu peux tenter un truc comme ça :

http://www.xsyann.com/fc4d/spline_point.png

Tu définies la position des points que tu veux connecter à la spline par rapport à un offset sur cette spline.

MacGreggor
31/12/2015, 16h00
Merci fiston, je vais tenter le truc. Le développeur de Spline Patch devrait réfléchir à ce problème parce quand on commence à avoir des centaines de splines ça devient un peu fastidieux à la longue de tout bouger.

xs_yann
31/12/2015, 16h10
;)

Je vais tenter d'améliorer ça, c'est intéressant comme problème.

J'ai déjà fais quelques tests pour calculer une approximation de l'offset le plus correct :


def get_closest_aux(spline, pos, start, end):
pos -= spline.GetMg().off
start_pos = spline.GetSplinePoint(start, 0)
end_pos = spline.GetSplinePoint(end, 0)

dist1 = (start_pos - pos).GetLength()
dist2 = (end_pos - pos).GetLength()
middle = (start + end) / 2.0
if dist1 < dist2:
end = middle
else:
start = middle
return start, end

def get_closest(spline, pos):
max_iter = 20
eps = 0.001
start, end = 0.0, 1.0
for i in xrange(0, max_iter):
start, end = get_closest_aux(spline, pos, start, end)
if abs(start - end) < eps:
break
return (start + end) / 2


En gros il vérifie si le point est plus près de l'offset 0.0 ou 1.0 (0% ou 100% de la spline).
Si le point est plus près de l'offset 1.0 que 0.0, il cherche entre 0.5 et 1.0, ensuite si le point est plus près de l'offset 0.5 que 1.0, il cherche entre 0.5 et 0.75, etc. Et il converge petit à petit vers l'offset le plus correct.

En ayant l'offset correct, il suffit de récupérer l'index des points qui sont à coller à la spline (pas très compliqué si il le sont déjà), je pense qu'il y a moyen que la connexion se fasse automatiquement.

Je sais pas si j'aurais le temps de finir ça maintenant, mais j'essayerai de poster une version améliorée dans le courant de la semaine prochaine.

sansalvador
31/12/2015, 16h23
Intéressant , mais j'ai une question
Si les points que l'on déplace sont soumis à une interpolation légère , cela va forcément déformer la forme obtenue en amont et du coup , il faudra repasser sur chacun de ces points pour régler les courbes à l'aide de la tirette , je me trompe ?

MacGreggor
31/12/2015, 18h16
En effet tu ne ne trompes pas. Mais déjà si les splines ne se décollent pas, c'est un progrès considérable. Et suivant celles que tu utilises, ça peut ne pas être trop embêtant. Xs_Yann, tu es prodigieux.
Et bon réveillon tout le monde !

heraclite
25/01/2021, 09h36
salut les gars je déterre ce post car je souhaite réaliser cette opération mais avec des splines dans un cloner ....en gros ca serait de relier les splines placées dans un cloner... avez vous avancé sur le sujet ou pas du tout ?