2016-11-16 41 views
1

我有這個腳本在Python這我遇到一個瑪雅文件從一個命令行的Python腳本時:對象匹配誤差從命令行運行瑪雅

import maya.standalone 
maya.standalone.initialize("Python") 
import maya.cmds as cmds 
from maya import cmds 
import maya.mel as mel 
import glob 


def importFile(i): 
    cmds.file(i, i=True, groupReference=True, groupName="myobj") 


def materialFile(): 
    if cmds.objExists('Panel*'): 
     cmds.select("Panel*", replace=True) 
     myMaterial = "BlueGlass" 
     cmds.sets(e=True, forceElement= myMaterial + 'SG') 

    if cmds.objExists('Body*'): 
     cmds.select("Body*", replace=True) 
     myMaterial3 = "Silver" 
     cmds.sets(e=True, forceElement= myMaterial3 + 'SG') 

但是當我嘗試我得到這個錯誤運行該批處理文件:

File "/Users/../Scripts/MayaVectorScript.py", line 23, in materialFile 
     cmds.sets(e=True, forceElement= myMaterial + 'SG') 
TypeError: No object matches name: BlueGlassSG 

在材質編輯,着色器BlueGlass連接到着色組(SG)具有相同的名稱BlueglassSG和腳本在Maya中的UI工作。

是否需要在腳本中加載插件或其他東西才能使其在批處理文件中運行?

+0

着色器組被稱爲「BlueglassSG」,你正在尋找「BlueGlassSG」明白了嗎? –

+0

@AriGold嗯,我想我需要在Python中找到它。但是,如何? – jpits

+0

myMaterial =「BlueGlass」to myMaterial =「Blueglass」?我認爲這就是阿里正在談論的。 – Achayan

回答

0

通過使用listConnections獲取着色組而不是使用名稱,可以減少某些錯誤可能性。名稱通常有效,但不能保證。如果錯誤地輸入材料名稱:這將仍不能正常工作,但它應該更清楚,你已經得到了搞砸了:

import maya.cmds as cmds 

def get_sg(shader): 
    sgs = cmds.ls(cmds.listHistory(shader, f=True) or [''], type='shadingEngine') or [None] 
    return sgs[0] 

def assign(geometry, shader): 
    if not geometry: 
     cmds.error("No objects to assign") 
    sg = get_sg(shader) 
    if not sg: 
     cmds.error('could not find shader ' + shader) 
    cmds.sets(geometry, fe=sg) 

assign(cmds.ls('Panel*'), 'BlueGlass') 
assign(cmds.ls('Body*'), 'Silver') 
+0

我是否需要更改'((panel,BlueGlass)''((geometry,shader)'''的名稱)?? 此外,'blinn1'可以被BlueGlass和Silver取代嗎?因爲它們是着色器的名字 – jpits

+0

哦,好吧,我明白了。幾何被分配給Panel *和Body *並着色到BlueGlass和Silver。但是當我運行這個腳本時它仍然不起作用。它完成了腳本,但它不適用材料。 – jpits

+0

它是否打印錯誤?它應該很難運行,而沒有做任何事情 - 失敗的情況下應該產生錯誤消息 – theodox