Maya python 获得最顶级的父变换
Maya python get top most parent transforms
我在 Maya 中选择了一些变换,我想获得选择中所有层次结构的顶级父变换。这是实现该目标的最佳方式吗?
import maya.cmds as cmds
def getTopParents(transforms):
'''
Returns a list of the top most parents for the given transforms
'''
parents = []
for t in transforms:
p = cmds.listRelatives(t, parent=True, type='transform')
while p:
p = cmds.listRelatives(p[0], parent=True, type='transform')
if p:
parents.append(p[0])
else:
parents.append(t)
return parents
这样的事情怎么样?根据需要修改以存储 parents 而不是仅仅打印它们。
import maya.cmds as cmds
targets = ['pCylinder1', 'group4', 'group10']
print('Full hierarchy: {}'.format(cmds.ls(targets[0], long=True)[0]))
for target in targets:
parent = None
stop = False
while not stop:
p = cmds.listRelatives(parent or target, parent=True)
if p is None:
stop = True
else:
parent = p[0]
if parent:
print('{} has top-level parent {}'.format(target, parent))
else:
print('{} is top-level object'.format(target))
输出:
Full hierarchy: |group10|group9|group8|group7|group6|group5|group4|group3|group2|group1|pCylinder1
pCylinder1 has top-level parent group10
group4 has top-level parent group10
group10 is top-level object
编辑: 看来我没有正确阅读你的问题。我们或多或少得出了相同的代码,所以我想我对你问题的回答是 是的,这可能是最好的方法。
您也可以使用 object 的完整路径并按 |
拆分,但它不一定像听起来那么精确——尤其是如果 object 被传递通过他们的短名称到您的方法。
我在 Maya 中选择了一些变换,我想获得选择中所有层次结构的顶级父变换。这是实现该目标的最佳方式吗?
import maya.cmds as cmds
def getTopParents(transforms):
'''
Returns a list of the top most parents for the given transforms
'''
parents = []
for t in transforms:
p = cmds.listRelatives(t, parent=True, type='transform')
while p:
p = cmds.listRelatives(p[0], parent=True, type='transform')
if p:
parents.append(p[0])
else:
parents.append(t)
return parents
这样的事情怎么样?根据需要修改以存储 parents 而不是仅仅打印它们。
import maya.cmds as cmds
targets = ['pCylinder1', 'group4', 'group10']
print('Full hierarchy: {}'.format(cmds.ls(targets[0], long=True)[0]))
for target in targets:
parent = None
stop = False
while not stop:
p = cmds.listRelatives(parent or target, parent=True)
if p is None:
stop = True
else:
parent = p[0]
if parent:
print('{} has top-level parent {}'.format(target, parent))
else:
print('{} is top-level object'.format(target))
输出:
Full hierarchy: |group10|group9|group8|group7|group6|group5|group4|group3|group2|group1|pCylinder1
pCylinder1 has top-level parent group10
group4 has top-level parent group10
group10 is top-level object
编辑: 看来我没有正确阅读你的问题。我们或多或少得出了相同的代码,所以我想我对你问题的回答是 是的,这可能是最好的方法。
您也可以使用 object 的完整路径并按 |
拆分,但它不一定像听起来那么精确——尤其是如果 object 被传递通过他们的短名称到您的方法。