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

Discussion: Besoin d'aide pour un code python

  1. #1
    Dépendant
    Date d'inscription
    octobre 2012
    C4D version
    R19 Prime
    OS
    10 pro
    Messages
    367

    Besoin d'aide pour un code python

    Bonjour, j'ai besoin d'aide pour le langage python dans cinema4d, c'est pour réglé l'axe d'un sens.
    Par exemple je voudrais mettre l'axe Z en dessus et l'axe Y en côté Droite et l'X en vue de face.

    Voici, le lien ;

    https://www.c4dcafe.com/ipb/forums/t...-z-axis-issue/

    Je vous met le code :

    import c4d
    from c4d import documents
    #Welcome to the world of Python

    def GetNextObject(op):
    if op==None: return None

    if op.GetDown(): return op.GetDown()

    while not op.GetNext() and op.GetUp():
    op = op.GetUp()

    return op.GetNext()

    def main():
    #Grab the active document
    doc = c4d.documents.GetActiveDocument()

    # Make sure the Axis Enable tool is enabled
    # This allows us to rotate the axis explicitly instead of the object
    if not(doc.IsAxisEnabled()):
    c4d.CallCommand(c4d.ID_MODELING_AXIS)
    print "Enabling [Enable Axis]"
    else:
    print "[Enable Axis] already enabled"


    myobject = doc.GetFirstObject()
    if myobject==None: return

    while myobject:
    #do something to "myobject here"
    print myobject.GetName()
    myobject.SetAbsRot(c4d.Vector(-180, myobject.GetAbsRot().y, myobject.GetAbsRot().z))
    c4d.EventAdd()

    myobject = GetNextObject(myobject)

    print "Done..."

    # ================================================== =====================
    if __name__ == "__main__":
    main()
    Si vous pouvez m'aider, S'ils vous plaît merci d'avance.

    edit: correction Y côté droite au lieu de gauche.
    Dernière modification par bbenoit ; 15/07/2017 à 13h36.

  2. #2
    Gourou Avatar de César Vonc
    Date d'inscription
    avril 2006
    C4D version
    Autre
    OS
    Windows 10
    Messages
    2 483
    Salut,

    Si j'ai bien compris tu veux pivoter l'axe d'un objet de 180° en Y :

    Code PHP:
    import c4d



    def ChangeAxe
    (objmatmatInv) :
        
        
    pts obj.GetAllPoints()
        
        for 
    ip in enumerate(pts) :
            
    pts[i] = matInv.Mul(p)
            
        
    obj.SetAllPoints(pts)
        
        
    obj.SetMl(obj.GetMl() * mat)
        
        
    obj.Message(c4d.MSG_UPDATE)
        


    def main() :
        
        
    objs doc.GetActiveObjects(c4d.GETACTIVEOBJECTFLAGS_CHILDREN)
        
        if 
    not objs : return
        
        
    mat c4d.utils.MatrixRotY(3.141592653589793)
        
    matInv = ~mat
        
        doc
    .StartUndo()
        
        for 
    obj in objs :
            
            if 
    not obj.CheckType(c4d.Opoint) : continue
            
            
    doc.AddUndo(c4d.UNDOTYPE_CHANGEobj)
            
            
    ChangeAxe(objmatmatInv)
        
        
    doc.EndUndo()
        
    c4d.EventAdd()


    if 
    __name__=='__main__':
        
    main() 
    Sélectionne un ou plusieurs objets puis exécute le script, ça devrait faire l'affaire.
    Dernière modification par César Vonc ; 15/07/2017 à 17h18.

  3. #3
    Dépendant
    Date d'inscription
    octobre 2012
    C4D version
    R19 Prime
    OS
    10 pro
    Messages
    367
    Non, je voudrais avoir l'axe Z en Z-up et le x en forward, et le y coter droite. Le code lui même n'était pas très bon, je parle de mon code pas du votre ^^ Mais pas de 180° Pour que l'objet soit dans le bon axe d'un logiciel sinon, l'objet il part en vrille.
    Dernière modification par bbenoit ; 15/07/2017 à 18h14.

  4. #4
    Gourou Avatar de César Vonc
    Date d'inscription
    avril 2006
    C4D version
    Autre
    OS
    Windows 10
    Messages
    2 483
    Tu peux me faire un dessin avant/après ? Parce que le X côté droite ou en forward, c'est pas très précis pour moi.

  5. #5
    Dépendant
    Date d'inscription
    octobre 2012
    C4D version
    R19 Prime
    OS
    10 pro
    Messages
    367
    Oui, dans ce sens là.

    Cliquez sur l'image pour la voir en taille réelle 

