【问题标题】:Maya Python, Renaming joints: more than one object matches nameMaya Python,重命名关节:多个对象匹配名称
【发布时间】:2020-08-14 00:09:28
【问题描述】:

好的,所以每当我尝试运行此脚本时都会遇到两个错误:但在我超越自己之前:让我们达到我的目标。

创建两个关节链,名称并不重要:但基本上我知道您可以使用括号列出和隔离具有匹配子名称的关节链。相反,我的脚本似乎忽略了括号并给了我错误。我已经为列表亲属尝试了所有不同的标志:但似乎所做的只是将错误更改为其他内容。

我知道如果此脚本正常工作,由于硬编码名称,它只能在一个联合链上工作:但我从中提取它的脚本具有与 GUI 相关联的名称前缀,以避免硬编码并允许自适应命名:我仅使用硬编码作为此脚本的示例。我的抱怨是这个脚本不适用于任何联合链,因为我不断收到错误“多个对象匹配名称”。

要运行脚本,请将以下代码以 .py 格式保存在您的 maya 文档脚本文件夹中,重新启动您的 maya 副本,然后打开一个新的 python 选项卡并运行上面 import maya.cmds 的前三行代码

'''
import exampleScriptTemplate
reload (exampleScriptTemplate)
exampleScriptTemplate.gui()
'''

import maya.cmds as cmds

if cmds.window("buildWin", exists =True):
    cmds.deleteUI("buildWin", window = True)

myWindow = cmds.window("buildWin",t='DS_pvFinder',rtf=1,w=100, h=100, toolbox=True)
column = cmds.columnLayout(adj=True)

def gui(*args):
    cmds.columnLayout()
    cmds.button(w=300,label='build placement curve',c=printMultiple)
    cmds.showWindow(myWindow)

def printMultiple(*args):
    
    root = cmds.ls(sl=True)[0]
    child = cmds.listRelatives(root,ad=1,f=True,children=True,type='joint')
    child.append(root)
    child.reverse()
    limbJnt = child

    print (child)

    armroot = []
    for j in limbJnt:
        wstJnt = cmds.rename(child[3], 'wrist_BIND')
        elbJnt = cmds.rename(child[2], 'elbow_BIND')
        sdrJnt = cmds.rename(child[1], 'shoulder_BIND')
        clvJnt = cmds.rename(child[0], 'clavicle_BIND')
        armroot.append(j)

    return armroot

我知道我在正确的球场。我只需要知道如何正确使用方括号来存储我选择的列表,而不是搜索所有的世界空间和破坏。

感谢您的帮助

【问题讨论】:

  • 为什么你循环遍历limbJnt,但单独硬编码数字以用child重命名?您可能根本不需要循环。 Haggi 是正确的,cmds 最好从叶子重命名并沿着层次结构向上工作,以避免丢失对其他对象的引用。

标签: python maya


【解决方案1】:

您提供的代码不完整,没有打开窗口,所以我只尝试了 printMultiple 函数,这会导致 错误:没有对象匹配名称

您的代码不能像这样工作,因为您将硬编码的名称与一个什么都不做的循环混合在一起。我想您的主要问题是重命名的顺序。子数组包含绝对名称,如:

[u'joint1', u'|joint1|joint2', u'|joint1|joint2|joint3']

如果您现在将 child[0] 重命名为“clavicle_BIND”,则列表中的所有剩余元素都将变为无效,因为它们在场景中的真实名称现在如下所示:

[u'clavicle_BIND', u'|clavicle_BIND|joint2', u'|clavicle_BIND|joint2|joint3']

导致第二个重命名行出错的原因。倒序解决这个问题,先重命名叶子节点,再重命名上面的。

【讨论】:

  • 嘿@haggi krey,我更新了脚本,说明了如何运行它:我很抱歉之前没有注意到这一点。颠倒顺序到底是什么意思?你的意思是颠倒子关节选择器列表的顺序还是我给骨骼命名的顺序?
  • 您首先重命名顶部关节,锁骨。重命名叶关节,首先是手腕。
  • 我明白你的意思,我颠倒了列表,它确实更改了名称:但现在我收到错误消息“/maya/2020/scripts\exampleScriptTemplate.py 第 32 行:没有对象匹配名称" 有没有办法让它运行而不会在最后出现错误?
  • 您能否用您的更改更新脚本,以便我们可以跟踪您的进度并查看有什么问题?
  • 你到底需要循环做什么?在第一次迭代中,关节从旧名称重命名为新名称,在第二次迭代中,关节从旧名称重命名为新名称,但是......旧的不再存在,它们已经重命名.我建议删除循环。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-06-07
  • 2020-06-08
  • 2019-05-18
  • 1970-01-01
  • 1970-01-01
  • 2021-01-26
  • 1970-01-01
相关资源
最近更新 更多