PDA

Voir la version complète : Problème Comment automatiser des taches via un script ""python_init.py" ?



phobos34
13/11/2012, 10h41
Bonjour,

Voila je cherche a crée un script pour automatiser une tache sur une grand nombre de fichier .c4d.

Je me suis donc tourné vers le scripte "python_init.py" dans préférence pour qu'il s’exécute dès l'ouverture de C4D (vue qu'il n'y a pas de ligne de commande pour lancer c4d.exe + un script, comme dans maya ou max...)

Mon script doit donc automatisé l'ouverture d'un fichier.c4d (ca j'y arrive sans problème) et après collecter des informations dans celui-ci en vue de les exporter ?

j' arrive via un script a collecter des informations mais que quand c4d est déjà lancer et le fichier 3d déjà ouvert. (ça c'est facile)

Ce que je n'arrive pas a faire dans mon script "python_init.py" c'est a lire les information du fichier qu'il a ouvert lui (via la focntion "documents.LoadFile(FileName)")
le script lance les commande mais n'attend pas la fin de celle ci pour exécuter la suite (très bizarre), donc il lance la commende d'ouverture du fichier mais après si je vais par exemple un simple : "fps = doc.GetFps()" ça ne marche pas vue que le fichier 3d n'est pas encore ouvert.

Vous savez comment je peut arrivé a faire cela, est-ce que c'est seulement possible de le fait dans cinema 4d (j’espère car sinon je suis mal) ? la fonction "time.sleep()" dans une fonction ne marche pas, ça stop l’exécution de c4d.

voici mon code pour mes test (enfin une des 50 version que j'ai tester en viens):




import c4d
import sys
from c4d import documents,storage

def main():
FileName="e:/work/cine4d/test/test.c4d"
documents.LoadFile(FileName)
fps = doc.GetFps()
scenename = doc.GetDocumentName()
pathname = doc.GetDocumentPath()
rd = doc.GetActiveRenderData()
print fps

if __name__=='__main__':
main()
c4d.EventAdd() #update


merci pour le coup de main, ça fait 4 jours que je cherche en viens.(j'ai fait tous les forum sur cinema 4d du net sans trouver de solution)

Par avance merci (je sais c'est pas simple!)

César Vonc
13/11/2012, 11h49
Salut,

À mon avis le document chargé se retrouve différent de la variable doc car elle a été initialisée avant son chargement.


Essaie d'ajouter un : doc = c4d.documents.GetActiveDocument() après ton LoadFile().

phobos34
13/11/2012, 12h06
Merci César,

ca marche impec ! (tu es trop fort)

autre petite question, toujours dans le but de mon automatisation, je démarre c4d.exe depuis en fichier bat, dans ce fichier je passe
en paramètre une variable (le nom et chemin du fichier a ouvrir)

je récupère cette variable via "command.pyp" dans le rep préférence plugins.

ca ca marche, voici mon code




import c4d
import sys

def PluginMessage(id, data):
if id==c4d.C4DPL_COMMANDLINEARGS:
global path
path=sys.argv[0]
return True

return False



Le problème c'est que n'arrive pas a communiquer cette livrable "path" a mon script "python_init.py"
je doit rajouter quoi comme code et dans quel script ?

j'ai vue que le "python_init.py" s’exécuter avant "command.pyp" je peux faire comment pour qu'il attende cette info ?

Encore merci César

César Vonc
13/11/2012, 12h25
Là, j'avoue que je l'ignore.

Mais pour le coup, pourquoi ne pas passer tout ton script dans command.pyp ?


Ceci dit, j'aurais plutôt fait en sorte que python_init.py lise un petit fichier texte contenant la liste des fichiers à ouvrir :



texte = open(chemindufichiertexte, "r")
liste = texte.readlines()

phobos34
13/11/2012, 13h13
merci César, j'ai tous mi dans "command.pyp" et du coup ça marche impec.
je ne peut pas mètre la liste dans un txt, les fichiers n'arrive pas tous en même temps (ca serait trop facile)

Encore merci