[PYTHON] Benennen Sie den Knoten mit demselben Namen, der während der Arbeit gefunden wurde, automatisch um

Dieser Artikel ist der 15. Tagesartikel von Maya Adventskalender 2019.

Sie haben neulich zebraeds Rückruf mit pyside: MEventMessage gesehen. Ist es?

Es wird gesagt, dass OpenMaya die gleichen Funktionen wie scriptJob leicht und einfach ausführen kann, also werde ich es in Zukunft verwenden.

Dieses Mal werde ich mit scriptJob schreiben, aber ...


Einführung

Doppelte Knotennamen verursachen in Maya keinen schwerwiegenden Fehler. Wenn Sie den Prozess jedoch beim Erstellen des Mel-Skripts nicht richtig schreiben, wird das angegebene Objekt möglicherweise nicht gefunden und das Skript wird möglicherweise gestoppt.

Es wäre einfacher, wenn wir es automatisch umbenennen könnten, bevor etwas passiert.

Automatischer Umbenennungsprozess

1. Umbenennen

  1. Holen Sie sich den Knoten von uuid.
  1. Wenn der Knotenname | (vertikale Linie) enthält, wird der Knotenname dupliziert.
  2. Rufen Sie den Namen des Basisknotens mit einem regulären Ausdruck ab.
  1. Umbenennen

Der resultierende Code sieht so aus

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. Verarbeitung beim manuellen Umbenennen

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

nonSameNameAlliance.py#L11-L13

3. Verarbeitung zum Zeitpunkt der Vervielfältigung

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

Registrieren Sie sich für den Skriptjob

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

Führen Sie den Skriptjob automatisch aus, wenn Maya startet

userSetup.py


import nonSameNameAlliance;nonSameNameAlliance.main()

Legen Sie nonSameNameAlliance.py in Mayas Scripts-Ordner und fügen Sie den Startvorgang zu userSetup.py hinzu. Wenn Maya jetzt startet, wird der Prozess in scriptJob registriert und automatisch umbenannt.

herunterladen

Klicken Sie hier für diesen Quellcode https://github.com/teionn/nonSameNameAlliance

wichtiger Punkt

  1. Der Knoten wird automatisch umbenannt, wenn Sie ihn in der Szene bedienen. Ich denke, er ist im Grunde genommen für Modellierer gedacht.

  2. Es kann nur auf dem Transformationsknoten ausgeführt werden.

  1. Dieses Skript beurteilt keinen Fall. Maya kann Objekte, bei denen zwischen Groß- und Kleinschreibung unterschieden wird, auch in derselben Hierarchie beibehalten. image.png

Wenn Sie in diesem Status ein Asset zu Unity bringen, können Sie anscheinend bei beiden Objekten "object_a" und "object_A" nicht auf eines der beiden Objekte verweisen.


Der Artikel von morgen handelt von rateionn Entfernen Sie ordnungsgemäß: Unbekannte Plugins?.

Das ... ich schreibe ... ich habe noch keinen Artikel geschrieben ...

Ich habe vor, das Skript rechtzeitig kostenlos zu veröffentlichen. Ich würde mich freuen, wenn ich es nur herunterladen würde.

Recommended Posts

Benennen Sie den Knoten mit demselben Namen, der während der Arbeit gefunden wurde, automatisch um
(Hinweis) Importieren von Excel mit demselben Spaltennamen
Laden Sie das gleichnamige Modul an einer anderen Stelle
Wenn eine lokale Variable mit demselben Namen wie die globale Variable in der Funktion definiert ist
Vorsichtsmaßnahmen beim Erstellen eines zweidimensionalen Arrays mit denselben Werten
Ich habe ein Programm erstellt, das den Tierkreis mit tkinter automatisch berechnet
Memorandum (Namen nur Personen mit demselben Nachnamen in der Liste hinzufügen)
Ersetzen Sie den Verzeichnisnamen und den Dateinamen im Verzeichnis zusammen mit einem Linux-Befehl.