2017-09-08 8 views
2

Ich versuche, auf Maya Python auf dem Laufenden zu sein, also habe ich gelesen Dieses Buch (http://www.maya-python.com/) Es gibt ein Online-PDF davon ... Ich bin auf einem Abschnitt (The For Statement) wo ich nicht das richtige Ergebnis bekomme, bekomme ich aber auch keine Fehler. Wenn sich jemand das ansehen könnte und mir eine Idee geben könnte, was das Problem verursacht, wäre das großartig.Maya Python auf Renaming Nodes

So erstellt es 3 Dateiknoten fein und es soll alle 3 Knoten mit dem Präfix "Dirt_" umbenennen. Aber es umbenennt nur ‚file1‘ und nicht die anderen beiden Knoten

Hier ist der Prozess:

#The FOR statement 

import maya.cmds; 
def process_all_textures(**kwargs): 
    pre = kwargs.setdefault('prefix', 'my_'); 
    textures = kwargs.setdefault('texture_nodes'); 
    new_texture_names = []; 
    for texture in textures: 
     new_texture_names.append(
     maya.cmds.rename(
     texture, 
     '%s%s'%(pre, texture) 
     ) 
     ); 
     return new_texture_names; 

#create new Maya scene & list 3 file nodes & print their names 

maya.cmds.file(new=True, f=True); 
textures = []; 
for i in range(3): 
    textures.append(
    maya.cmds.shadingNode(
    'file', 
    asTexture=True 
    ) 
    ); 
print(textures); 

#pass new texture list to process_all_textures() func and print resulting names 

new_textures = process_all_textures(
texture_nodes = textures, 
prefix = 'dirt_' 
); 
print(new_textures); 

[u'file1', u'file2', u'file3'] 
[u'dirt_file1'] 

Antwort

1

Die Linie return new_texture_names muss durch vier Räume (nicht von acht Einsen) eingerückt werden.

In Ihrem Fall return Anweisung stoppt die Funktion und gibt sofort den Wert zurück.

#The FOR statement 
import maya.cmds as mc 

def process_all_textures(**kwargs): 
    pre = kwargs.setdefault('prefix', 'my_') 
    textures = kwargs.setdefault('texture_nodes') 
    new_texture_names = [] 

    for texture in textures: 
     new_texture_names.append(mc.rename(texture,'%s%s'%(pre, texture))) 

    return new_texture_names 

#create new Maya scene & list 3 file nodes & print their names 
mc.file(new=True,f=True) 
textures = [] 

for i in range(3): 
    textures.append(mc.shadingNode('file',asTexture=True)) 
print(textures) 

#pass new texture list to process_all_textures() func and print resulting names 
new_textures = process_all_textures(texture_nodes = textures,prefix = 'dirt_') 
print(new_textures) 

[u'file1', u'file2', u'file3'] 
[u'dirt_file1'] 
+1

Danke das ist es! das Buch, dem ich folge, zeigt die Gedankenstriche nicht, also denke ich, dass ich das im Auge behalten muss – Mogie

+1

Return-Anweisung stoppe die Funktion, sobald sie erfüllt ist. Deshalb stoppt es jedes Mal bei der ersten Schleife – DrWeeny