2016-11-16 8 views
1

У меня есть этот скрипт в Python, который я бег в файл май из командной строки:ошибка матча объекта при выполнении сценария Python из командной строки Maya

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 

в Hypershade, шейдер BlueGlass подключен к шейдерной группе (SG) с тем же именем BlueglassSG и скрипт работает из пользовательского интерфейса внутри майи.

Нужно ли загружать плагин или что-то в скрипте, чтобы он запускался в пакетном файле?

+0

группа Шейдер называется «BlueglassSG», вы ищете «BlueGlassSG», это ясно? –

+0

@AriGold Ну, я думаю, мне нужно найти его на питоне. Но как? – 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

Нужно ли мне менять имя '(геометрия, шейдер)' for '(панель, BlueGlass)' ?? Также можно заменить blinn1 на BlueGlass и Silver? Поскольку они являются именами шейдеров – jpits

+0

ой, я понял. Геометрия назначается Panel * и Body * и шейдеру для BlueGlass и Silver. Но все же это не работает, когда я запускаю скрипт. Он завершает сценарий, но он не применяет материалы. – jpits

+0

Выводит ли сообщение об ошибке? Это должно быть тяжело для того, чтобы он запускал бег без каких-либо действий - случаи сбоя должны генерировать сообщения об ошибках – theodox

 Смежные вопросы

  • Нет связанных вопросов^_^