Maya Python,重命名关节:多个对象匹配名称
Maya Python, Renaming joints: more than one object matches name
好的,所以每当我尝试 运行 这个脚本时我都会遇到两个错误:但在我超越自己之前:让我们开始我的 objective.
创建两个关节链,名称并不重要:但基本上我知道您可以使用方括号列出和隔离具有匹配子名称的关节链。相反,我的脚本似乎忽略了括号并给我错误。我已经为列表亲属尝试了每个不同的标志:但似乎所做的只是将错误更改为其他内容。
我知道如果这个脚本正常工作,它只能在一个联合链上工作,因为名称是硬编码的:但是我从中提取它的脚本具有与 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
我知道我是在正确的球场。我只需要知道如何正确使用括号来存储我正在选择的列表,而不是搜索所有的世界空间和中断。
感谢您的帮助
您提供的代码不完整,没有 window 打开,所以我只尝试了 printMultiple 函数,导致 Error: No object在我的例子中匹配 name。
您的代码无法像这样工作,因为您将硬编码的名称与一个什么都不做的循环混合在一起。我想你的主要问题是重命名的顺序。子数组包含绝对名称,如:
[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']
是什么导致第二个重命名行出错。倒序解决这个问题,先重命名叶子节点,再重命名上面的。
好的,所以每当我尝试 运行 这个脚本时我都会遇到两个错误:但在我超越自己之前:让我们开始我的 objective.
创建两个关节链,名称并不重要:但基本上我知道您可以使用方括号列出和隔离具有匹配子名称的关节链。相反,我的脚本似乎忽略了括号并给我错误。我已经为列表亲属尝试了每个不同的标志:但似乎所做的只是将错误更改为其他内容。
我知道如果这个脚本正常工作,它只能在一个联合链上工作,因为名称是硬编码的:但是我从中提取它的脚本具有与 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
我知道我是在正确的球场。我只需要知道如何正确使用括号来存储我正在选择的列表,而不是搜索所有的世界空间和中断。
感谢您的帮助
您提供的代码不完整,没有 window 打开,所以我只尝试了 printMultiple 函数,导致 Error: No object在我的例子中匹配 name。
您的代码无法像这样工作,因为您将硬编码的名称与一个什么都不做的循环混合在一起。我想你的主要问题是重命名的顺序。子数组包含绝对名称,如:
[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']
是什么导致第二个重命名行出错。倒序解决这个问题,先重命名叶子节点,再重命名上面的。