2016-11-02 4 views
1

Ich habe Tutorials über Digital Tutors für Skripting verfolgt, und in einigen Videos macht der Tutor ein Werkzeug, das gamma korrekte Knoten zu jedem ausgewählten Shader mit MEL, für mein Lernen ich dachte, ich würde versuchen, umzuschreiben der Code in Python, aber ich habe Mühe, ein Stück MEL-Code in Python zu konvertieren.Mel to Python Schwierigkeit

Der Code, den ich bisher habe, ist dies:

import maya.cmds as cmds 

selMat = cmds.ls(sl=True, mat=True) 

if len(selMat) < 1: 
    cmds.warning('Select at least one Maya or Mental Ray Shader to apply gamma correct node to.') 

for mat in selMat: 

    gammaCorrect_util = cmds.shadingNode('gammaCorrect', asUtility=True) 
    rename_gamma = cmds.rename(gammaCorrect_util, ('gamma_' + mat)) 
    cmds.setAttr((rename_gamma + '.gammaX'), 0.45) 
    cmds.setAttr((rename_gamma + '.gammaY'), 0.45) 
    cmds.setAttr((rename_gamma + '.gammaZ'), 0.45) 

    if cmds.attributeQuery('color', mat): # << error here 

     connection_to_mat = cmds.listConnections(mat + '.color') 
     if len(connection_to_mat) == 1: 

      cmds.connectAttr ((connection_to_mat + '.outColor'), (rename_gamma + '.value'), f=True) 
      cmds.connectAttr ((rename_gamma + '.outValue'), (mat + '.color'), f=True) 

wenn ich dies laufe ich die folgende Fehlermeldung erhalten:

Error: Too many objects or values.Traceback (most recent call last): File "", line 17, in TypeError: Too many objects or values.

Der MEL-Code, wo ich das Thema denken ist:

Ich bin mir nicht sicher, wie Sie den "attributeQuery" -Befehl in Python anstelle von "attributeExists" in MEL, T konvertieren und verwenden Der Tutor definiert auch die voreingestellten Variablen "$ connection_to_mat []", aber dies funktioniert nicht in Python.

+0

Sie haben den ursprünglichen Code, was ist in Zeile 17? Es sieht für mich wie eine leere Zeile aus. Entweder ist der Code nicht genau das, was du ausgeführt hast, oder ich habe es falsch gezählt - aber ich bin nicht wirklich daran interessiert, 17 Zeilen wieder zu zählen, wenn du bereits weißt, welche es ist und könnte habe es in erster Linie in deine Frage gebracht. – Useless

+0

Hallo, tut mir leid, Kumpel, ich bin neu, es hat nicht korrekt im Forum gepostet. Der Code in Zeile 17 in meinem Skript - Editor in maya lautet "if cmds.attributeQuery ('color', mat):" –

+1

Nein Problem, ich habe es gerade in die Frage für Sie bearbeitet – Useless

Antwort

2

attributeQuery nimmt nur ein unbenanntes Argument, das Attribut. Sie müssen den Knoten mit dem Knoten-Flag angeben, genau wie die MEL-Version.

cmds.attributeQuery('color', n=mat, exists=True) 

listConnections gibt ein Array zurück. Sie werden es überprüfen müssen einige Verbindungen sind und wenn ja, die erste Verbindung verwenden: connection_to_mat[0]

Übrigens, wenn Sie angeben, dass Sie den Stecker möchten, dann werden Sie nicht mit „.outColor“ die Zeichenfolge verketten müssen

Das ist besser, weil es eine Möglichkeit gibt, dass das eingehende Attribut anders benannt wird oder ein Kind einer Verbindung ist. Beispiel: someNode.colors.outColor1. Was auch immer es ist, können Sie es einfach zu connectAttr füttern.