Boutique Cinema 4D
Affichage des résultats 1 à 14 sur 14

Discussion: sauver un fichier .C4D de manière automatique en pthyton

  1. #1
    Timide
    Date d'inscription
    novembre 2012
    C4D version
    R13 Studio
    OS
    windows 7
    Messages
    41

    sauver un fichier .C4D de manière automatique en pthyton

    Salut,

    voila j'ai un petit problème pour sauver un fichier .c4d en python de manière automatique.

    j’utilise la fonction suivante:

    Code PHP:
    documents.SaveDocument(doc"test.c4d"c4d.SAVEDOCUMENTFLAGS_0c4d.FORMAT_C4DEXPORT
    qui sauve très bien le fichier .c4d mais je suis obliger de valider le bouton "enregistré " a la main (donc cela ne sert pas a grande chose)

    y a t-il un moyen pour forcer la sauvegarde sans avoir cette boite de dialogue ?
    sinon peut-on automatiser le click sur le bouton enregistré de cette boite de dialogue ?

    par avance merci
    Dernière modification par phobos34 ; 05/12/2012 à 18h25.

  2. #2
    Pilier Avatar de xs_yann
    Date d'inscription
    février 2005
    C4D version
    R19 Studio
    OS
    Mac OS X 10.13
    Messages
    1 990
    Salut,

    La solution :
    http://www.plugincafe.com/forum/foru...s.asp?TID=5896

    Code PHP:
    import os
    import c4d
    from c4d import documents
    storage


    def main
    ():
        
    path storage.GeGetC4DPath(c4d.C4D_PATH_DESKTOP)
        
    path os.path.join(path,'testscene.c4d')
        
    documents.SaveDocument(docpathc4d.SAVEDOCUMENTFLAGS_0c4d.FORMAT_C4DEXPORT)  

    if 
    __name__=='__main__':
        
    main() 
    Dernière modification par xs_yann ; 05/12/2012 à 18h42.

  3. #3
    Gourou Avatar de valkaari
    Date d'inscription
    mai 2009
    C4D version
    Autre
    OS
    OSX / windows
    Messages
    2 949
    sinon pour le coté "automatique" j'imagine que tu veux une sauvegarde toutes les X minutes, il y a dans les exemples python un plug qui fait un refresh automatique (le plug avec le rss).

    Il faut utiliser la fonction "timer" (ce qui oblige d'avoir la fenêtre de dialogue ouverte ou dans un coin de l'écran).


    A voir si un autre type de plug permet de le faire.

  4. #4
    Timide
    Date d'inscription
    novembre 2012
    C4D version
    R13 Studio
    OS
    windows 7
    Messages
    41
    merci, cela semble fonctionner sur le bureau.
    juste une petite question, cette ligne sert a définir comme chemin le bureau:

    Code PHP:
    path storage.GeGetC4DPath(c4d.C4D_PATH_DESKTOP
    mais si je la remplace par un autre chemin cela ne fonctionne plus (genre c:\toto\...)
    il faut utiliser quelle fonction pour modifier le chemin ?

    encore merci

  5. #5
    Timide
    Date d'inscription
    novembre 2012
    C4D version
    R13 Studio
    OS
    windows 7
    Messages
    41
    bon j'ai trouver, il faut utiliser la syntaxe suivante

    Code PHP:
    path"E:\\Work\\cine4d\\test\\" 
    a la place de "path = storage.GeGetC4DPath(c4d.C4D_PATH_DESKTOP)"

  6. #6
    Pilier Avatar de xs_yann
    Date d'inscription
    février 2005
    C4D version
    R19 Studio
    OS
    Mac OS X 10.13
    Messages
    1 990
    Si tu veux une solution plus propre et portable, tu peux utiliser les paramètres de c4d.storage.GeGetC4DPath() :

    Code PHP:
    C4D_PATH_PREFS        CINEMA 4D prefs directory
    C4D_PATH_RESOURCE        CINEMA 4D resource directory
    C4D_PATH_LIBRARY            CINEMA 4D library directory 
    (builtin)
    C4D_PATH_LIBRARY_USER        CINEMA 4D library directory (different if multiuser mode enabled).
    C4D_PATH_ONLINE_HELP        CINEMA 4D Online Help Directory.
    C4D_PATH_DESKTOP            OS Desktop Directory
    C4D_PATH_HOME            OS Home Directory
    C4D_PATH_STARTUPWRITE    Writeable StartupDir
    .
    C4D_PATH_MYDOCUMENTS    The user’s documents directory
    ou bien ces fonctions :

    Code PHP:
    GeGetPluginPath()
    GeGetStartupApplication()
    GeGetStartupWritePath()
    GeGetStartupPath() 
    pour avoir un chemin de base et ensuite tu peux ajouter des répertoires avec os.path.join.

  7. #7
    Timide
    Date d'inscription
    novembre 2012
    C4D version
    R13 Studio
    OS
    windows 7
    Messages
    41
    ok merci xs_yann,

    par contre comment fait-on dans c4d en python pour exécuter une ligne de commande externe ?
    je veux lancer un programme externe avec des option via une ligne de commande dans une fenêtre dos ?
    on peut attendre sue la fenêtre dos ce ferme ou pas ? (comme avec la fonction python "os.popen(cmd)")

    merci
    Dernière modification par phobos34 ; 06/12/2012 à 14h57.

  8. #8
    Gourou Avatar de César Vonc
    Date d'inscription
    avril 2006
    C4D version
    Autre
    OS
    Windows 10
    Messages
    2 483
    Je ne comprends pas ta question, tu sembles y répondre.

    En Python, tu peux lancer une commande DOS avec os.popen(), oui.

    Et pour lancer un programme en DOS suffit juste de taper son chemin, non ?

  9. #9
    Timide
    Date d'inscription
    novembre 2012
    C4D version
    R13 Studio
    OS
    windows 7
    Messages
    41
    ba non, la commande "os.popen(cmd)" ne marche pas, il doit falloir utiliser une fonction spécial de c4d pour executer
    une ligne de commande externe

  10. #10
    Gourou Avatar de César Vonc
    Date d'inscription
    avril 2006
    C4D version
    Autre
    OS
    Windows 10
    Messages
    2 483
    Tu as bien mis import os en début de code ?

    La doc Python recommande d'utiliser subprocess plutôt que os.popen() :

    http://docs.python.org/2/library/subprocess.html

    Voici un exemple qui ouvre le dossier courant avec la commande "start .\" :

    Code PHP:
    import c4d
    import subprocess

    def main
    ():
        
    proc subprocess.Popen("start .\\"shell=True)
        
    proc.wait()
        print 
    "Dossier ouvert"

    if __name__=='__main__':
        
    main() 
    wait() permet d'attendre que la commande DOS se termine.

  11. #11
    Gourou Avatar de valkaari
    Date d'inscription
    mai 2009
    C4D version
    Autre
    OS
    OSX / windows
    Messages
    2 949
    si jamais la solution Python ne fonctionne pas, tu peux regarder du coté


    c4d.storage.GeExecuteProgram(app, path)
    ou
    c4d.storage.GeExecuteFile


    Attention, il y a peut être des restrictions sur l'exécution de programmes extérieurs à c4d via une commande dans c4d. (pour des raisons de sécurités)


    (.... enfin j'espères)

  12. #12
    Invité
    Date d'inscription
    juin 2002
    C4D version
    R16 Studio
    OS
    Win 7 Pro
    Messages
    4 252
    heu... j'ai un doute, ou alors j'ai pas du tout compris le problème de départ, mais pourquoi ne pas utiliser la fonction de sauvegarde automatique de C4D tout simplement ?

    Préférences générales -> fichiers et là on active la sauvegarde automatique on définit l'intervalle de temps entre chaque sauvegarde, le chemin de sauvegarde du projet ou un chemin spécifique, etc.. et voilà.

    non ? j'ai loupé un truc peut-être ?

  13. #13
    Timide
    Date d'inscription
    novembre 2012
    C4D version
    R13 Studio
    OS
    windows 7
    Messages
    41
    merci César,

    effectivement "subprocess" marche parfaitement.

    pour répondre a
    Tengaal, le but de cette fonction est de pouvoir sauver de manière automatique mais
    sous un nom diffèrent et/ou un emplacement différent.

  14. #14
    Invité
    Date d'inscription
    juin 2002
    C4D version
    R16 Studio
    OS
    Win 7 Pro
    Messages
    4 252
    ok mais justement, la fonction intégrée de C4D ne permet pas cela déjà ?

    on peut définir le chemin des sauvegardes (dossier du projet, ou dossier personnalisé)
    on peut définir le nombre de copie également, c'est à dire qu'à chaque sauvegarde le nom du fichier sera incrémenté.

    si on définit le nombre de copies à 20 par exemple, avec un délais de sauvegarde de 5 minutes, alors, toutes les minutes on aura un nouveau fichier, du genre:
    fichier_001.c4d
    fichier_002.c4d
    fichier_003.c4d
    etc...
    fichier_020.c4d (donc ici au bout de 20x5min = 1h40m de travail)

    au dela de 20, le fichier le plus récent se sauvegarde à nouveau avec le nom 001, puis 002, etc... jusqu'à 020.

    l'autre intérêt de la fonction interne de c4d, c'est que si on doit s'absenter un instant et qu'on oublie de désactiver l'enregistrement automatique, le fichier ne sera pas enregistré si aucune action n'a été faite depuis la dernier sauvegarde.

Discussions similaires

  1. Tourner, déplacer, agrandir des UV de manière précise
    Par actarus dans le forum BodyPaint 3D
    Réponses: 2
    Dernier message: 01/11/2011, 20h40
  2. animer des ensembles d'objets de manière sequentielle
    Par guiguip dans le forum Nouveaux membres
    Réponses: 5
    Dernier message: 19/07/2008, 17h48
  3. impossible de loader ou de sauver :(((
    Par mips dans le forum Général Cinema 4D
    Réponses: 15
    Dernier message: 24/01/2006, 18h50
  4. Comment sauver cet avion du démentellement?
    Par sylv dans le forum Modélisation
    Réponses: 35
    Dernier message: 14/03/2005, 18h39
  5. Réponses: 7
    Dernier message: 12/03/2004, 10h10

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •  
Mediaworks - Logiciels 3D | Design Internet - Creation site internet