在maya中选择所有定位器,并在Python中一次重新命名它们



如何在Maya中选择所有的定位器,关节和网格并将它们一起重命名?这是我目前所看到的:

for mesh in cmds.ls(type = ['mesh', 'joint', 'locator']):
                item = cmds.listRelatives(type= ['joint','locator','mesh'] p=1)[0]
                cmds.rename(item, item + "_" + text)

我做错了什么?出现错误:

# Error: TypeError: file <maya console> line 2: 'NoneType' object has no attribute '__getitem__' # 

如果您试图重命名形状上面的转换,则需要实际传入形状。你所做的就是将选择传递给listRelatives,它在旧Maya的

中返回None
locators = cmds.ls(type=('locator','mesh'), l=True) or []
loc_parents = cmds.listRelatives(*locators, p=True, f=True) or []
loc_parents.sort(reverse=True)
for lp in loc_parents:
    cmds.rename(lp, 'new_name')

当重命名时,你想使用长名称——以防你有多个对象在不同的父对象下具有相同的短名称——并且从最长的完整路径到最短的完整路径,这样你就不会重命名一个对象的父对象,从而改变它的路径。

'or[]'确保您得到一个空列表而不是None,因此脚本在没有定位器时也会运行。

** edit **

根据OP的要求,

更新为包含网格。对于连接,不需要执行listRelatives步骤——但是长名称和重新排序是至关重要的,因为复制的连接很容易创建重复的名称

最新更新