2017-09-07 34 views
2

我试图从一个关联中删除儿童,我在python中复制了玛雅并且不工作。我错过了什么?玛雅Python从重复的关节删除儿童

import maya.cmds as mc 
mc.duplicate('spine02_Joint',n='spineGrpJnt') 
mc.parent('spineGrpJnt',w=True) 
mc.select('spineGrpJnt') 
childJnts = mc.listRelatives(ad=True) 
mc.delete(childJnts) 

从什么,我理解这应该删除childJnts一切,但它给我的错误:“不止一个对象匹配的名字:”

回答

0

可以大大由duplicate命令使用parentOnly kwarg简化您的代码,以便它复制你没有任何孩子

import maya.cmds as mc 

new_jnt = mc.duplicate('spine02_Joint', n='spineGrpJnt', parentOnly=True)[0] 
mc.parent(new_jnt, w=True) 

又一个未成年人注意到指定节点:大部分(如果不是全部) maya命令允许你传入一个对象来修改,并返回“新”对象的名称。通过将其存储在变量中,您可以传递变量而不是字符串作为对象名称。如果一个对象已经以该名称存在,并且maya在末尾用1来命名(例如:'my_object1'),这将特别有用。这样你就不必管理选择并担心可能导致命令操作错误对象的名称 - 并且可能很难跟踪错误...

因此,您可以编写像这样的原始代码:

import maya.cmds as mc 

new_jnt = mc.duplicate('spine02_Joint',n='spineGrpJnt')[0] 
mc.parent(new_jnt, w=True) 
childJnts = mc.listRelatives(new_jnt, ad=True, pa=True) 
mc.delete(childJnts) 
+0

为什么[0]数组的第一个索引?重复给你一个数组? – Giakaama

+0

true,重复命令确实返回一个列表,但在这种情况下,它是一个项目(单个重复关节)的列表。因此,不要随便在后面放置'new_jnt [0]',将第一项捕获到变量中会更容易一些。另外,由于我没有命名变量'new_jnts',因此它只是一个单独的项目而不是一个可读性列表。通常情况下,您将返回数据作为单个项目反馈到下一个命令(如接下来的两行中的parent和listRelatives) –

+0

它基本上归结为如何使用命令返回的数据 - if我只对一个项目感兴趣(或者我已经知道它只会给我一个列表中的单个项目),我得到0的索引;如果我可能会获得更多的物品,那么我不会 - 希望有所帮助! –

0

我看着办吧。 的代码应该是:

import maya.cmds as mc 
mc.duplicate('spine02_Joint',n='spineGrpJnt') 
mc.parent('spineGrpJnt',w=True) 
mc.select('spineGrpJnt') 
childJnts = mc.listRelatives(ad=True,pa=True) 
mc.delete(childJnts) 

添加了PA =真到了listRelatives给我我想要的。