PDA

Voir la version complète : Question Mon panier à questions Python



Math1712
01/02/2015, 19h13
[c4d.ID_BASELIST_NAME]

Bonjour,

Qui saurait m'expliquer [c4d.ID_BASELIST_NAME] ??? je le croise parfois dans les script que je décortique pour apprendre mais je ne piges pas à quoi cela sert ? J'ai cherché dans la doc SDK pas grand chose la dessus ou bien j'ai pas cherché au bon endroit ? :huh:

Merci

Math

César Vonc
01/02/2015, 22h21
Salut,

c4d.ID_BASELIST_NAME est une constante, elle vaut 900.

Le fait qu'elle soit entre crochet signifie que tu cherches la valeur d'une sorte de tableau à la clef 900 (plus précisément d'un GeListNode (http://www.maxonexchange.de/sdk/CINEMA4DPYTHONSDK/help/modules/c4d/C4DAtom/GeListNode/index.html#c4d.GeListNode)).

Ainsi, objet[c4d.ID_BASELIST_NAME] renvoie le nom de l'objet. Glisse n'importe quel paramètre d'un objet dans le champ de la console Python pour voir comment récupérer sa valeur avec la constante correspondante.

Math1712
02/02/2015, 15h19
Ok merci ! Je pense avoir compris (sans en être complétement sur :icon_mrgreen:)

Voila ce que j'en ai fait - je suis méga débutant soyez indulgent :biggrin:=>

14020

Si le nom du neutre est FC4D le tag xpresso est visible et le motext affiche Tag Visible
Si le nom du neutre est différend de FC4D le tag xpresso est caché et le motext affiche Tag Caché
Je me sert également [c4d.ID_BASELIST_NAME] pour renommer l'objet Motext

Il faut cliquer n'importe ou pour que le changement s'effectue après le changement du nom du neutre, pourquoi faut-il cliquer ?
Est-ce que mon code est correctement rédigé ?

Math

Floc
02/02/2015, 19h22
Pour ce genre de manip il y a aussi des fonction toutes faites. C'est à mon avis plus simple et surtout plus lisible.



nom = objet.GetName()
Text.SetName(nom)

au lieu de

nom=objet[c4d.ID_BASELIST_NAME]
Text[c4d.ID_BASELIST_NAME]=nom


Sinon chez moi il n'y a pas besoin de cliquer pour mettre à jour le viewport.
Normalement on écris c4d.EventAdd() pour signaler à c4d de mettre à jour mais dans un xpresso je suis pas sur.

un peu noob aussi en python

Math1712
03/02/2015, 15h45
Ok Floc, là l'idée était d'utiliser [c4d.ID_BASELIST_NAME] mais bien sur que je comprends qu'il vaille mieux utiliser les fonctions toutes prêtes. J'avoue être perdu dans le SDK je ne suis pas sur d'en avoir saisi les tenants et les aboutissants et je ne sais pas qu'elle est la bonne méthode de recherche, j'en profite pour changer le titre de mon post car je vais avoir de nombreuses autres questions.:P

Floc
03/02/2015, 18h33
Oui c'est vrai que toutes ces différentes facon d'acceder au données c'est plutôt perturbant.
D'ailleurs moi aussi je patauge pas mal.
Et oui la difficulté du python avec C4D c'est bien le SDK car le language lui-meme est plutôt agréable.
J'ai un peu pratiqué maxscript et le mel de maya et je trouve le python de C4D assez ardu. En fait tu est directement face au SDK assez proche de la version C++. Mel ou maxscript sont des couche simplifiées au dessus du SDK.
Apres il y a des avantages et des inconvénients.

Mais il y a un lien qu'il faut que je retrouve ou le gars explique le pourquoi des différentes méthodes d'accès et notamment leur impact en termes de performance. Et bizarrement les accès direct sont apparemment les moins performants.

César Vonc
03/02/2015, 18h42
Il y a plusieurs sujets là-dessus sur plugincafe, notamment celui-ci :

http://www.plugincafe.com/forum/forum_posts.asp?TID=5286

Où ils préconisent d'utiliser plutôt Get/SetParameter ou des fonctions comme GetName(), GetString... car ça ne générerait pas d'erreur si l'index du BaseContainer n'existe pas, si j'ai bien compris.


Mais bon...

Ce serait plutôt logique si Get/Set est moins performant que l'accès direct avec les crochets, si les méthodes vérifient que l'index existe avant de le récupérer.

Edit : Ah, t'as dit l'inverse, Floc. Oui en effet, ce serait curieux, faudrait comparer à l'occasion. : P

Math1712
04/02/2015, 09h37
Bon j'essaye de faire une interface toute bête avec 3 boutons ok, et j’essaye de changer la couleur du fond de l'interface

GeDialog.SetDefaultColor(GROUP_ID1, c4d.COLOR_BG, color) pour color la console me renvoie TypeError: argument 3 must be c4d.Vector, not int

C'est quoi c4d.Vector ? :icon_arg:

Merci

César Vonc
04/02/2015, 15h27
C'est un vecteur, donc défini par trois valeurs, ici RVB :

c4d.Vector(1,0,1) donne du magenta

Floc
04/02/2015, 18h27
J'ai retrouvé le lien pour ces histoires d'acces direct (subscripting ca s'apelle) ici (http://www.cineversity.com/wiki/Python%3A_Creating_objects_and_modifying_parameter s/). c'est sur cineversity.
Et c'est bien ca, la methode direct serait "the slowest" !