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

Discussion: Trier des objets

Vue hybride

  1. #1
    Squatteur Avatar de Helium
    Date d'inscription
    novembre 2009
    C4D version
    R13 Broadcast
    OS
    OS X 10.6
    Messages
    188

    Trier des objets

    Salut la compagnie,

    Existe-t-il un moyen de trier automatiquement la hiérarchie des objets dans le gestionnaire en fonction de différents paramètres ?

    Je travaille actuellement avec des grilles de clones mograph assez importantes (aprox. entre 1000 et 10000 clones) avec un seul object source (sphère, cube, parfois spline) dont je fait varier positions et échelles avec différents effecteurs.

    J'aurais besoin de trier ces clones (dans mograph ou après édition du cloner) en fonction de leur taille et / ou volume et / ou surface... voir de leur distance par rapport à un point donné.

    Me retrouver en sortie avec par exemple un groupe d'objet dont le plus volumineux serait en haut de ma hiérarchie, et le moins volumineux en bas. Ou bien avec l'objet le plus proche de ma caméra en haut, et le plus éloigné en bas...

    Une solution potentielle ?

    D'avance merci !
    Dernière modification par Helium ; 29/10/2018 à 16h24.

  2. #2
    Squatteur Avatar de Helium
    Date d'inscription
    novembre 2009
    C4D version
    R13 Broadcast
    OS
    OS X 10.6
    Messages
    188
    J'ai un début de piste qui me fait penser que c'est possible via un script. J'ai trouvé ce morceau de python qui classe les objets du gestionnaire par ordre alphabétique :

    Code:
    # SORT OBJECTS ALPHABETICALLY IN OM
    import c4d
    from c4d import gui
    
    def main():
        obj = doc.GetFirstObject()
        if not obj: return True
        doc.StartUndo()
        olist = []
        while obj:
            olist.append([obj.GetName(),obj])
            obj = obj.GetNext()
        
        olist.sort()
        olist.reverse()
        
        for i,o in enumerate(olist):
            doc.AddUndo(c4d.UNDOTYPE_CHANGE,o[1])
            o[1].Remove()
            doc.InsertObject(o[1],None,None)
    
        c4d.EventAdd()
        doc.EndUndo()
    
    if __name__=='__main__':
        main()
    Je me dit que ça doit être tout à fait transposable à autre chose qu'un ordre alphabétique non ? J'essaie de bricoler l'une ou l'autre ligne, mais je pense que ce n'est pas aussi simple que ça, et de toute évidence je n'ai pas les connaissances requises...

    Discussion à déplacer en section programmation peut être ducoup ?

    Merci
    Dernière modification par Helium ; 31/10/2018 à 10h04.

  3. #3
    Squatteur Niveau 2 Avatar de joecare
    Date d'inscription
    février 2013
    C4D version
    R14 Studio
    OS
    Win 7 64bits
    Messages
    1 229
    Interessant comme sujet...

    Question bête:
    tu n'as pas peur que ça flingue les priorités en cas d'animation.... ??

  4. #4
    Squatteur Avatar de Helium
    Date d'inscription
    novembre 2009
    C4D version
    R13 Broadcast
    OS
    OS X 10.6
    Messages
    188
    Je n'y ai pas pensé, mais c'est pour du statique, pas d'animation en vue. La finalité de tout ça est de récupérer un grand nombre de formes sur illustrator.

    Pour info j'ai essayé de faire ça coté illustrator, j'ai trouvé un script qui ordonne des tracés en fonction de leur surface, mais au dessus d'une centaine d'objets il est dépassé...

  5. #5
    Pilier Avatar de Floc
    Date d'inscription
    novembre 2012
    C4D version
    R15 Studio
    OS
    WindOSX
    Messages
    1 617
    Voici une version modifié de ton code qui classe par "taille".
    Taille est entre guillemet car c'est juste une moyenne des valeurs de la boundingBox.
    Attention que ce script reordonne tout les objets de l'OM.
    il faudrait mettre une gestion de la hierarchie ou au moins une restriction à la selection

    Code PHP:
    # SORT OBJECTS ALPHABETICALLY IN OM
    import c4d
    from c4d import gui

    def main
    ():
        
    obj doc.GetFirstObject()
        if 
    not obj: return True
        doc
    .StartUndo()
        
    olist = []
        while 
    obj:
            
    bb obj.GetRad()
            
    vol int( (bb.bb.bb.z) / 3.0)
            print 
    vol
            olist
    .append([vol,obj])
            
    obj obj.GetNext()
        
        
    olist.sort()
        
    olist.reverse()
        
        
        for 
    i,o in enumerate(olist):
            
    doc.AddUndo(c4d.UNDOTYPE_CHANGE,o[1])
            
    o[1].Remove()
            
    doc.InsertObject(o[1],None,None)

        
    c4d.EventAdd()
        
    doc.EndUndo()

    if 
    __name__=='__main__':
        
    main() 
    Dernière modification par Floc ; 31/10/2018 à 19h28.

  6. #6
    Squatteur Avatar de Helium
    Date d'inscription
    novembre 2009
    C4D version
    R13 Broadcast
    OS
    OS X 10.6
    Messages
    188
    Excellent merci beaucoup Floc !

    Je tricotait au bon endroit mais je suis complètement largué en terme de syntaxe.

    Effectivement à optimiser peut être en mettant une restriction, mais là tout de suite ça fait le taf pour ce que je dois faire. Et de là je devrai arriver avec cette base à adapter à d'autres paramètres.

    Je posterai ça, si j'y arrive !

    Merci encore

Discussions similaires

  1. [Problème] help Clothilde , objets qui traversent d'autres objets
    Par alex88500 dans le forum Nouveaux membres
    Réponses: 5
    Dernier message: 19/10/2015, 23h50
  2. Objets plats, or not
    Par zeclubbeur dans le forum Nouveaux membres
    Réponses: 10
    Dernier message: 08/08/2009, 13h14
  3. • Objets par-ci par-là
    Par plarot_1 dans le forum Travaux en cours
    Réponses: 15
    Dernier message: 11/08/2007, 16h12
  4. Modification de 2 objets
    Par sinclairzxfr dans le forum Modélisation
    Réponses: 2
    Dernier message: 26/01/2007, 15h57

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