PDA

Voir la version complète : SetContainer et les splines



tabou
20/07/2002, 00h25
Merci Tengaal pour tes tutoriaux sur COFFEE, grâce à eux et en particulier au n°4 j'ai pu me lancer dans la création d'une petite expression. :D
Elle permet simplement de transférer d'un bloc tous les paramètres d'une primitive (ref) vers une autre (celle où est placé l'expression). Ca marche très bien avec les cubes, sphères et autres primitives 3D, par contre ça ne marche pas avec les splines.
Pas de bol parce que c'est justement des splines que je veux utiliser avec cette expression pour changer simultanément plusieurs trajectoires d'animation. :(
Y-a-t-il une commande particulière pour faire ça avec des splines ?

main(doc,op)
{
var ref = doc -> FindObject("ref");if (!ref) return;
var ref_container = ref -> GetContainer();if (!ref_container) return;
op->SetContainer(ref_container);
}

Tengaal
20/07/2002, 12h51
En fait les splines sont des PointObjects, c'est à dire qu'elles sont définies par des points comme les objets polygonaux, alors que les primitives de c4d (sphères,cubes...) ne sont définies que par quelques paramètres (container). Donc si tu souhaite par exemple copier les points d'une spline (ref) sur une autre (op), il faut utiliser les fonctions:
var nb_points=spline->GetPointCount(); //donne le nbre de points de la spline
var point=spline->GetPoint(position); //donne la position (vecteur(x,y,z)) du point souhaité, avec position=0 (1er point) à position=nb_point-1.
spline_dest->SetPoint(position,point); //change la position du point souhaité.
Important, les splines source et destination doivent avoir le même nombre de points !
Pour plus d'info voir la doc SDK Coffee, SplineObject et PointObject.
Si tu veux une aide plus précise, demande moi !

tabou
20/07/2002, 14h43
Non je ne cherche pas à copier des positions de points, je veux plus simplement copier un paramètre d'une primitive spline, par exemple le rayon d'un cercle, d'un objet de référence vers plusieurs autres du même type.
Au départ je pensais faire ça avec des instances d'une spline, malheureusement l'animation en alignant sur une spline ne marche pas si c'est une instance.
En fait ce que j'ai fait ça marche à moitié : quand j'ouvre les paramètres de la spline qui porte l'expression les bonnes valeurs (celles de la référence) sont là et si je fais ok, évidemment, la spline adopte les nouveaux paramètres, preuve qu'ils ont bien été passés, j'ai l'impression que c'est le rafraîchissement de l'objet qui ne se fait pas.

Tengaal
20/07/2002, 14h50
La mise à jour des paramètres d'un objets ne se fait pas toujours automatiquement, surtout dans le cas ou le programme fais de nombreuse modification successives sur différents objets. C'est pourquoi tu peux forcer la mise à jour d'un objet avec:
objet->Message(MSG_UPDATE);
ou de tout le document:
doc->Message(MSG_UPDATE);

En mettant cette fonction à la fin des modifications de la scène 3d, c4d va être obliger de rafraîchir le document. :wink:

tabou
20/07/2002, 15h07
:D Merci beaucoup ça marche impec :D

Tengaal
20/07/2002, 15h20
Super !
Je suis content de pouvoir t'aider, et j'espere que les utilisateurs de c4d vont se pencher un peu plus sur le coffee, comme tu le fais :D