Nom : 		coommeca.jpg 
Affichages :	2 
Taille :		107,8 Ko 
ID : 			20178

    Mais pas dans ce sens (c4d)

    Cliquez sur l'image pour la voir en taille réelle 

Nom : 		Non pas commme ça.jpg 
Affichages :	1 
Taille :		45,2 Ko 
ID : 			20179
    Dernière modification par bbenoit ; 16/07/2017 à 08h56.

  6. #6
    Gourou Avatar de César Vonc
    Date d'inscription
    avril 2006
    C4D version
    Autre
    OS
    Windows 10
    Messages
    2 483
    C'est plus clair en effet !

    Donc c'est une rotation X de 90° suivie d'une rotation Z de 90°.


    Code PHP:
    import c4d
    import math


    def ChangeAxe
    (objmatmatInv) :
        
        
    pts obj.GetAllPoints()
        
        for 
    ip in enumerate(pts) :
            
    pts[i] = matInv.Mul(p)
            
        
    obj.SetAllPoints(pts)
        
        
    obj.SetMl(obj.GetMl() * mat)
        
        
    obj.Message(c4d.MSG_UPDATE)
        




    def main() :
        
        
    objs doc.GetActiveObjects(c4d.GETACTIVEOBJECTFLAGS_CHILDREN)
        
        if 
    not objs : return
        
        
    mat c4d.utils.MatrixRotX(math.pi 2.) * c4d.utils.MatrixRotZ(math.pi 2.)
        
    matInv = ~mat
        
        doc
    .StartUndo()
        
        for 
    obj in objs :
            
            if 
    not obj.CheckType(c4d.Opoint) : continue
            
            
    doc.AddUndo(c4d.UNDOTYPE_CHANGEobj)
            
            
    ChangeAxe(objmatmatInv)
        
        
    doc.EndUndo()
        
    c4d.EventAdd()




    if 
    __name__=='__main__':
        
    main() 

  7. #7
    Dépendant
    Date d'inscription
    octobre 2012
    C4D version
    R19 Prime
    OS
    10 pro
    Messages
    367
    Bon, bas ça ne marche pas dans ce sens, je sais pas quoi faire....

    Cliquez sur l'image pour la voir en taille réelle 

Nom : 		Axe x pas bon2.jpg 
Affichages :	10 
Taille :		164,0 Ko 
ID : 			20181
    Dernière modification par bbenoit ; 16/07/2017 à 11h44.

  8. #8
    Dépendant
    Date d'inscription
    octobre 2012
    C4D version
    R19 Prime
    OS
    10 pro
    Messages
    367
    Petit up; supprimer le post après m'avoir répondu.

  9. #9
    Gourou Avatar de César Vonc
    Date d'inscription
    avril 2006
    C4D version
    Autre
    OS
    Windows 10
    Messages
    2 483
    La ligne ci-dessous indique les rotations à appliquer à l'axe :

    mat = c4d.utils.MatrixRotX(math.pi / 2.) * c4d.utils.MatrixRotZ(math.pi / 2.)


    À partir de ça t'as tout ce qu'il faut pour essayer d'autres combinaisons.


    Pourquoi supprimer le post !?

  10. #10
    Dépendant
    Date d'inscription
    octobre 2012
    C4D version
    R19 Prime
    OS
    10 pro
    Messages
    367
    Je parlais du message #8 mais pas le topique.

    Pour le code, je dois changer quoi ? Pour changer l'axe.

  11. #11
    Dépendant
    Date d'inscription
    octobre 2012
    C4D version
    R19 Prime
    OS
    10 pro
    Messages
    367
    Je chipote peut-être un peu, mais quand je regarde de près l'axe en vue de dessus, je vois qu'elle n'est pas droite du tout.
    Pouvez-vous m'aider comment faire, s'il vous plaît merci, après j'ai encore une question mais qui n'a rien à voir.

    Cliquez sur l'image pour la voir en taille réelle 

