PDA

Voir la version complète : [Problème]Variables communes à plusieurs Plugins



xs_yann
19/07/2007, 14h04
Bonjour, :D
Voici le problème :
J'ai un Expression Plugin Tag avec une classe pour le dialogue (GeDialog) et une classe pour le plugin (ExpressionPluginTag).
Je souhaiterai avoir une variable qui soit accessible dans les deux classes.
Pour cela, je déclare ma variable tout au début du code (en dehors de toute classes), jusque là tout va bien, je peux acceder à ma variable aussi bien dans le "Command" du dialog que dans le "Execute" du plug.
Sauf que si j'ai deux objets dans ma scène ayant chacun le tag, les variables sont communes : si j'en modifie une, l'autre aussi se modifie. :poucebas:
Les deux tag n'ont pas la même ID (obtenue en faisant "println(tag)").
Un fichier exemple : http://ykoeth.free.fr/fc4d/variable_xs.cof
Cela vient peut-être du fait que le dialog soit non-modal et par conséquent il est déclaré dans le main() du plug :? :

main() {
d = new(MyDialog);
Register(MyExpressionPluginTag);
}
Si quelqu'un a la solution...
Pendant que je suis là : Est-il possible de créer une interface dans le gestionnaire d'attributs?
Merci :wink:

tarlack
19/07/2007, 17h20
tu peux essayer de faire un tableau associant ID à valeur de la variable. si je devais le faire, je ferais une classe pour gerer ca :
je connais pas ce dont dispose COFFEE, donc une solution bourrine c'est :
- 1 tableau contenant les ID
- 1 tableau contenant la valeur de la variable.
- 1 compteur pour savoir combien t'as de valeurs dans tes tableaux
2 methodes :
- setValue (var ID, var value_), elle recherche dans le tableau d'ID l'ID donné, et le rang auquel tu l'as trouvé te donnes où enregistrer la valeur dans le tableau. si non présent, tu ajoutes l'ID dans le tableau des ID et la valeur dans le tableau des valeurs, avec le meme rang pour les 2 (tu prend la valeur de ton compteur).
- getValue(var ID), tu recupere dans le tableau d'ID le rang de ta valeur et tu vas chercher la valeur

quand tu veux avoir une variable globale "toto", tu fais un objet, toto, puis ensuite, au lieu de faire toto = 2, tu fais toto.setValue (id, 2), et similaire pour getValue.
c'est peut-etre pas très clair.... :oops:

Majoul
19/07/2007, 22h26
Si tu utilise une variable global, c’est tout à fait normal que tous tes objets se modifies à l’identique puisque tes expressions exécutent tous la même valeur.

Pour remédier à cela il faut que chaque membre de ta class (expression) a sa propre variable,
- soit en utilisant une variable appartenant à la class,
- soit en stockant ta valeur dans un container, cette solution te permet de sauvegarder tes valeurs lorsque tu ferme ton fichier c4d.
Après avec ton dialogue tu agit que sur les objets sélectionnés :
Si l’objet sélectionné porte la propriété (mon tag) alors j’accède à la valeur par son container, je l’incrémente et je la stocke de nouveau dans le container du tag.
Dans l’exécution de ton expression tu accède à la valeur par son container.

Une interface dans le gestionnaire d'attributs est faisable qu’en C++.

xs_yann
20/07/2007, 10h19
Merci à vous deux, je vais essayer de déchiffrer ça. :prie: