【发布时间】: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最好从叶子重命名并沿着层次结构向上工作,以避免丢失对其他对象的引用。