【问题标题】:Renaming fails for duplicated objects重复对象重命名失败
【发布时间】:2014-06-24 00:53:37
【问题描述】:

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

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

如果我用它们的简称显示它们,如下所示: 定位器1 定位器2 定位器2|定位器3

如前所述,当我尝试将“定位器”一词替换为“点”时, 重命名适用于定位器 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

【问题讨论】:

    标签: python duplicates rename maya


    【解决方案1】:

    这是一个棘手的问题,但解决方案其实很简单!

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

        for wordString in sorted(objCnt):
    

    这意味着locator2locator2|locator3 之前。就其本身而言应该没问题,但是...

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

    诀窍是颠倒排序,使 更长的 对象排在第一位。这样孩子总是在父母之前被重命名

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

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

    【讨论】:

    • 我认为在这种情况下词法排序就足够了,所以 sorted(objCnt, reverse=True) 对长名称应该是相同的效果。 OP 可以在长名称上使用 wordString.split("|")[-1] 获得短名称
    猜你喜欢
    • 2020-10-14
    • 1970-01-01
    • 1970-01-01
    • 2013-12-29
    • 2016-12-08
    • 2016-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多