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

Discussion: Renommer des objets

  1. #1
    Dépendant
    Date d'inscription
    décembre 2005
    Messages
    303

    Renommer des objets

    Bonjour,

    Je voudrais créer un script pour renommer des objets mais je ne sais pas du tout comment faire...
    Par exemple j'ai 10 objets qui ont des noms trés différents mais toujours les mêmes et j'aimerais créer un bouton qui me permttrait d'automatiquement renommer par exemple "0bjet-14578" par "objet-01", un autre objet "objet-743685" par "objet-ce-que-je-veux" est ce possible en Python ?

    Est-ce que quelqu'un pourrait m'aiguiller ?

    Merci

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

    récupérer les objets sélectionné (et l'ordre)
    Changer le nom d'un objet
    EventAdd()

    la fonction zip est une fonction python. (parcours deux tableaux et renvoie un tuple des elements de chaque tableau)

    Code PHP:
    import c4d


    # Main function
    def main():
        
    listeDeNom = ["objet 1""on object 2""mon object 4 ben non c'est le 3"]
        
    objs doc.GetActiveObjects(c4d.GETACTIVEOBJECTFLAGS_SELECTIONORDER)
        
        
    doc.StartUndo()
        for 
    nameobj in zip (listeDeNomobjs):
            
    doc.AddUndo(c4d.UNDOTYPE_CHANGE_SMALLobj)
            
    obj.SetName(name)
        
    # ne pas oublier de fermer le undo
        
    doc.EndUndo()
        
    # Adds a global event to Cinema 4D's event queue
        
    c4d.EventAdd()


    # Execute main()
    if __name__=='__main__':
        
    main() 
    Dernière modification par valkaari ; 07/05/2020 à 09h55.

  3. #3
    Dépendant
    Date d'inscription
    décembre 2005
    Messages
    303

    Smile

    Salut Valkaari,

    Merci pour ta réponse !
    J'ai essayer de modifier le code pour changer les noms mais je n'arrive pas à comprendre ou je dois placer les nouveaux noms ?

    J'ai essayé ceci mais çe ne fonctionne pas...

    Code:
    # Main function
    import c4d
    
    def main():
        listeDeNom = ["mixamorig:Hips", "mixamorig:Spine", "mixamorig:Spine1"]
        objs = doc.GetActiveObjects(c4d.GETACTIVEOBJECTFLAGS_SELECTIONORDER)
        
        doc.StartUndo()
        for name, obj in zip (listeDeNom, objs):
            doc.AddUndo(c4d.UNDOTYPE_CHANGE_SMALL, obj)
            obj.SetName("hanches", "colonne vertébrale bas", "colonne vertébrale milieux" )
        # ne pas oublié de fermer le undo
        doc.EndUndo()
        # Adds a global event to Cinema 4D's event queue
        c4d.EventAdd()
    
    
    # Execute main()
    if __name__=='__main__':
        main()
    Si je comprends bien, dans la variable "listedenom" je dois ajouter tous les noms que je souhaites modifier mais est-ce que je dois respecter un ordre ?
    Les noms des éléments que je souhaites modifier sont des articulations, il y a donc plusieurs niveaux dans la hiérarchie, est-ce un problème ?

    Pour expliquer plus clairement ce que je chercha à faire :

    Je récupère un personnage depuis Mixamo (les articulations sont nommés d'un certaine manière : mixamorig:Hips, mixamorig:Spine, mixamorig:Spine1...)
    Les noms seront toujours les même, du coup je voudrais créer un script dans lequel je nomme tous les bones Mixamo et je change leurs nom.
    Par exemple, l'articulation qui se nomme "mixamorig:Hips", je la renomme "hanches" et je fais comme ça pour toutes les autres articulations.

    Comme ça à chaque fois que je récupère un personnage et ses articulations, je clique sur un bouton et HOP la magie opère et je m'y retrouve plus facilement pour faire bouger mon personnage.

    Un grand merci d'avance

  4. #4
    Dépendant
    Date d'inscription
    décembre 2005
    Messages
    303

    Smile

    Bon finalement un pote m'a aidé à préparer ce petit bout de code que je vous partage car je suis certain que ça va aider pas mal de monde !
    Un grand merci à Valkarri pour le piste !

    Code:
    import c4d
    # Script pour changer les noms des articulations de Mixamo avec les noms que l'on veut (attention mon fichier est adapté à un personnage cartoon qui n'a que 4 doigts
    
    # Main function
    def main():
        # nameSearch : noter les noms des articulations Mixamo
        nameSearch = ["mixamorig:Hips", "mixamorig:Spine", "mixamorig:Spine1", "mixamorig:Spine2", "mixamorig:Neck", "mixamorig:Head", "mixamorig:HeadTop_End", "mixamorig:LeftShoulder", "mixamorig:LeftArm", "mixamorig:LeftForeArm", "mixamorig:LeftHand", "mixamorig:LeftHandThumb1", "mixamorig:LeftHandThumb2", "mixamorig:LeftHandThumb3", "mixamorig:LeftHandThumb4", "mixamorig:LeftHandIndex1", "mixamorig:LeftHandIndex2", "mixamorig:LeftHandIndex3", "mixamorig:LeftHandIndex4", "mixamorig:LeftHandMiddle1", "mixamorig:LeftHandMiddle2", "mixamorig:LeftHandMiddle3", "mixamorig:LeftHandMiddle4", "mixamorig:LeftHandRing1", "mixamorig:LeftHandRing2", "mixamorig:LeftHandRing3", "mixamorig:LeftHandRing4", "mixamorig:RightShoulder", "mixamorig:RightArm", "mixamorig:RightForeArm", "mixamorig:RightHand", "mixamorig:RightHandThumb1", "mixamorig:RightHandThumb2", "mixamorig:RightHandThumb3", "mixamorig:RightHandThumb4", "mixamorig:RightHandIndex1", "mixamorig:RightHandIndex2", "mixamorig:RightHandIndex3", "mixamorig:RightHandIndex4", "mixamorig:RightHandMiddle1", "mixamorig:RightHandMiddle2", "mixamorig:RightHandMiddle3", "mixamorig:RightHandMiddle4", "mixamorig:RightHandRing1", "mixamorig:RightHandRing2", "mixamorig:RightHandRing3", "mixamorig:RightHandRing4", "mixamorig:LeftUpLeg", "mixamorig:LeftLeg", "mixamorig:LeftFoot", "mixamorig:LeftToeBase", "mixamorig:LeftToe_End", "mixamorig:RightUpLeg", "mixamorig:RightLeg", "mixamorig:RightFoot", "mixamorig:RightToeBase", "mixamorig:RightToe_End"]
    
        # nameReplace : noter les nouveau noms à remlacer, garder le même ordre qu'au dessus
        nameReplace = ["Hanche", "Colonne vertébrale bas", "Colonne vertébrale milieu", "Colonne vertébrale haut", "Cou", "Tête", "Fin de la tête", "Épaule gauche", "Bras gauche", "Avant-bras gauche", "Main gauche", "Pouce gauche 1", "Pouce gauche 2", "Pouce gauche 3", "Pouce gauche 4", "Doigt main gauche A1", "Doigt main gauche A2", "Doigt main gauche A3", "Doigt main gauche A4", "Doigt main gauche B1", "Doigt main gauche B2", "Doigt main gauche B3", "Doigt main gauche B4", "Doigt main gauche C1", "Doigt main gauche C2", "Doigt main gauche C3", "Doigt main gauche C4", "Épaule droite", "Bras droit", "Avant-bras droit", "Main droite", "Pouce droit 1", "Pouce droit 2", "Pouce droit 3", "Pouce droit 4", "Doigt main droite A1", "Doigt main droite A2", "Doigt main droite A3", "Doigt main droite A4", "Doigt main droite B1", "Doigt main droite B2", "Doigt main droite B3", "Doigt main droite B4", "Doigt main droite C1", "Doigt main droite C2", "Doigt main droite C3", "Doigt main droite C4", "Jambe gauche haut", "Jambe gauche Genou", "Pied gauche talon", "Orteils gauche", "Pied gauche fin", "Jambe droite haut", "Jambe droite Genou", "Pied droit talon", "Orteils droit", "Pied droit fin"]
    
        doc.StartUndo()
        for name1, name2 in zip (nameSearch, nameReplace):
            obj = doc.SearchObject(name1)
            
            doc.AddUndo(c4d.UNDOTYPE_CHANGE_SMALL, obj)
            obj.SetName(name2)
        # ne pas oublié de fermer le undo
        doc.EndUndo()
        # Adds a global event to Cinema 4D's event queue
        c4d.EventAdd()
    
    
    # Execute main()
    if __name__=='__main__':
        main()
    Dernière modification par darsanha ; 04/05/2020 à 21h36.

  5. #5
    Gourou Avatar de valkaari
    Date d'inscription
    mai 2009
    C4D version
    Autre
    OS
    OSX / windows
    Messages
    2 949
    cool parfais, désolé j'ai pas eu le temps de te répondre.

    C'est exactement ce que j'avais en tête pour faire simple.

    sinon j'ajouterais juste un petit truc après le doc.SearchObject


    Code PHP:
    if obj is None:
       continue 
    ou alors tu fermes le undo et tu l'appel pour annuler tout ce que tu as fais. (c'est au choix)

  6. #6
    Dépendant
    Date d'inscription
    décembre 2005
    Messages
    303

    Thumbs up

    Salut Valkaari,
    Je prends note !

    Merci

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: 20/10/2015, 00h50
  2. Renommer les TAGs
    Par nic dans le forum Plugins
    Réponses: 0
    Dernier message: 10/02/2015, 13h12
  3. [Question] renommer les textures
    Par matt roussel dans le forum BodyPaint 3D
    Réponses: 6
    Dernier message: 09/01/2013, 18h00
  4. • Objets par-ci par-là
    Par plarot_1 dans le forum Travaux en cours
    Réponses: 15
    Dernier message: 11/08/2007, 17h12
  5. expression pour renommer des objets
    Par tabou dans le forum Xpresso
    Réponses: 13
    Dernier message: 30/07/2002, 21h46

Les tags pour cette discussion

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