Maya Python从重复的关节中删除子项

时间:2017-09-07 22:06:32

标签: python maya

我正在尝试删除我在maya中使用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中的所有内容,但它会给我错误:'多个对象匹配名称:'

2 个答案:

答案 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)

在listRelatives中添加了pa = True,给了我想要的东西。

答案 1 :(得分:0)

您可以使用parentOnly命令中的duplicate 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)