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
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 name, obj in zip (listeDeNom, objs):
doc.AddUndo(c4d.UNDOTYPE_CHANGE_SMALL, obj)
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 à 08h55.
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...
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 ?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()
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
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 à 20h36.
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
ou alors tu fermes le undo et tu l'appel pour annuler tout ce que tu as fais. (c'est au choix)Code PHP:
if obj is None:
continue
Salut Valkaari,
Je prends note !
Merci