salut
voilas le souci :
je voudrait rajouter une valeur dans un container , je m' explique :
le but est de placer dans un objet une nouvelle valeur dans son container , de facon a pourvoir savoir si cette objet a été modifier par un autre coffee
en gros un programme coffee modifie une spline , ce programme crée une valeur dans le container de cette spline , un autre programme teste une spline , si il trouve dans le container cette valeur in fait une action sinon si pas il fait une autre action
j' ai en partie solutionner avec :
je recupere ce que je trouve comme valeur d'indexCode:var cont = new (BaseContainer); cont = objet ->GetContainer(); var MaValeur = cont->GetInt(0); cont->InsData(MaValeur,1); cont->SetData(MaValeur1); // pas forcement utile mais ca marche mieux :shock: var index= MaValeur->GetIndexData(); println(index);
et dans le second programme
et je récupère la valeur avec un GetData(valeur trouvée dans le println(index))
mais ça me parait un peut chipot et peux fiable :oops:
si quelque qu' un a une autre soluce ou une explication suis preneur
paspas
pour stocker une valeur dans un container il faut d'abord définir un ID (numéro d'identifiant qui permet de pointer directement la valeur parmis les autres paramètres) ensuite tu écris la valeur avec SetData (ID, valeur) ou tu la lis GetData(ID).
Cet ID peut être n'importe quelle valeur définie de manière absolue, par exemple ID=123456789.
Ce qu'il faut éviter c'est de définir un ID déjà utiliser pour les paramètres du container, c'est à dir un ID correspondant déjà au stockage d'un paramètre de l'objet, sinon bien sûr, tu vas écraser ce paramètre avec ta valeur perso, et ça risque de partir en vrille ! :lol:
l'ideal c'est de se définir un ID (12345 par exemple) ensuite de vérifier si il est dispo ou pas, en lisant la valeur de cet ID avec GetData(ID), si ça ne renvoit rien, if (!GetData(ID)), alors tu peux logiquement y mettre ta valeur perso.
pour vérifier plus rapidement quels ID utilisent C4D pour pointer vers les paramètres des objets, tu vas dans le dossier de C4D \resource\res\description\
là il y a des fichier en extension .h (header) tu les ouvres avec un editeur de texte, ils contiennent les ID (noms et identifiant associés) des paramètres pour chaque type d'objet.
Pour un objet Nurbs Bezier par exemple, les ID utilisés sont
BEZIEROBJECT_SUBRX = 1000,
BEZIEROBJECT_SUBRY = 1001,
BEZIEROBJECT_SUBX = 1002,
BEZIEROBJECT_SUBY = 1003,
BEZIEROBJECT_CLOSEX = 1004,
BEZIEROBJECT_CLOSEY = 1005
:wink:
Pour un objet SPline :
SPLINEOBJECT_INTERPOL = 820,
SPLINEOBJECT_TYPE = 1000,
SPLINEOBJECT_TYPE_LINEAR = 0,
SPLINEOBJECT_TYPE_CUBIC = 1,
SPLINEOBJECT_TYPE_AKIMA = 2,
SPLINEOBJECT_TYPE_BSPLINE = 3,
SPLINEOBJECT_TYPE_BEZIER = 4,
SPLINEOBJECT_INTERPOLATION = 1001,
SPLINEOBJECT_INTERPOLATION_NONE = 0,
SPLINEOBJECT_INTERPOLATION_NATURAL = 1,
SPLINEOBJECT_INTERPOLATION_UNIFORM = 2,
SPLINEOBJECT_INTERPOLATION_ADAPTIVE = 3,
SPLINEOBJECT_INTERPOLATION_SUBDIV = 4,
SPLINEOBJECT_CLOSED = 1002,
SPLINEOBJECT_SUB = 1003,
SPLINEOBJECT_ANGLE = 1004,
SPLINEOBJECT_MAXIMUMLENGTH = 1005
merci ```
comment ?il faut d'abord définir un ID
container ->InsData(12345); // avec ca ??
container->SetData(12345,10);
avec le test que tu preconise bien sur . :lol:
non normalement tu as juste à définir ta valeur comme tu l'as fait dans ton exemple avec MaValeur, c'est ton ID.
var monID=12345;
container->SetData(monID, 1); // ça écrit la valeur 1 accessible avec son ID 12345
edit : SetContainer(container);// redéfini le container avec ce nouveau paramètre
var valeur=container->GetData(monID); // retourne 1 si tu la lis
container->SetData(monID, 2); // remplace ta valeur perso 1 par 2
edit : SetContainer(container);// redéfini le container avec ce changement de valeur
merciiiiiii
je test ca ce soir :poucehaut:
paspas
J'ai testé exactement ça ce midi Tengaal, mais lorsque que j'ai essayé d'y accéder avec une autre expressions coffee il retourne nil. :coup:
edit : autant pour moi, j'avais oublié le SetContainer(); :oops:
oui moi aussi j'avais oublié de préciser qu'il fallait terminer par un SetContainer() pour actualiser le changement de valeur. :wink: