重复对象的重命名失败

时间:2014-05-07 07:13:28

标签: python duplicates rename maya

我正在制作一个重命名脚本,但我遇到了一些麻烦 搜索和替换功能。

实际上,只要没有相同的功能,该功能就可以正常工作 层次结构中的对象。例如,如附件中所示,locator1 和locator2是从头开始创建的,而locator3是从中复制的 locator2

enter image description here

如果我以短名称显示它们,则如下: locator1 locator2 locator2 | locator3

如上所述,当我尝试将'locator'一词替换为'Point'时, 重命名适用于定位器1和2,但是当涉及到locator3时,我得到了 错误RuntimeError: No object matches name

因此,我想知道是否有更好的方法让我重新编码,导致 像建模中的情况,艺术家一遍又一遍地复制对象 或使用实例..

我知道这个失败的原因是短名称本身但可以绕过吗?

def searchReplace(self):
    wordSearch = str(self.searchTxt.text())
    wordReplace = str(self.replaceTxt.text())

    objCnt = cmds.ls(sl=True, sn=True)

    if len(objCnt) == 0:
        self.searchTxt.clear()
        self.replaceTxt.clear()
        cmds.warning('Nothing is selected')
    else:
        for wordString in sorted(objCnt):
            if wordSearch in wordString:
                newWordString = wordString.replace(wordSearch, wordReplace)
                cmds.rename(wordString, newWordString)
                self.searchTxt.clear()
                self.replaceTxt.clear()
                print '%s' %wordString + " has changed to : " + "%s" %newWordString

1 个答案:

答案 0 :(得分:1)

这是一个棘手的问题,但解决方案实际上非常简单!

当您对objCnt进行排序时,您按字典顺序执行此操作:

    for wordString in sorted(objCnt):

这意味着locator2出现在locator2|locator3之前。本身应该没问题,但是......

重命名locator2后,locator3的路径也发生了变化,因此访问失败。

诀窍是反转排序,以便更长的对象首先出现。这样孩子们总是会在父母面前重命名

    for wordString in sorted(objCnt, reverse=True):

为此,您还需要确保ls为您提供长名称,添加long=True参数