Je rencontre un autre problème avec un tag Python.
Je multiplie avec un cloneur des objets qui sont eux-même des "instances" d'autres objets.
J'essaye dans un tag Python d'avoir accès à ces objets pour obtenir leur propriétés.
Pour faire cela, je recherche les enfants de l'objet cloneur, puis s'il s'agit d'instances, je tente de faire accès à l'objet source de l'instance à l'aide de la fonction de la classe instance "GetReferenceObject", qui prend comme paramètre l'objet représentant le document actif courant.
Tant que je travaille dans le viewport, cela fonctionne parfaitement et cette fonction retourne bien l'objet source.
Par contre, lors du rendu, cette fonction retourne "None".
Est-ce parce que le "document" n'est plus valide (il n'y a plus de vue) ? ou simplement parce que je n'utilise pas la bonne méthode ?
Merci également pour votre aide.
Salut, lorsque tu fais un rendu la scène est copié et optimisé, du coup ça ne m’étonnerais pas que tes instances sois déjà convertit directement en objets (mais je ne suis pas sur pour le dernier point de ce qui est exactement optimisé ou pas).
Cependant tu ne dois jamais avoir de call de c4d.documents.GetActiveDocument() dans un generateur, privilégie toujours op.GetDocument() (qui te permettra a coup sur de retourner le document dans le quel l’objet actuel est. Cependant fait attention car un object peux ne pas être dans un document.
obj = c4d.BaseObject(c4d.Ocube)
va créer un objet qui n'est pas dans un document.
Que veux tu faire avec ces instances? Tu veux juste récup leur position ou vraiment l'objet? Si oui pour faire quoi avec?
Si tu veux recup juste la position tu as l’exemple read_modata_color qui te montre comment faire pour lire la couleur de chaque clone.
Si tu n'y arrive pas avec ça pourrais tu partager ton code?
Bonne journée
Dernière modification par gr4ph0s ; 11/12/2021 à 11h39.
SDK Specialist
MAXON Computer GmbH
Bonjour gr4ph0s,
Merci pour ta suggestion. Je vais l'essayer pour voir si cela change quelque-chose et je te tiens au courant.
Dans ce cas bien précis, j'essaye de retrouver le maillage des objets d'origine des instances pour en déterminer le contour dans les images rendues, ces contours étant utilisés pour créer des annotations.
J'arrive à créer ces annotations séparément en jouant mon animation dans le viewport, mais j'aurais trouvé plus commode de le faire directement lors de la génération des images.
Ce petit message juste pour confirmer que c'était bien cela mon problème.
Je vois que l'on peut aussi utiliser la variable globale "doc", et dans ce cas là je ne rencontre plus le problème.
Maintenant encore une petite question:
Je me suis rendu compte (voir dans ce fil) que si je veux faire des calculs qui tiennent compte correctement de l'ensemble de la scène et les présenter dans l'interface viewport, il faut que j'utilise un tag "interaction" et que je définisse mon code en tant que fonction "Draw".
L'inconvénient est que cette fonction n'est pas appelée durant le rendu.
Voici donc la question: y a t'il moyen de créer un code qui s'exécute à la fois au moment du dessin du viewport et au moment du rendu, et dans les deux cas, une fois que tous les éléments de la scène sont calculés ?
Notez que je n'ai pas regardé l'implémentation de code sous forme de plugin jusqu'à présent (J'en suis à l'utilisation des tags, des générateurs et des scripts embarqués). Y a t'il une solution dans cette direction *?
*Vous pouvez me répondre par oui ou par non sans plus, ce qui me permettrait de gagner du temps. Sinon, c'est à moi d'aller lire la doc !
Dernière modification par bru ; 17/12/2021 à 16h26.