我尝试将每个元素的所有对象类型放入Outliner的组中。
这是我的代码。
from maya import cmds
objects = cmds.ls(selection=True, dag=True)
objects.sort(key=len, reverse=True)
# Now we loop through all the objects we have
for obj in objects:
# We get the shortname again by splitting at the last |
shortName = obj.split('|')[-1]
children = cmds.listRelatives(obj, children=True) or []
if len(children) > 0:
for current in children:
objType = cmds.objectType(current)
print(objType)
我收到此错误:
错误:RuntimeError:文件/Users/jhgonzalez/Library/Preferences/Autodesk/maya/2018/scripts/AssigMaterialForEachMesh.py第26行:没有对象与名称匹配:SafetyHandle_019_allFromGun:pCylinderShape21 找不到对象'SafetyHandle_019_allFromGun:pCylinderShape21'。
我正在用
测试此代码答案 0 :(得分:1)
问题是您没有使用长名称,因此如果存在名称重复的对象,则脚本将崩溃,因为Maya不知道如何解决它。
例如,假设您有3个节点的层次结构:
|a
|b
|c
另一个具有2个节点的层次结构:
|d
|a
由于您使用的是短名称,因此当您尝试从objectType
查询a
时,它不知道要从哪个层次中查询它,因此只使用长名称:
from maya import cmds
objects = cmds.ls(selection=True, dag=True, l=True) # Use long parameter.
objects.sort(key=len, reverse=True)
# Now we loop through all the objects we have
for obj in objects:
children = cmds.listRelatives(obj, f=True, children=True) or [] # Use full parameter.
if len(children) > 0:
for current in children:
objType = cmds.objectType(current)
print(objType)
现在,尽管场景中有重复的名称,它仍可以按预期工作。