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

Discussion: Premiers pas sur Python

  1. #1
    Timide Avatar de Anay_ah
    Date d'inscription
    janvier 2015
    C4D version
    R14 Studio
    OS
    Windows 7
    Messages
    37

    Premiers pas sur Python

    Bonjour à tous,

    Ayant un peu de temps à perdre pendant les vacances je me suis dis que j'aillais essayer de glander utile...
    Hier soir je découvrais ce qu'étais python et aujourd'hui l'envie m'a pris d'essayer de coder un petit plugin histoire de m’entraîner.
    Un plug dans ce genre que je trouve très pratique sur 3DS mais que je n'ai pas retrouvé sur C4d.



    Il y a bien le tag constraint > clamp qui s'en rapproche mais je le trouve un peu contraignant quand il s'agit de modé.

    Du coup j'ai attaqué par ce code ce matin, mais il permettais seulement de superposer les axes, du coup sa marchait mais je ne trouvais pas ça assez libre.

    Code:
    activeDoc = documents.GetActiveDocument()def main():
        
        objetBase = activeDoc.GetActiveObject()#sur quoi cliquer
        
        bouton = op[c4d.ID_USERDATA,2] #on off //bool
        print bouton
        
        
        if bouton == 1:
        
            target = op[c4d.ID_USERDATA,3] #l'objet de reference //link
    
    
            rotation = target.GetRelRot() #rotation du fix
            position = target.GetRelPos() #position du fix
            
    
    
            importation = objetBase.GetMg() #l'objet qui bouge
            globalPos = importation.off
            globalRot = importation.off
            print('pos objet'), globalPos
            print('rot objet'), globalRot
            
            objetBase.SetRelRot(rotation)
            objetBase.SetRelPos(position)
    Et en continuant de trainer cet aprem je suis tombé sur le GeRayCollider, j'ai essayé avec mais la rien ne se passe, et vu
    que je ne m'y connais pas encore assez pour savoir si c'est mon code, ou ma façon d'approcher ça qui déconne je prèfere vous demander conseil

    Code:
    from c4d import gui
    from c4d import documents
    from c4d.utils import GeRayCollider
    
    
    #Welcome to the world of Python
    
    
    activeDoc = documents.GetActiveDocument()
    
    def main():
        
        objetBase = activeDoc.GetActiveObject()#sur quoi cliquer
        
        bouton = op[c4d.ID_USERDATA,2] #on off //bool
        print bouton
        
        
        if bouton == 1:
        
            target = op[c4d.ID_USERDATA,3] #l'objet de reference //link
            
            
            importation = objetBase.GetMg() #l'objet qui bouge
            globalPos = importation.off
            
            importation = target.GetMg()
            globalPosition = importation.off
            
            
            rc = GeRayCollider() #creer le collider
            rc.Init(objetBase)
    
    
            rc.Intersect(globalPosition, globalPos,True)
            pos = rc.GetNearestIntersection()
            
            print pos
            
            tracer = objetBase.SetAbsPos(globalPosition)
            print tracerimp = target.GetMg()
            globalPos = imp.off
            print globalPos
    
    
            
             
            objetBase.SetRelPos(globalPos)
    Voila voila j'espère que tout est clair
    Merci d'avance

    Nous avons l'art afin de ne pas mourir de la verité

  2. #2
    Pilier Avatar de oli_d
    Date d'inscription
    avril 2004
    C4D version
    Autre
    OS
    MacOS X
    Messages
    707
    Je n'ai pas trop le temps de regarder ton code dans les détail, mais fais attention avec GeRayCollider il faut un objet de type polygonal. Et sinon regarde je viens de mettre un script en python en ligne dans ce post qui utilise cette fonction

  3. #3
    Pilier Avatar de gr4ph0s
    Date d'inscription
    mai 2013
    C4D version
    R16 Studio
    OS
    win 7 X64
    Messages
    964
    Haha bon me voila revenu de mon taff, t'as bien progressé depuis ce midi :p

    Voila un bout de code qui fonctionne mais pas tout le temps et bug un peu ^^'
    Sinon pourquoi ne pas utiliser le snaping?

    Code PHP:
    def main():
       
    sourceobj doc.SearchObject("Cube.1"# L'ojet qu'on veux coller'
       
    targetobj doc.SearchObject("Cube"# L'ojbet de support'
       
    ray GeRayCollider()    ray.Init(targetobjTrue)
       
    start sourceobj.GetAbsPos()        #On recup la position de base
     
       
    distance 100 #100 = tout marche

        
    ray.Intersect(startc4d.Vector(-1, -1, -1),distance#on projette les rayon
        
    intersection ray.GetNearestIntersection()#On recup l'intersection la plus proche
        
    ray.Intersect(startc4d.Vector(111),distance#on projette les rayon
        
    intersection2 ray.GetNearestIntersection()

        if 
    intersection != None#Si il y a une intersection
            
    sourceobj.SetRelPos(intersection["hitpos"])#On modifie la position de l'objet 
        
    elif intersection2 != None#Si il y a une intersection
            
    sourceobj.SetRelPos(intersection2["hitpos"])#On modifie la position de l'objet 

    main() 
    Tu as juste mettre un propriété scripting python sur un objet et a changer sourceObj et targetobj par ce que tu veux si tu préfère rajouter des User data tu peux le faire !

    Cependant t'es relou parce que ce midi j'avais pas tout capté mais en gros sa devais être(et sa sera) mon prochain plugin car même si le snapping marche c'est vrai que pouvoir déposer rien qu'avec un click c'est le top !
    Dernière modification par gr4ph0s ; 23/07/2015 à 01h06.

  4. #4
    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
    Rhalala, vous me faites plaisir les gars !
    kenavo !! // Pinterest KAMIGAZ®

  5. #5
    Pilier Avatar de gr4ph0s
    Date d'inscription
    mai 2013
    C4D version
    R16 Studio
    OS
    win 7 X64
    Messages
    964
    J'ai update mon code pour que sa fonctionne un peu mieux(je suis sur portable donc possible que y'ai des erreurs d'indentation).
    C'est pas parfait mais sa marche un peu mieux.

    Haha aurety ne sois pas jaloux,un jour toi aussi tu t'y mettras !
    SDK Specialist
    MAXON Computer GmbH

  6. #6
    Gourou Avatar de César Vonc
    Date d'inscription
    avril 2006
    C4D version
    Autre
    OS
    Windows 10
    Messages
    2 483
    distance = 100 #100 = tout marche

    Pas sûr...

    Comme distance max du rayon, il vaut mieux prendre la taille max possible entre les deux points les plus éloignés de l'objet.

    Tu récupères le centre local des objets avec GetMp.

    Tu les convertis en position globales en multipliant respectivement leur matrice globale par leur centre local avec Mul.



    Tu calcules la distance entre les deux.


    Tu récupères leur taille max possible avec GetRad, tu calcules le plus grand rayon, soit la diagonale du cube avec GetLength. Pour les deux objets


    T'ajoutes ces valeurs à la distance précédemment calculée et tu devrais avoir la distance max possible entre deux points.




    Bon, à vrai dire je pige pas trop le code, pourquoi il y a deux intersections et pourquoi en direction il y a vector(1,1,1) et -1 ?

    Et comme dit Oli_d, faut vérifier que l'objet soit polygonal, avec objet.CheckType(c4d.Opolygon) avant d'initialiser le rayon.
    Dernière modification par César Vonc ; 23/07/2015 à 11h48.

  7. #7
    Pilier Avatar de gr4ph0s
    Date d'inscription
    mai 2013
    C4D version
    R16 Studio
    OS
    win 7 X64
    Messages
    964
    A vrai dire jai fait deux raton car avec un seul tu verras quil ce snap que d'un seul côté de l'objet. Ce qui est normal que vu que je deplace l'objet sur la premiere intersection. Du coup en rajoutant deux lancé de rayon j'arrive a un truc plus ou moins correct.(essaye sur une sphere avec 1rayon tu comprendra direct)

    Humhum dac pour la distance javais lu sur un forum 100= working all the time. Mais cest vrai quen regardant sr le sdk tu as raison
    SDK Specialist
    MAXON Computer GmbH

Discussions similaires

  1. Mes premiers pas.
    Par Jissey dans le forum Nouveaux membres
    Réponses: 7
    Dernier message: 10/07/2011, 00h45
  2. WIP - Mes premiers pas en 3D
    Par poinball dans le forum Travaux en cours
    Réponses: 3
    Dernier message: 01/12/2010, 08h25
  3. Mes premiers pas
    Par bidouille dans le forum Nouveaux membres
    Réponses: 8
    Dernier message: 12/04/2010, 03h48
  4. premiers travaux
    Par TastyBurger dans le forum Nouveaux membres
    Réponses: 10
    Dernier message: 30/11/2006, 04h23
  5. ces premiers pas
    Par gizmo dans le forum Animation
    Réponses: 15
    Dernier message: 29/05/2004, 23h32

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