PDA

Voir la version complète : le coffee déplace les tags ?



parksto
29/09/2002, 20h53
simple curiosié...
est-il possible de copier ou déplacer les tags d'un ojects sur un autre en coffee ? :oops:

Tengaal
29/09/2002, 22h32
Mais bien sûr !
On créé un objet nommé "Source" avec un ou plusieurs tags quelconques, puis on créé un autre objet nommé "Destination". On peut placer cette expression sur un troisième objet nommé "Expression" avec le script suivant:

main(doc,op)
{

var obj_source; //objet contenant le tag à copier/déplacer
var obj_dest; //objet sur lequel il faut copier/déplacer le tag
var s_tag; //le tag d'origine qu'on veut copier/déplacer
var d_tag; //est une copie (clone) du tag d'origine s_tag

obj_source=doc->FindObject("Source"); //objet d'origine
if (!obj_source) return; //erreur corrigée, merci Samir !

s_tag=obj_source->GetFirstTag(); //on prend par exemple le premier tag de cet objet
if (!s_tag) return;

obj_dest=doc->FindObject("Destination"); //objet de destination
if (!obj_dest) return;

d_tag=s_tag->GetClone(); //maintenant d_tag est une copie de s_tag

obj_dest->InsertTag(d_tag,NULL); //place d_tag sur l'objet "Destination"

s_tag->Remove(); //efface le tag d'origine si on veut faire un déplacement de tag

doc->Message(MSG_UPDATE); //actualisation de ces changements
}

Bien sûr, cette expression telle quelle étant éxécutée en permanence, elle déplacera les tags de l'objet "Source" vers "Destination" un par un jusqu'à ce qu'il n'y en aie plus !
Un petit truc donc pour déclencher une expression en cliquant sur un objet qui sert donc de bouton déclencheur... :wink:
Créer un objet Neutre nommé "clic" (c'est notre bouton), puis dans l'expression qui doit être déclenchée manuellement ajouter le code suivant:

main(doc,op)
{
var bouton=GetActiveObject(doc); //on prend l'objet actif (cliqué)
if (!bouton) return; // si il n'y en a pas on quitte
if ("clic"!=bouton->GetName()) return; //si il ne s'appelle pas "clic" on quitte
doc->SetActiveObject(op); //sinon on éxécute l'expression en n'oubliant pas de déséléctionner ce bouton en séléctionnant l'objet op contenant cette expression !

//on place ici le script à éxécuter

}

parksto
29/09/2002, 22h42
merci ! :D
en fait c'était pour savoir si je pouvais créer une expression à placer sur un object neutre qui créé lui même un (ou plusieurs) autres objects (lumière par exemple), qui lui (ou leurs) attribue des parametres prédéfinis, qui se copie lui-même sur l'object (ou les objects) créé et qui supprime l'object neutre d'origine. :?

c'était une idée en l'air, une curiosité que j'avais, dont je me servirai peut-être un jour... :)
merci encore ! :D

Tengaal
29/09/2002, 23h17
Ton truc à l'air très biscornu mais j'ai déjà fait pire !
Une expression placée sur un objet qui créé des objets avec leur propre expression personnalisée !
Bref un programme qui écrit lui-même ses programmes en fonction des objets sur lesquels ils sont placés...
Mais là c'est carrément du délire totale même si ce truc permet de faire des choses hallucinantes.

parksto
30/09/2002, 00h53
je ne pensait pas qu'il écrive lui même ses programmes en fonction de la ou il est, mais qu'il se copie lui-même, ce qui reviens presque au même selon comment on crée l'expression. :?

enfin bon, de toute façon, je suis toujours un peu tordu... :efface: :lol: :mrgreen:

pour contraindre les deux boules l'une contre l'autre, j'étais partis sur des calcul trigo pour calculer les coordonnées polaires relative de la deuxième boule avec deux angles et une distance, modifier la distance et grace aux anles, recalculer les coordonnées xyz de la deuxième boule, enfin bref, une histoire de malade pour un truc tout simple. :oops:

en plus après deux jours de recherche(et oui, j'ai plus l'habitude de ces trucs là moi), alors que je touchais le bout, j'ai trouvé à une solution 100 fois plus simple. :oops:

Renaud
30/09/2002, 01h21
Ah ah... je vois que je ne suis pas le seul cinglé fana des programmes automodifiants et de la récursivité... je n'ai pas encore eu le temps de me mettre à COFFEE, mais je pense que vous devriez vous pencher sur REBOL, c'est réellement un langage passionant.

Tengaal
30/09/2002, 01h33
Le code des expressions à créer est sous forme d'un texte (string), ce texte placé dans un CoffeeExpressionTag associé à un objet permet donc de produire un script adapté à l'objet. Tu peux par exemple modifier les valeurs de paramètres dans le script de l'expression ainsi créée en fonction des paramètres de l'objet concerné... Par exemple j'ai utilisé ce truc dans LightSpline, l'expression principale créé les objets lumières avec une expression coffee "fabriquée" qui est chargée de donner à toutes les lumières les mêmes paramètres (container).
Sinon, pour l'histoire des sphères, il ne faut pas se prendre la tête avec des gros calculs trigonométriques (sauf si c'est indispensable !), utilise les vecteurs c'est beaucoup plus simple et plus rapide, à partir d'un vecteur tu as une direction (vnorm(vecteur)) et une distance (vlen(vecteur)). A partir de là tu en fais tout ce que tu veux !

parksto
30/09/2002, 01h44
c'était juste un exemple pour te montrer que des fois, je me prend la tête pour pas grand choses...

Tengaal
30/09/2002, 01h58
Si ça peut te rassurer je faisais pareil quand j'ai mis le nez dans le coffee pour la première fois !

Designer
30/09/2002, 14h01
Salut,

Je dis que ca va pas marcher vraiment :!:



obj_source=doc->FindObject("Source"); //objet d'origine
if (obj_source) return;


:lol:

Samir

Tengaal
30/09/2002, 14h49
En effet Samir, ça ne risque pas de marcher ! :oops:
Heureusement que tu es là pour corriger mes erreurs !
il faut donc avoir le code suivant:

obj_source=doc->FindObject("Source");
if (!obj_source) return;

Le "!" (NOT) avait été oublié, mille pardons ! :oops: :oops: :oops:
Je vais corriger le code en éditant le message...

Designer
30/09/2002, 15h16
obj_source=doc->FindObject("Source");
if (!obj_source) return;

Le "!" (NOT) avait été oublié, mille pardons ! :oops: :oops: :oops:
Je vais corriger le code en éditant le message...

:wink: hehe, pas de problème. Je connais ces petits erreurs très bien. Je les fais aussi presque toujours. Mais la plupart du temps il y a pas qn qui me corrige :D Mais c´est pas bien, parce que parfois j´ai besoin de qn qui me dit, car je trouve pas l´erreur moi-même tout de suite et ca prend du temps (que je possède pas). :cry: parce que souvent on est aveugle 8)