我使用以下代码处理在我的场景中找到的图像列表,在收集的信息之前,即在另一个函数中使用tifPath和texPath。
然而,在我的场景中有3个纹理,因此我应该看到3组tifPath和texPath,但我只看到其中的1个。而如果我正在运行检查surShaderOut
或surShaderTex
我能够看到所有3个纹理信息。
例如,3纹理文件路径如下(在surShaderTex中):/user_data/testShader/textureTGA_01.tga, /user_data/testShader/textureTGA_02.tga, /user_data/testShader/textureTGA_03.tga
我想我想说的是,为什么在我的for
声明中,它能够打印出所有3个结果,但是除了它之外,它只打印出一个结果。
有任何建议吗?
surShader = cmds.ls(type = 'surfaceShader')
for con in surShader:
surShaderOut = cmds.listConnections('%s.outColor' % con)
surShaderTex = cmds.getAttr("%s.fileTextureName" % surShaderOut[0])
path = os.path.dirname(surShaderTex)
f = surShaderTex.split("/")[-1]
tifName = os.path.splitext(f)[0] + ".tif"
texName = os.path.splitext(f)[0] + ".tex"
tifPath = os.path.join(path, tifName)
texPath = os.path.join(path, texName)
convertText(surShaderTex, tifPath, texPath)
答案 0 :(得分:1)
只有两行是for
循环的一部分。其余的只执行一次。
所以首先运行:
surShader = cmds.ls(type = 'surfaceShader')
for con in surShader:
surShaderOut = cmds.listConnections('%s.outColor' % con)
surShaderTex = cmds.getAttr("%s.fileTextureName" % surShaderOut[0])
然后在该循环之后,只有一个surShader
,一个surShaderOut
和一个surShaderTex
,以下执行:
path = os.path.dirname(surShaderTex)
f = surShaderTex.split("/")[-1]
tifName = os.path.splitext(f)[0] + ".tif"
texName = os.path.splitext(f)[0] + ".tex"
tifPath = os.path.join(path, tifName)
texPath = os.path.join(path, texName)
缩进与上面的行相同,并且将为 surShader
的每个元素运行,而不是仅运行一次。