Boutique Cinema 4D
Page 1 sur 2 12 DernièreDernière
Affichage des résultats 1 à 30 sur 48

Discussion: Py4D : le language python dans C4D

  1. #1
    Pilier Avatar de oli_d
    Date d'inscription
    avril 2004
    C4D version
    Autre
    OS
    MacOS X
    Messages
    707

    Py4D : le language python dans C4D

    EDIT : en cours de modification pour adaptation au python de la r12, les captures d'écran ne sont pas encore à jour

    Attention vous devez avoir au moins la version 12 de Cinema4D

    Python : kesako ?


    La version 12 de c4d vous permet de programmer des scripts et plugins en langage Python. Le python est déjà utilisé dans de nombreux autres logiciels tels que Blender, Vue, etc.. Le python est également utilisé pour créer des programmes autonomes.

    Dans Cinema4D il y a en gros cinq possibilités d'utilisation différentes :
    • les scripts
    • les tags ou propriété Py4D
    • les noeuds Xpresso
    • les génerateurs
    • les plugins


    Les scripts sont comparables aux scripts C4D en COFFEE. Vous pouvez les écrire directement dans le Gestionnaire de script (Script Manager) du menu Python ou dans un autre programme et les enregistrer au format texte dans un fichier .py. On les utilisera pour des programmes simples dont l'action se fera sur demande (en cliquant sur exécuter ou en appelant le script via un menu)

    Le tag Py4D est tout à fait comparable au tag COFFEE, le code s'exécute chaque fois qu'il y a un "évènement" dans C4D.

    Le noeud Xpresso permettra d'inclure un bout de code personnalisé au milieu de chaines Xpresso.

    Les générateurs servent à créer des objets similaires aux objets paramétriques, mais sans avoir besoin de créer un plugin

    Pour les plugins c'est un tout petit peu plus compliqué, mais vous pourrez a peu près tout créer (objets paramétriques, déformateurs, tags, matières, etc...) et vous prendre pour les développeurs de Cinema4d. Ils sont chargés au lancement de c4D et toute modification nécessite de relancer cinema4d (pour l'instant).

    Bon le mieux c'est de comprendre par l'exemple, donc au boulot

    Premier Script en python

    • Ouvrez la console du menu Python
    • Ouvrez le Gestionnaire de script du menu Python
    • Tapez : print "Hello world" à la place du texte existant (attention de bien écrire print en minuscule)
    • Cliquez sur le bouton Exécuter




    Si tout se passe bien vous devriez voir s'afficher "Hello world" dans la Console (je sais ça impressionne pas encore les filles (ou les garçons pour les filles), mais ça viendra...).

    Le Gestionnaire de scripts sert à saisir le code, le bouton Exécuter je vous le donne en mille ...l'exécute.
    Notre super programme comprend une ligne avec une fonction print . Cette fonction "imprime"le texte qui suit dans la console. Pour du texte il faut le mettre entre guillemets double ou simple
    print 'Salut la French' fonctionne également.
    Vous pouvez également envoyer des nombres et là pas besoin de guillemets : print 12345

    Cette fonction print sera très utile pour faire des tests au milieu d'un programme. Vous pouvez effacer le texte existant dans la console en cliquant sur le menu Fichier/Effacer

    Bon maintenant je vous apprend à faire faux, tapez Print 12345 (majuscule au début de print)


    Eh beh ouais, ça marche pas à tout les coups, il faudra vous y habituer!
    Il nous a mis un message d'erreur dans la cosole qui dit en gros qu'on a fait une connerie à la ligne 1, c'est une erreur de nom il connait pas ce Print. Donc première leçon le python est sensible à la casse, print n 'est pas la même chose que Print et encore moins que PRINT


    la suite au prochain épisode ....
    Dernière modification par oli_d ; 09/06/2011 à 22h26.

  2. #2
    Gourou Avatar de Jean-Laurent
    Date d'inscription
    mai 2006
    C4D version
    R11.5
    Messages
    3 407

    Re*: Py4D : le language python dans C4D

    Ah, c'est malin. :roll: Comme si les journée était pas déjà assez courtes. :cry2:
    J'en suis à la page 122 d' "apprendre le python" du coup. :wink:

    Les deux premières questions:

    - L'installation de Py4D est je présume obligatoire pour l'utilisation d'un plugin python, contrairement au coffee qui est directement rattaché au logiciel? Pas de conversion possible d'un plug réalisé en python en fichier binaire directement utilisable dans le menu plugin ? On peut rêver. :mrgreen:

    - C'est quoi la différence entre 'hello' et "hello" ?
    De mémoire en C++ c'était un caractère et une chaine de caractère, mais en python ça semble identique, c'est le cas ?

    Très belle initiative en tout cas. :poucehaut:
    SMC fan.

  3. #3
    Pilier Avatar de oli_d
    Date d'inscription
    avril 2004
    C4D version
    Autre
    OS
    MacOS X
    Messages
    707

    Re*: Py4D : le language python dans C4D

    Citation Envoyé par Jean-Laurent
    Ah, c'est malin. :roll: Comme si les journée était pas déjà assez courtes. :cry2:
    J'en suis à la page 122 d' "apprendre le python" du coup. :wink:
    C'est pas perdu, je n'ai pas l'intention de réécrire le bouquin mais juste donner des pistes pour l'utilisation spécifique du python dans C4D

    Citation Envoyé par Jean-Laurent
    - L'installation de Py4D est je présume obligatoire pour l'utilisation d'un plugin python, contrairement au coffee qui est directement rattaché au logiciel? Pas de conversion possible d'un plug réalisé en python en fichier binaire directement utilisable dans le menu plugin ?
    Oui pour l'instant il faudra installer le plugin pour faire tourner les plug en python, mais à mon avis vu tous les avantages du python Maxon va sûrement intégrer ça dans une prochaine version et à mon avis il vont progressivement laisser tomber le COFFEE (ce ne sont que des suppositions).

    Citation Envoyé par Jean-Laurent
    - C'est quoi la différence entre 'hello' et "hello" ?
    Il y en a un qui a des guillemets doubles :mrgreen:
    Plus sérieusement il y a une bonne explication page 46 du livre de Swinnen qui est cité ci-dessous (5.2.1) en gros si tu veux inclure des apostrophes dans ton texte utilise les guillemets doubles et vice et versa, exemple
    Code:
    print 'la"sandbox" de Py4D'#affiche : la"sandbox" de Py4D
    print "l'olivier'" #affiche : l'olivier
    Dernière modification par oli_d ; 09/06/2011 à 22h28.

  4. #4
    FC4D Puppet Avatar de BerTiN03
    Date d'inscription
    août 2006
    C4D version
    R13 Studio
    OS
    Windows 8
    Messages
    4 326

    Re*: Py4D : le language python dans C4D

    :poucehaut:

    Bon pareil, journée trop courtes pour apprendre ça pour ma part, mais ceci dit, je suis avec intérêt ! :bounce:
    Qui fait le malin, tombe dans le ravin...

  5. #5
    Gourou Avatar de clemz
    Date d'inscription
    février 2009
    C4D version
    R15 Studio
    OS
    windaube x64
    Messages
    2 165

    Re*: Py4D : le language python dans C4D

    super Oli_D merci

  6. #6
    Pilier Avatar de oli_d
    Date d'inscription
    avril 2004
    C4D version
    Autre
    OS
    MacOS X
    Messages
    707

    Py4D : le language python dans C4D


    Le language Python


    Dans ce chapitre nous allons voir les bases du python pour nous permettre de coder dans C4D. Je ne vais pas faire un cours complet sur le python, il en existe d'ailleurs déjà un qui est très bien fait et que je vous conseille vivement (en plus il est gratuit) :
    http://www.inforef.be/swi/download/python_notes.pdf Il s'agit de "Apprendre à programmer avec Python" de Gerard Swinnen. Je ferai souvent référence à ce livre

    Le langage python est un langage interprété, c'est à dire qu'il n'a pas besoin d'être compilé (contrairement au c++). Il est directement interprétable par la machine (plus d'info p.13 du livre).
    C'est un langage portable, c'est à dire que l'on peut le faire tourner sur Mac, PC, Linux ....
    Vous m'avez souvent entendu pester contre le c++ parce qu'il faut le compiler une fois en mac, une fois en PC32 bits et une fois en PC64bits, et puis il faut la plupart du temps le recompiler d'une version de C4D à l'autre, avec python on oublie tout ça !


    Les opérateurs
    (cf p19 du livre)
    Bon on va faire un peu de calcul :


    Donc on remarque que les opérateurs courants fonctionnent (+,-,*,/), il y en a un particulier "**" ça c'est "puissance" 2**3 signifie 2 3 c'est à dire 2*2*2. On remarque également que l'ordre prioritaire est pris en compte, multiplication avant les additions, etc...

    Essayez maintenant print 7 / 2

    Fichtre, diantre, saperlipopette ! ça donne 4 !

    Rajoutez un point après le 7 : print 7. / 2 et tout rentre dans l'ordre, cela donne bien 3.5. Cela veut dire que dans le python si vous n'avez que des nombres entiers dans un calcul, le résultat sera en entier, si vous voulez un résultat en décimal il faut qu'il y ait au moins un nombre avec une décimale. Notez bien ce point, parce que perdu au milieu de nombreuse lignes de code un petit détail comme ceci peut devenir difficile à corriger (c'est du vécu !)

    Parmi les opérateurs citons encore le modulo "%" que l'on utilise quelque fois en programmation et qui sert à retourner le reste d'une division :
    6 % 2 = 0 (6 / 2 donne un chiffre entier, il ne reste rien)
    7 % 2 = 1 (7 / 2 donne 2 et il y a encore 1 unité à diviser)
    18 % 10 = 8 etc...
    On peut utiliser ceci pour par exemple savoir si un chiffre est pair ou impair, pour calculer le jour de la semaine d'une date etc...

    Les variables(cf p.21 du livre)

    Les variables servent à stocker des données de toutes sortes pour les utiliser dans le code. En COFFEE et en C++ il faut mettre un terme particulier pour déclarer une variable, en c++ il faut en plus donner le type de la variable (texte, entier,décimal etc...) En python pas besoin vous pouvez directement utiliser une variable exemple :
    Code:
    base = 5
    hauteur = 3
    surface = base * hauteur
    print surface
    ce code affichera 15 dans la sandbox. Là aussi attention aux minuscules.
    Pour nommer vos variable vous êtes a à peu près libre (à part les mots réservés), mais prenez l'habitude de les commencer par une lettre minuscule pour la lisibilité du code. Je ne veux pas réécrire le chapitre 2.2 du livre de Swinnen. Je vous laisse donc le soin de lire attentivement

    Les conditions(cf p.29 du livre)

    C'est une des bases de la programmation, pouvoir diriger d'un côté ou d'un autre le code en fonction d'un résultat.
    L'instruction principale est le if exemple :
    Code:
    nombre = 2
    resultat = nombre % 2
    if resultat == 0:
      print "c'est un nombre pair"
    else :
      print "c'est un nombre impair"
    Alors deux ou trois petite choses nouvelles :
    • l'instruction if () est suivie de deux points et la ligne suivante est décalée (on peut choisir mais normalement le tab correspond 4 espaces)
      la ligne décalée ne s'effectuera que si la condition entre les parenthèse est vraie
    • dans la parenthèse on met une condition, notez le "==" qu'il ne faut pas confondre avec le signe égal simple


    Si on traduit ce code en français :
    • On a un nombre qui vaut 2
    • On a un résultat qui vaut ce nombre modulo de 2
    • Si résultat est égal à 0 on affiche "c'est un nombre pair"
    • Sinon on affiche "c'est un nombre impair"


    Dans les autres langages on conseille de décaler ce qui suit un if pour rendre le code plus lisible, dans le python on est obligé de le faire mais par contre on ne doit rien mettre d'autre (en COFFEE et C++ il faut mettre des accolades).

    On peut encore insérer entre l'instruction if et else un elif, qui signifie "sinon si" exemple :

    Code:
    a = 0
    if a > 0 :
      print "a est positif"
    elif a < 0 :
      print "a est négatif"
    else:
      print "a est nul"
    Les opérateurs de comparaison(cf p.31 du livre)

    x == y x est égal à y
    x != y x est différent de y
    x > y x est plus grand que y
    x < y x est plus petit que y
    x >= y x est plus grand que, ou égal à y
    x <= y x est plus petit que, ou égal à y

    Les boucles(cf p.35 du livre)

    C'est sans doute le truc le plus indispensable en programmation, qui va nous permettre de répéter une opération autant de fois que l'on veut.

    Un des deux boucles les plus courantes est le while exemple :
    Code:
    nombre = 0
    while nombre<5 :
      print nombre 
      nombre = nombre + 1
    Attention également au deux points après l'instruction while() et au décalage de 4 espaces des deux lignes suivantes.

    Si on traduit :
    • On a un nombre qui vaut 0
    • Tant que ce nombre est plus petit que 5 on effectue ces deux opérations
      • on affiche la valeur de nombre
      • on rajoute à chaque passage 1 à nombre



    Mais attention c'est aussi la boucle la plus dangereuse ! L'instruction while va répéter une portion de code tant qu'une condition ne sera pas respectée, donc si le code ne modifie pas une variable contenue dans la condition elle tournera à l'infini et C4D plantera.... Si par exemple vous oubliez de mettre les 4 espaces au début de la dernière ligne, ce code ne s'effectuera qu'à la fin de la boucle et dans ce cas là jamais parce que votre boucle va tourner à l'infini vu que nombre va rester toujours avec la valeur 0

    On a aussi la boucle for qui est très utile mais je préfère vous l'expliquer plus tard quand on sera au cœur de C4D

    Je m'arrête là pour le moment pour les concepts du python, il y a encore beaucoup de chose à dire mais je sens que vous trépignez d'impatience et que les chiffres ça va un moment et vous aimeriez bien passer à la 3D ...

    ... mais il faudra patienter jusqu'au prochain épisode...

    D'ici là potassez un peu le bouquin, la prochaine fois il y aura interro !
    Dernière modification par oli_d ; 09/06/2011 à 22h37.

  7. #7
    Gourou Avatar de clemz
    Date d'inscription
    février 2009
    C4D version
    R15 Studio
    OS
    windaube x64
    Messages
    2 165

    Re*: Py4D : le language python dans C4D

    Oli_D oh nice ! :prie:

  8. #8
    Gourou Avatar de diego1968
    Date d'inscription
    juillet 2006
    C4D version
    R21 Perpétuelle
    OS
    Mac OS 10.13.6
    Messages
    2 149

    Re*: Py4D : le language python dans C4D

    Clemz :poucehaut: :lol:

    Oli_D je suis :shock: de ton savoir !
    :prie:

    You're the :boss:

  9. #9
    Big Boss Avatar de base80
    Date d'inscription
    février 2003
    C4D version
    R12 Studio
    OS
    Fémur
    Messages
    8 330

    Re*: Py4D : le language python dans C4D

    Waw super j'ai tout compris!

    Les 4 espaces j'aime moins , j'aurais préféré un tab

  10. #10
    Pilier Avatar de oli_d
    Date d'inscription
    avril 2004
    C4D version
    Autre
    OS
    MacOS X
    Messages
    707

    Re*: Py4D : le language python dans C4D

    Citation Envoyé par base80
    Les 4 espaces j'aime moins , j'aurais préféré un tab
    Oui moi aussi surtout qu'il faut les refaire sur chaque ligne, mais si tu prends un autre éditeur comme IDLE ou Notepad ++ là tu peux utiliser le tab et en plus le code est tout beau en couleur ce qui est beaucoup plus lisible

    Mais c'est un peu comme pour le COFFEE, si je fais un tout petit code je reste dans l'éditeur C4D, mais dès qu'il y a plus d'une dizaine de lignes, je préfère passer à Notepad++ puis copier-coller dans C4D.

    En plus il ne faut pas oublier que c'est une version bêta, donc je pense que tout cela va être amélioré

  11. #11

    Re*: Py4D : le language python dans C4D

    le fait que la mise en page du code ait un sens dans le langage est en soi quelque chose de très risqué quand on a de gros codes, et qu'on commence à mélanger des bouts de code entre eux (et je parle d'expérience, j'ai été confronté au problème quand j'ai écrit un exporteur pour blender à partir d'un exporteur déjà existant pour kerkythea). L'utilisation des espaces a un avantage énorme comparé aux tab : quelque soit l'éditeur, ca fera toujours la meme taille. Et n'importe quel bon éditeur te permet d'inserer N espaces quand tu appuies sur la touche tab, plutot qu'un tab. ah, et en general il y a aussi des commandes pour indenter et desindenter un bloc de code, très pratique aussi
    bonne exploration en tout cas !
    Le rendu, c'est juste de l'intégration numérique sur un espââââââce de dimension infinie...trivial quoi

  12. #12
    Pilier Avatar de oli_d
    Date d'inscription
    avril 2004
    C4D version
    Autre
    OS
    MacOS X
    Messages
    707

    Re*: Py4D : le language python dans C4D


    Créer un objet dans C4D


    Bon rentrons dans le vif du sujet, je vais tout de suite commencer par la création d'un objet. Par rapport au Xpresso, un des grands avantages de la programmation, c'est qu'on peut créer et inclure autant d'objet que l'on veut.

    Code:
    import c4d                  #on importe la bibliothèque de C4D...
    
    obj = c4d.BaseObject(c4d.Ocube)          #on crée un objet de type cube
    doc.InsertObject(obj)            #on insère notre objet dans le document (doc est une constande de c4d qui renvoie le document
    c4d.EventAdd()                # et on avertit C4D qu'il y a eu un évènement pour qu'il actualise
    Copiez ce code et collez le dans le script manager. Normalement il devrait y avoir un cube qui apparait chaque fois que vous cliquez sur le bouton Exécuter

    Dans le chapitre précédent, j'ai oublié de vous parler des commentaires . C'est toujours pratique, surtout lorsque l'on débute, de pouvoir inclure des commentaires dans notre code, histoire de se rappeler d'une fois à l'autre ce que l'on a fait. Dans le python il suffit de précéder le commentaire du signe #

    Je vous propose pour l'instant de prendre le code comme il vient, les explications sur les classes viendront par la suite et surtout comment aller chercher des fonctions et classes dans la jungle de l'aide.

    Exercice :

    Pour mettre en pratique cette première partie, vous allez essayer de créer une boucle qui crée automatiquement 10 cubes. Réutilisez les fonctions du code en début de post.

    Corrigé:
    Code:
    import c4d
    nbre = 0
    
    while nbre<10: #boucle jusqu'à 10
      obj = c4d.BaseObject(c4d.Ocube) #on crée un objet de type cube
      doc.InsertObject(obj) #on insère notre objet dans le doc
      nbre = nbre+1 #ne pas oublier sinon la boucle tourne à l'infini
    
    c4d.EventAdd() #sans les 4 espaces comme cela il ne le fait qu'une fois à la sortie de la boucle->plus rapide
    Dernière modification par oli_d ; 09/06/2011 à 22h49.

  13. #13
    FC4D Puppet Avatar de BerTiN03
    Date d'inscription
    août 2006
    C4D version
    R13 Studio
    OS
    Windows 8
    Messages
    4 326

    Re*: Py4D : le language python dans C4D

    Ca ressemble beaucoup à du basic !

    En tout cas, ça à l'air super simple !

    Merci encore Oli_D
    Qui fait le malin, tombe dans le ravin...

  14. #14
    Pilier Avatar de lolofedo
    Date d'inscription
    mars 2006
    C4D version
    Cinema 4D R11.5
    OS
    Seven 64bits
    Messages
    1 279
    Billets dans le blog
    1

    Re*: Py4D : le language python dans C4D

    :shock: j'ai tout compris, merci oli :poucehaut:
    Seven 64bits, I7 870 2.93Ghz, Nvidia Geforce GTS 240 1Go, 8 Go DDR3, DD 1To Raid0
    http://laurent.fedorenko.free.fr

  15. #15
    Pilier Avatar de oli_d
    Date d'inscription
    avril 2004
    C4D version
    Autre
    OS
    MacOS X
    Messages
    707

    Re*: Py4D : le language python dans C4D

    EDIT : PAS ENCORE MODIFIE POUR R12
    Modifier un objet dans C4D


    Pour bien comprendre ce qui suit je vous conseille de lire attentivement le chapitre 5.3 du livre (p.50) sur les listes. Pour ceux qui connaissent les tableaux COFFEE ou c++, c'est un peu la même chose mais en beaucoup plus simple et donc beaucoup mieux. Dans une même liste on peut stocker n'importe quel type de valeur et d'objet.

    Chaque objet de c4d contient une liste avec toute ses spécificités, il faut juste connaître la référence de l'attribut pour y accéder. Pour trouver ce nombre de référence il suffit des cliquer-glisser le nom de l'attribut dans le champ en bas de la sandbox :


    Dans cette exemple j'ai drag&droper Taille pour un objet cube, cela me donne [1100]



    Dans celui-ci je n'ai pris que la valeur x de la taille cela me donne [1100,1000]

    Utilisation dans le code :
    Code:
    import c4d                   #on importe la bibliothèque de C4D...
    from c4d import *               # ...de cette bibliothèque on importe tous les modules
    
    obj = c4d.BaseObject(Ocube)          #on crée un objet de type cube
    obj[1100,1000] = 500              #on modifie la taille en X
    doc = c4d.documents.get_active_document()   #on récupère le document actif
    doc.insert_object(obj)             #dans lequel on insère notre objet
    c4d.event_add()                # et on avertit C4D qu'il y a eu un évènement pour qu'il actualise
    On a juste à rajouter le ce fameux nombre de référence entre crochet après la variable de l'objet. Simple, non ?
    Le seul bémol c'est que si vous laissez le numéro sans commentaire à côté, bonjour pour savoir deux semaines après à quoi ça correspond. Donc insérez un commentaire ! (je pense que dans les versions futures de Py4d on pourra rentrer un chaine de caractère plus explicite à la place du nombre, comme en COFFEE. A moins que cela ne soit déjà possible mais j'ai pas trouvé !)

    Prenons l'exemple de la taille complète [1100]. En fait ce 1100 contient trois valeurs, dans c4D c'est un Vecteur (Vector())
    Code:
    import c4d                   #on importe la bibliothèque de C4D...
    from c4d import *               # ...de cette bibliothèque on importe tous les modules
    
    obj = c4d.BaseObject(Ocube)          #on crée un objet de type cube
    obj[1100] = c4d.Vector(100,50,500)       #on modifie la taille en X,Y,Z
    doc = c4d.documents.get_active_document()   #on récupère le document actif
    doc.insert_object(obj)             #dans lequel on insère notre objet
    c4d.event_add()                # et on avertit C4D qu'il y a eu un évènement pour qu'il actualise
    Allez on rajoute un biseau de 5 subdivisé à 3
    Code:
    import c4d                   #on importe la bibliothèque de C4D...
    from c4d import *               # ...de cette bibliothèque on importe tous les modules
    
    obj = c4d.BaseObject(Ocube)          #on crée un objet de type cube
    obj[1100] = c4d.Vector(100,50,500)       #on modifie la taille en X,Y,Z
    obj[1107] = True                #biseau : case à cocher activée (on peut mettre 1 à la place deTrue)
    obj[1105] = 5                 #rayon du biseau
    obj[1105] = 3                 #subdivision du biseau
    
    doc = c4d.documents.get_active_document()   #on récupère le document actif
    doc.insert_object(obj)             #dans lequel on insère notre objet
    c4d.event_add()                # et on avertit C4D qu'il y a eu un évènement pour qu'il actualise
    Vous pouvez ainsi changer tout ce qu'il y a dans la palette attributs, testez !

    Bon maintenant que vous savez créer des cubes et les modifier, vous êtes mûrs pour me faire un petit générateur d'escaliers. Allez au boulot tas de feignants !

    Corrigé :
    Code:
    import c4d       
    from c4d import *               
    
    nb_marches = 10
    larg = 200
    haut = 15
    prof = 35
    pos = c4d.Vector(0,0,0)
    nb = 0
    doc = c4d.documents.get_active_document()   #on récupère le document actif
    
    while(nb<nb_marches):              #boucle ne pas oublier les deux points
      obj = c4d.BaseObject(Ocube)        #on crée un objet de type cube
      obj[1100] = c4d.Vector(larg,haut,prof)   #on règle la taille du cube
      obj[903] = pos               #on règle la position
      doc.insert_object(obj)           #on insère notre objet dans le doc
      pos = pos + c4d.Vector(0,haut,prof)    #on modifie la position pour la suivante...
                            #...en rajoutant chaque fois la hauteur et la profondeur
      nb=nb+1                  #on incrémente, sinon la boucle est infinie
    
    c4d.event_add()                # et on avertit C4D qu'il y a eu un évènement pour qu'il actualise
    Dernière modification par oli_d ; 09/06/2011 à 22h50.

  16. #16
    Pilier Avatar de oli_d
    Date d'inscription
    avril 2004
    C4D version
    Autre
    OS
    MacOS X
    Messages
    707

    Re*: Py4D : le language python dans C4D


    Créer un générateur d'objet


    Py4D permet de créer très facilement un générateur d'objet (ce que l'on a pas en en COFFEE).
    Puisque c'est si simple on va se faire notre générateur d'escaliers avec données utilisateurs et tout le tsoin-tsoin.

    Pour commencer sélectionnez Python Generator dans le menu Py4D. Un nouvel objet apparait dans le gestionnaire. Double cliquez sur l'icône de l'objet, et là vous devriez avoir un fenêtre avec du code qui s'ouvre : le Py4D::Editor.

    Vous devriez avoir le code suivant :
    Code:
    import c4d
    #Welcome to the world of Py4D
    
    def main():
      return c4d.BaseObject(c4d.Ocube)
    La première ligne on connaît c'est pour importer la bibliothèque c4d. Le welcome ça aussi on connaît.

    Par contre de def main(): ???
    Alors je vous invite à aller lire attentivement le chapitre 7 du bouquin (p. 62) sur les fonctions. Parceque là on à affaire à une fonction qui va renvoyer un truc à la fin grâce à l'instruction return. Notez bien que la fonction main() est suivie de deux points et que la suite est décalé de quatre espaces (là je sens que Base va pas être content):mrgreen:
    Et ce truc que cette fonction main() (principale) renvoie, vous le connaissez c'est un objet cube, qu'on a déjà utilisé.
    Faite les test appuyer sur la touche "C" dans C4D pour rendre l'objet éditable. Vous verrez que l'objet se transforme en cube, donc le code se confirme !

    Mais vous allez me dire que c'est nul mon truc parce que l'on peut renvoyer qu'un seul objet et nous on a plein de marches. Ben y a cas feinter, on va lui renvoyer un neutre avec toutes nos marches en enfant, et youplazou !

    Pour que notre générateur soit efficace on va pas aller chaque fois dans le code pour changer la largeur, le nombre de marche et cie. On va créer des données utilisateurs, ça vous devriez savoir faire :


    Maintenant le problème, c'est pour récupérer tout ça dans notre générateur. Je pense qu'il y a des petits malins qui ont déjà essayé de drag&droper dans la sandbox pour obtenir un no de référence. Bon réflexe, mais je le mets où ce numéro qui en plus n'en est pas un : Python Generator[ID_USERDATA, 1]. Aaah, on fait moins les malins,là !

    Je vous donne un tuyau, l'objet sur lequel on est s'appelle toujours "op". Que ce soit dans un tag Py4D ou dans un générateur (pour le tag se sera vraiment l'objet tag, pas l'objet sur lequel il y a le tag).

    Avant de faire tout l'escalier on va tester ça sur un cube. Il faut que l'on modifie un peu le code d'origine pour que cela fonctionne (n'oubliez pas de cliquer sur le bouton commit en haut pour enregistrer les changements):
    Code:
    import c4d
    #Welcome to the world of Py4D
    
    def main():
      obj = c4d.BaseObject(c4d.Ocube) #on crée notre objet
      larg = op[ID_USERDATA, 2]    #identifiant trouvé par drag &drop
      obj[1100,1000]= larg      #on donne larg à la taille X
    
      return obj           #et on retourne l'objet
    et là ça marche po :coup: :


    et c'est dans ces moments là, que je la hais cette sandbox, n'essayez pas de lui taper dessus c'est votre super écran 32 pouces qui va ramasser.

    Analysons, elle nous dit que ce ID_USERDATA à la ligne 6 n'est pas défini...

    En fait, vous avez vu au début il y a bien import c4d, mais dans mes codes précédents j'avais rajouté ensuite "from c4d import * ". En fait je vous avais raconté n'importe quoi, ce truc ça importe pas tout les modules, ça évite simplement de marquer c4d. devant chaque fonction ou instruction de la bibliothèque. Du coup si vous le rajoutez ça devrait aller mieux (faites également attention aux quatre espaces après main(): !):

    Code:
    import c4d
    from c4d import *
    #Welcome to the world of Py4D
    
    def main():
      obj = c4d.BaseObject(Ocube) #on crée notre objet
      larg = op[ID_USERDATA, 2]    #identifiant trouvé par drag &drop
      obj[1100,1000]= larg      #on donne larg à la taille X
    
      return obj           #et on retourne l'objet
    ou si vous ne voulez pas le rajouter vous pouvez rajouter c4d. devant ID_USERDATA et aussi devant Ocube

    Code:
    import c4d
    #Welcome to the world of Py4D
    
    def main():
      obj = c4d.BaseObject(c4d.Ocube) #on crée notre objet
      larg = op[c4d.ID_USERDATA, 2]    #identifiant trouvé par drag &drop
      obj[1100,1000]= larg      #on donne larg à la taille X
    
      return obj           #et on retourne l'objet
    Et bien maintenant on a presque tout pour créer nos escaliers paramétriques. Vous avez noté que contrairement à avant on a plus besoin d'insérer l'objet dans le document, c'est directement le générateur qui le fait dès qu'on lui retourne.

    On va créé un objet neutre dans lequel on va mettre toutes nos marches en enfant. Pour le neutre on va remplacer Ocube par Onull, et pour insérer l'objet on va utiliser la méthode enfant.insert_under(parent)
    Code:
    import c4d
    from c4d import * 
    
    def main():                   # fonction principale ne pas oublier de décaler de 4 espaces après
      nb_marches = op[c4d.ID_USERDATA, 1]     #on récupère les DU dans des variables
      larg = op[ID_USERDATA, 2]
      haut = op[ID_USERDATA, 3]
      prof = op[ID_USERDATA, 4]
      pos = c4d.Vector(0,0,0)            #on initialise la position à 0
      nb = 0
      neutre = c4d.BaseObject(Onull)        #on crée un objet neutre
    
      while(nb<nb_marches):             #boucle ne pas oublier les deux points
        marche = c4d.BaseObject(Ocube)      #on crée un objet de type cube
        marche[1100] = c4d.Vector(larg,haut,prof) #on règle la taille du cube
        marche[903] = pos             #on règle la position
        marche.insert_under(neutre)        #on insère notre objet en enfant de neutre
        pos = pos + c4d.Vector(0,haut,prof)    #on modifie la position pour la marche suivante...
    	                        #...en rajoutant chaque fois la hauteur et la profondeur
        nb=nb+1                  #on incrémente, sinon la boucle est infinie	
    
      return neutre                 #on retourne notre objet neutre au générateur
    Dans ce cas là vous noterez que sous le while il faut doubler l'indentation, donc il faut 8 espaces, préparez la pommade contre les ampoules à l'index !

    N'oubliez pas également de régler vos DU pour qu'elles ne soient pas à 0, sinon ce sera tout de suite moins spectaculaire.

    A part ça, elle est pas belle là vie, vous vous êtes fabriqué le générateur d'escaliers paramétrique de vos rêves en trois coups de cuillère à pot !

    Allez un p'tit exercice, c'est pas le moment de fléchir, et si vous me faisiez un générateur de mur en brique (avec les briques en quinconces sinon c'est pas drôle !)

    A bientôt pour de nouvelles aventures !

    [edit] : solution : Générateur de mur en brique (fichier c4d)


  17. #17

    Re*: Py4D : le language python dans C4D

    Dans ce cas là vous noterez que sous le while il faut doubler l'indentation, donc il faut 8 espaces, préparez la pommade contre les ampoules à l'index !
    encore une fois, n'importe quel éditeur fait pour la prog te permet de configurer ta touche tab pour qu'elle insère 4 espaces directement il n'y a pas plus fainéant que les programmeurs, donc t'en fait pas qu'ils ont prévu un max de trucs pour s'éviter des ampoules ^^ ah, pour éditer du python, il existe un IDE spécifique, qui s'appelle "eric" : http://eric-ide.python-projects.org/index.html
    Le rendu, c'est juste de l'intégration numérique sur un espââââââce de dimension infinie...trivial quoi

  18. #18
    Pilier Avatar de grover
    Date d'inscription
    septembre 2003
    C4D version
    R13 Studio
    OS
    Mac OS X 10.9 Mavericks
    Messages
    1 026

    Re*: Py4D : le language python dans C4D

    Bien intéressant, tout ça ! :poucehaut:
    Mets tes lunettes et écoute comme ça sent bon ! klik my links -> Firmament / PolyStudio / Myst Aventure / ufo-3D
    Enregistre

  19. #19
    Pilier Avatar de oli_d
    Date d'inscription
    avril 2004
    C4D version
    Autre
    OS
    MacOS X
    Messages
    707

    Re*: Py4D : le language python dans C4D

    Merci pour les infos tarlack, je vais tester Eric (en tout bien tout honneur :mrgreen. Pour Notepad ++ je viens de trouver l'option de paramétrage du tab dans paramétrage/préférences onglet MISC.

  20. #20
    Gourou Avatar de Jean-Laurent
    Date d'inscription
    mai 2006
    C4D version
    R11.5
    Messages
    3 407

    Re*: Py4D : le language python dans C4D

    Pour l'instant j'ai tout suivi. :poucehaut:
    SMC fan.

  21. #21
    Gourou Avatar de valkaari
    Date d'inscription
    mai 2009
    C4D version
    Autre
    OS
    OSX / windows
    Messages
    2 949

    Re*: Py4D : le language python dans C4D

    Vraiment génial oli-D.

    Plus je regarde python et plus je suis :bounce:

    Par contre la syntaxe :puke:


  22. #22
    Pilier Avatar de oli_d
    Date d'inscription
    avril 2004
    C4D version
    Autre
    OS
    MacOS X
    Messages
    707

    Re*: Py4D : le language python dans C4D

    Merci à tous pour les encouragements :odile:

    Citation Envoyé par valkaari
    Par contre la syntaxe :puke:
    Moi je la trouve géniale, tout est fait pour que ton code soit le plus simple et le plus lisible. Mais c'est vrai que quand on est habitué à d'autres codes, ça semble bizarre.

    Ce que je trouve le plus génial et qui me frustrait au plus haut point entre c++ et COFFEE, c'est que tu peux vraiment tester ton code dans le programme. D'abord quelques lignes dans le script manager, puis tu peux le passer en générateur, en tag ou en menu (script) et puis ensuite si vraiment tu veux aller plus loin tu fais un plugin. Mais là tu peux chaque fois récupérer ton code. Entre COFFEE et c++ on était obligé de tout réécrire.

  23. #23
    Gourou Avatar de Jean-Laurent
    Date d'inscription
    mai 2006
    C4D version
    R11.5
    Messages
    3 407

    Re*: Re*: Py4D : le language python dans C4D

    Citation Envoyé par Oli_D
    Mais là tu peux chaque fois récupérer ton code. Entre COFFEE et c++ on était obligé de tout réécrire.
    C'est surtout vrai en C++. En coffee, si on est dans un tag coffee c'est automatique, et si on réalise un plug il suffit à chaque modification de recharger le plug dans la console coffee de C4D. (Enfin quand tout se passe bien :wink

    J'aime bien aussi cette syntaxe très proche du C++ mais avec les trucs pénibles en moins (typage dynamique etc ...).
    Et si on accède à toutes les fonctions du SDK C++ sans avoir à compiler en permanence. :poucehaut:
    SMC fan.

  24. #24
    Big Boss Avatar de Seb-bbl
    Date d'inscription
    mai 2005
    C4D version
    R13 Studio
    OS
    Mac OSX 10.7
    Messages
    6 507
    Billets dans le blog
    8

    Re*: Py4D : le language python dans C4D

    Jusque-là je suis aussi (enfin, disons que ça va à lire, après, à créer de toutes pièces, c'est encore autre chose). Mais c'est très instructif en tout cas !!!

  25. #25
    Vieux Croûton Avatar de Aurety
    Date d'inscription
    juillet 2002
    C4D version
    R17 Studio
    OS
    Mac
    Messages
    14 477
    Billets dans le blog
    3

    Re*: Py4D : le language python dans C4D

    Ouah ! Excellent, j'ai tout suivi, compris, aimé !! :poucehaut: :love:
    kenavo !! // Pinterest KAMIGAZ®

  26. #26
    Pilier Avatar de Gyom
    Date d'inscription
    août 2002
    C4D version
    R15 Studio
    OS
    OSX / Win7
    Messages
    612

    Re*: Py4D : le language python dans C4D

    rrhaa ??? pas le temps de suivre ...
    je ferai du rattrapage d'ici un mois !
    ... je pourrai quand meme poser des questions betes ?
    a suivre ...

  27. #27
    Pilier Avatar de oli_d
    Date d'inscription
    avril 2004
    C4D version
    Autre
    OS
    MacOS X
    Messages
    707

    Re*: Py4D : le language python dans C4D

    Les questions avec plaisir, et même des propositions de petits plugs comme exercice ...

  28. #28
    Pilier Avatar de Gyom
    Date d'inscription
    août 2002
    C4D version
    R15 Studio
    OS
    OSX / Win7
    Messages
    612

    Re*: Py4D : le language python dans C4D

    :bounce:

    des propositions ?! ... mais tu ne sais pas a qui tu proposes ca !!!
    a suivre ...

  29. #29
    Pilier Avatar de Machaon
    Date d'inscription
    juin 2006
    C4D version
    R9
    OS
    XP
    Messages
    639

    Re*: Py4D : le language python dans C4D

    Maxon vient d'annoncer l'acquisition de Py4D, un interpréteur Python pour Cinema4D qui, promet Maxon, devrait permettre d'ajouter des fonctions personnalisées au logiciel très simplement.
    http://www.maxon.net/en/news/singlev...n-of-py4d.html

  30. #30
    Pilier Avatar de oli_d
    Date d'inscription
    avril 2004
    C4D version
    Autre
    OS
    MacOS X
    Messages
    707

    Re*: Py4D : le language python dans C4D

    Yesssss, :bounce:

    Donc cela veut dire que le python sera probablement intégré dans la r12 et à mon avis
    cela c'est également la mort annoncée du COFFEE, ou en tous cas du développement du COFFEE.

    Cela fait maintenant quelques mois que je teste ce Py4D et je confirme que c'est réellement trop d'la balle ! Ce n'est que la beta, il manque encore quelques fonctions du c++ et il y a quelques bugs, mais depuis que j'y ai touché, impossible de me remettre au c++ et au COFFEE ! (edit : le python est même devenu mon avatar, c'est dire si je suis atteint !)

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