我正在重命名脚本,但是我遇到了麻烦
搜索和替换功能。

实际上,只要没有重复的功能
层次结构中的对象。例如,如附件中所示,locator1
和locator2是从头开始创建的,而locator3是从头开始的副本
定位器2



如果要以它们的简称显示它们,则如下所示:
定位器1
定位器2
locator2 | locator3

因此,如上所述,当我尝试将“定位器”一词替换为“点”时,
重命名定位器1和2的作品,但是当涉及定位器3时,我得到了
错误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

最佳答案

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

objCnt进行排序时,是按字典顺序进行的:

    for wordString in sorted(objCnt):


这意味着locator2locator2|locator3之前。单靠它应该没问题,但是...

重命名locator2时,locator3的路径也已更改,因此访问失败。

诀窍是反转排序,使更长的对象排在第一位。这样孩子们总是在父母之前被改名

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


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

关于python - 重命名失败的重复对象,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23511139/

10-11 18:55