[PYTHON] Renommez automatiquement le nœud avec le même nom trouvé en travaillant

Cet article est l'article du 15e jour du Calendrier de l'Avent Maya 2019.

Vous avez vu le [callback using pyside: MEventMessage] de zebraed (https://qiita.com/zebraed/items/5b01b799d5f37a14b6d3) l'autre jour. C'est ça?

On dit qu'OpenMaya peut gérer les mêmes fonctions que scriptJob avec légèreté et simplicité, je vais donc l'utiliser à l'avenir.

Cette fois, j'écrirai en utilisant scriptJob, mais ...


introduction

Les noms de nœuds en double ne provoquent pas d'erreur fatale dans Maya. Toutefois, si vous n'écrivez pas correctement le processus lors de la création du script mel, l'objet spécifié peut ne pas être trouvé et le script peut s'arrêter.

--Il n'y a aucun problème si l'outil fonctionne correctement même s'il existe des noms de nœuds en double, et si vous pouvez enfin nettoyer les données, vous n'avez pas besoin de lire cet article.

Ce serait plus facile si nous pouvions le renommer automatiquement avant que quelque chose ne se produise.

Processus de changement de nom automatique

1. Renommer

  1. Obtenez le nœud de uuid.
  1. Si le nom du nœud contient «|» (ligne verticale), le nom du nœud est dupliqué.
  2. Obtenez le nom du nœud de base avec une expression régulière.
  1. Renommer
    • cmds.rename --Si vous ajoutez un "#" à la fin du nouveau nom, la commande renommer remplacera le dernier "#" par un nombre qui rendra le nouveau nom unique.

Le code résultant ressemble à ceci

python


def rerename(node_uuid):
    for node in cmds.ls(node_uuid):
        if "|" in node:
            basename = re.search("^(.+)?\|(.+?)(\d+)?$", node).group(2)
            rename_name = cmds.rename(node, "{}#".format(basename))

nonSameNameAlliance.py#L5-L9

2. Traitement lors du changement de nom manuel

--Exécute le traitement de changement de nom lorsque NameChanged est exécuté.

def renameEvent():
    for node_uuid in cmds.ls(cmds.ls(sl=True), uuid=True):
        rerename(node_uuid)

nonSameNameAlliance.py#L11-L13

3. Traitement au moment de la duplication

--Lors de la duplication manuelle, la sélection se déplace vers l'objet dupliqué, de sorte que le processus de changement de nom est exécuté lorsque SelectionChanged est exécuté. --Dag = True pour obtenir la hiérarchie, tr = True pour obtenir uniquement le nœud de transformation, convertir en UUID et effectuer le processus de changement de nom.

def duplicateEvent():
    for node_uuid in cmds.ls(cmds.ls(sl=True, dag=True, tr=True), uuid=True):
        rerename(node_uuid)

nonSameNameAlliance.py#L15-L17

S'inscrire au travail de script

def main():
    try:
        if jobIds is not None:
            for jobId in jobIds:
                cmds.scriptJob(kill=jobId, force=True)
    except:pass
        
    jobIds = []
    jobIds.append(cmds.scriptJob(event=["NameChanged", renameEvent], protected=True))
    jobIds.append(cmds.scriptJob(event=["SelectionChanged", duplicateEvent], protected=True))

nonSameNameAlliance.py#L19-L28

Exécuter automatiquement le travail de script au démarrage de Maya

userSetup.py


import nonSameNameAlliance;nonSameNameAlliance.main()

Placez nonSameNameAlliance.py dans le dossier Scripts de Maya et ajoutez le processus de démarrage à userSetup.py. Désormais, lorsque Maya démarre, le processus sera enregistré dans scriptJob et sera automatiquement renommé.

Télécharger

Cliquez ici pour ce code source https://github.com/teionn/nonSameNameAlliance

point important

  1. Le nœud est automatiquement renommé lorsque vous l'utilisez dans la scène, donc je pense que c'est essentiellement pour les modélisateurs.

  2. Il est conçu pour être exécuté uniquement sur le nœud de transformation. --Si vous voulez obtenir l'effet sur tous les nœuds tels que les nœuds de forme intermédiaires, supprimez tr = True.

  3. Ce script ne juge pas le cas. Maya peut conserver des objets sensibles à la casse même dans la même hiérarchie. image.png

Si vous apportez un actif à Unity dans cet état, il semble que s'il y a des objets ʻobject_a et ʻobject_A, vous ne pourrez pas faire référence à l'un ou l'autre des objets.


L'article de demain portera sur rateionn's Supprimez-vous correctement: Plugins inconnus?.

Ça ... j'écris ... je n'ai pas encore écrit d'article ...

Je prévois de publier le script gratuitement à temps, donc je serais heureux si je viens de le télécharger.

Recommended Posts

Renommez automatiquement le nœud avec le même nom trouvé en travaillant
(Remarque) Importation d'Excel avec le même nom de colonne
Chargez le module du même nom dans un autre emplacement
Lorsqu'une variable locale portant le même nom que la variable globale est définie dans la fonction
Précautions lors de la création d'un tableau à deux dimensions avec toutes les mêmes valeurs
J'ai fait un programme qui calcule automatiquement le zodiaque avec tkinter
Mémorandum (Ajouter le nom uniquement aux personnes portant le même nom de famille dans la liste)
Remplacez le nom du répertoire et le nom du fichier dans le répertoire par une commande Linux.