Nom : 		5.jpg 
Affichages :	2 
Taille :		91,8 Ko 
ID : 			20184

    C'est très léger.

  12. #12
    Pilier Avatar de gaff
    Date d'inscription
    novembre 2007
    C4D version
    R19 Studio
    OS
    Mac Os 11.1
    Messages
    701
    Tes axes d'origine sont peut être un peu foireux.
    A la place du script, tu peux aussi tout simplement remettre tes axes à 0 :
    Tu sélectionnes ton objet, ensuite, tu passes en mode Axe ( touche L ) et tu remets les coordonnées H,P,B à 0 dans les coordonnées. Ensuite, tu ré-appuies sur la touche L ( tu peux aussi faire la manip en gardant le doigt sur la touche L ). C'est rapide comme manip et tu es certain d'avoir tes axes remis proprement.


    Et puis tu peux aussi te faire un script pour remettre tous les axes à O
    Je comprends vite, mais faut m'expliquer longtemps…

  13. #13
    Pilier Avatar de gr4ph0s
    Date d'inscription
    mai 2013
    C4D version
    R16 Studio
    OS
    win 7 X64
    Messages
    964
    Voila un petit snippet d'un plug que j'ai codé qui permet d'aligné spline/obj/generateur au centre bas et mettre la rotation en fonction du monde qu'il faudrait que je clean et que je poste d'ailleurs... (un super projet qui ma permis de comprendre les matrices... ça fait rêver non? )

    Mais bon je ferais ça une fois les que j'aurais du temps/fini les études ! (enfin sauf si je trouve un taff d'ici la :p)

    Cependant dans ce snippet tu as juste la partie qui permet de définir une rotation et de le set sur un objet
    https://gist.github.com/gr4ph0s/1868...0bad39450df68c

    Enfin bref tu as juste à changer les lignes 60/61/62 avec les valeurs que tu veux, sélectionne ton objet et execute
    Dernière modification par gr4ph0s ; 17/07/2017 à 22h38.
    SDK Specialist
    MAXON Computer GmbH

  14. #14
    Dépendant
    Date d'inscription
    octobre 2012
    C4D version
    R19 Prime
    OS
    10 pro
    Messages
    367
    Salut, d'accord, ça marche merci à vous.


Discussions similaires

  1. Mon premier script Python. J'ai besoin d'aide pour le tester.
    Par ManuEffect dans le forum Xpresso/Programmation
    Réponses: 9
    Dernier message: 25/08/2019, 13h06
  2. Mon premier script Python. J'ai besoin d'aide pour le tester.
    Par ManuEffect dans le forum Nouveaux membres
    Réponses: 2
    Dernier message: 22/01/2016, 20h53
  3. [Problème] Besoin d'aide pour TPE
    Par hugo6425 dans le forum Nouveaux membres
    Réponses: 1
    Dernier message: 01/11/2011, 19h02
  4. Besoin d'aide pour mon WiP - Ma Chambre !
    Par ZeTS dans le forum Nouveaux membres
    Réponses: 4
    Dernier message: 05/12/2007, 17h34
  5. Besoin d'aide pour créer du Feu
    Par Thulé dans le forum PyroCluster
    Réponses: 2
    Dernier message: 02/12/2006, 18h46

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