我正在尝试创建一个变量来保存Maya中我的定位器和网格列表。所以我有这个
locators = cmds.listRelatives(cmds.ls(type= 'locator'), p=1)# Give me the list of locators
meshes = cmds.listRelatives(cmds.ls(type= 'mesh'), p=1) #Give me the list of all meshes
但是如果当前场景中有可用的定位器或多边形,这些只会起作用。 Maya吐出错误:
line 1: Object [] is invalid
如果找不到定位器或多边形。
即使它们在场景中可用,如何存储它们?目的是创建搜索和替换工具。因此,如果他/她想要,艺术家只能搜索和替换网格。但即使我只是S& R网格,它现在也出错了。当我搜索网格物体时,定位器会给出错误,而当我寻找定位器时,网格物体会失败。
以下是我的全部搜索和替换代码:
def searchAndReplace(self):
searchText = str(self.windowObj.myLookFor.text()) #My search text feild
replaceText = str(self.windowObj.myRepFor.text()) #My replace text feild
selection = cmds.ls(sl=True) #only selected items
locators = cmds.listRelatives(cmds.ls(type= 'locator'), p=1)# Give me the list of locators
meshes = cmds.listRelatives(cmds.ls(type= 'mesh'), p=1) #Give me the list of all meshes
joints = cmds.ls(type = 'joint')# Give me the list of my joints.
allObjects = locators, meshes, joints
if len(selection) > 0:
if self.windowObj.myRepAll.isChecked():
print "All is selected"
for object in meshes:
if object.find(searchText) != -1:
newName = object.replace(searchText, replaceText)
cmds.rename(object, newName)
self.listofMeshes.append(meshes)
else:
print "No mesh found. Skipping meshes"
for object in locators:
if object.find(searchText) != -1:
newName2 = object.replace(searchText, replaceText)
cmds.rename(object, newName2)
self.listofLocators.append(locators)
else:
"No locators found. Skipping locators"
for object in joints:
if object.find(searchText) != -1:
newName3 = object.replace(searchText, replaceText)
cmds.rename(object, newName3)
self.listofJoints.append(joints)
else:
print "No joints found. Skipping joints"
需要帮助正确存储变量,以便正确存储定位器,网格和关节,并且如果其中一个在场景中不可用,则能够使用它。
答案 0 :(得分:0)
当我运行你在一个新的空场景中指出的两个语句时,我在两个变量上都得到了一个。
在这种情况下,在开始循环之前,您可以通过将每个for循环缩进来阻止错误,例如, if meshhes:,或者甚至更好, if isinstance (网格,列表):,如果网格是一个列表,它只会执行代码:
if isinstance(meshes, list):
for object in meshes:
if object.find(searchText) != -1:
newName = object.replace(searchText, replaceText)
cmds.rename(object, newName)
listofMeshes.append(meshes)
如果在尝试执行语句时仍然遇到相同的错误,请将其缩进到try / catch块中以查看有关正在发生的事情的更详细说明,并从Maya CMDS' documentation获得更多帮助:
try:
locators = cmds.listRelatives(cmds.ls(type= 'locator'), p=1)
except Exception as e:
print e
答案 1 :(得分:0)
默认情况下,如果cmds.listRelatives
找不到任何内容而不是像预期的那样返回空[]
,则会返回None
。
解决此问题的两种方法是将None
转换为[]
:
print cmds.listRelatives(cmds.ls(type= 'locator'), p=1) or []
> returns []
或执行条件检查以查看变量是否为空:
sceneLocators = cmds.listRelatives(cmds.ls(type= 'locator'), p=1)
if sceneLocators:
print 'Continue'
else:
print 'No locators!'
你不应该像Carlos所暗示的那样包裹try
except
。这只是编程中的不良做法,通常有一些例外,通常是一种懒惰的方式。