Bonjour Bojour,
Je suis actuellement en train de coder quelques petits scripts pour Cinema 4D grâce au plugin py4D. N'ayant plus touché à python depuis un certain bout de temps, je me permet de vous poser une petite question.
Je précise qu' un topic similaire est déja ouvert sur frenchCinema4D, mais étant donné le peu de programmeurs actifs sur le forum, je me permet d'ouvrir un topic dédié ici^^
Voici le problème:
Le but du script est de créer un matériau avec une texture chargée à partir d'un fichier. J'ai réussi à instancier les objets nécessaires pour te ce bazar, mais le problème est le suivant. Je crains que la portée d'un certain objet (BaseList2D) ne soit limitée à la seule exécution du script. C'est elle qui contient les données relatives à la localisation de la texture.
Or, l'objet matériau possède une variable de type BaseList2D qui correspond à l'objet que j'ai. Malheuresement, je ne peux instancier un objet directement en tant que variable du matériau, je suis donc obligé de créer un objet shd et de l'affecter à l'attribut de mon matériau.
Or à la fin du script, le matériau se retrouve crée, mais sans les infos sur la texture (le fameux shd).
Je précise que pour charger des objets dans le document C4D en cours, Py4D posède des fonctions propres, mais pas pour la BaseList2D.
Je voulais donc savoir s'il existait un moyen de "graver" cet objet dans l'attribut de mon matériau, et non en faire une simple référence sur ma variable temporaire. J'ai déja essayé l'utilisation de copy.copy(), mais malheuresement sans succès.
Si quelqu'un à une idée, je suis preneur^^
De plus, je me trouve actuellement sur la version R11.5 qui n'implémente pas encore la fonction InsertShader() commentée dans le code. Or cette fonction fait précisément ce que je cherche à trouver ici^^.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 mat = c4d.BaseMaterial(c4d.Mmaterial) shd = c4d.BaseList2D(c4d.Xbitmap) shd[sy.BITMAPSHADER_FILENAME] = "test.jpg" mat[sy.MATERIAL_COLOR_SHADER] = shd #mat.InsertShader(shd) mat.Message(sy.MSG_UPDATE) mat.Update(True, True) doc.InsertMaterial(mat)
D'ici que ma boîte passe à la R12, je vais continuer de chercher une solution "avec les mains"
Bon après-midi,
Mirox
Partager