Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

3D Python Discussion :

Python Maya scripting


Sujet :

3D Python

  1. #1
    Nouveau Candidat au Club
    Python Maya scripting
    Bonjour,

    je suis entrain d'essayer d'écrire un code pour montrer une animation de la tour d'hanoi sous Maya.

    J'aimerais savoir s'il est possible de 'connecter' deux objets ensemble de manière a ce que je puisse dire a mes disques "bougez jusqu'à la tour 1" par exemple.

    voilà mon code :

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    import maya.cmds as cmds # import the python lybrary
     
    numTower = 3
    for i in range(3): 
     
     tower = cmds.polyCylinder( name = 'tower' + str(i), radius = 5, height = 100 )     # create 3 cylinder
     cmds.move(0, 50, i*80, ('tower' + str(i))) # move  all cylinders space by 50
     
     
    rad = 70
    for i in range(4) :
        disc = cmds.polyCylinder( name = 'disc' + str(i), radius = rad, height = 10) # create 4 discs
        cmds.move(0, 12*i, 160, ('disc' + str(i))) # move them to tower 1
        rad = rad*0.5


    donc pour l'instant je me suis contenté de bouger les disques à l'endroit où se trouvait la tour...j'aimerais leur dire directement d'aller sur cette tour.

    mon autre problème est que je ne sais pas vraiment comment faire l'animation. est ce que je dois faire l'animation d'un seul disque et après ecrire une ligne de code pour dire aux autre de faire pareil en incluant ma solution a la recursivité?

    bref, je suis un peu perdu :/

    merci de votre aide

  2. #2
    Nouveau Candidat au Club
    personne ne peut m'aider ? :/

  3. #3
    Expert confirmé
    Je ne connais pas maya, mais dans ce que tu dis, il y a quelquechose de logique et si tu connais un peu maya, tu dois trouver.

    donc pour l'instant je me suis contenté de bouger les disques à l'endroit où se trouvait la tour...j'aimerais leur dire directement d'aller sur cette tour.
    Si tu veux aller jusqu'à cette tour, il faut simplement détecter la position de cette tour.

    Une méthode doit s'y trouver, il suffirait de regarder les méthodes existantes avec un simple print dir(tower)

    mon autre problème est que je ne sais pas vraiment comment faire l'animation. est ce que je dois faire l'animation d'un seul disque et après ecrire une ligne de code pour dire aux autre de faire pareil en incluant ma solution a la recursivité?
    J'ai pas tout compris, mais la récursivité en python, c'est pas sa tasse de thé.

    Si tu commences à avoir beaucoup d'objets identiques, je te conseille de créer des classes qui sont comme des plans d'objets.

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    class Tour(cmds.polyCylinder):
        def __init__(self, name, radius, height):
            cmds.polyCylinder.__init__(self, name, radius, height)
            self.name, self.radius, self.height = name, radius, height
    #   def move(self, ...):
    #       self.cyl.move(...)
    #   ...
     
    def construire(name, rad, height):
        return Tour(name, rad, height)
     
    mes_tours = [construire("tower"+str(i), 5, 100) for i in range(3)]
    mes_disc = []
    rad = 70
    for i in range(4):
        mes_disc.append(construire("disc"+str(i), rad, 10))
        rad *= 0.5
     
    print ','.join([objet.name for objet in mes_tours]) # Affichage des noms des tours existantes.
     
    #...


    Non testé, mais les classes te permettraient d'être plus organisé

    N'ayant pas de version de données, je considère que c'est python 2.x
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

  4. #4
    Candidat au Club
    Animation
    Salut
    pour ton animation tu peux utiliser les commandes:

    cmds.select( 'nom de ton objet qui se déplace' )//pour selectionner
    cmds.move(...)
    cmds.setKeyframe(time= 1)//pour placer des keyframe dans ta time slice

    tu peux aussi faire un select all avant de placer ta keyframe.

    En espérant que sa t'aidera.

###raw>template_hook.ano_emploi###