我需要一个层次结构:
>分开
> doSomething()
>将其放回原处.
我知道如何确定要打破的事情,并计划好在层次结构统一时需要做的事情.问题是我该如何让他们回来?
细节
这与我之前的问题有关:
Freeze scale transform on a parent object with animated child (MAYA MEL/Python script)
我需要冻结层次结构中所有节点上的比例转换.问题在于节点上具有转换的动画,如果我尝试冻结父节点上的比例,则子动画变得很奇怪.
但是,看起来好像有一个解决方案,但是我需要实施方面的帮助.
我想要:
>将每个对象分组
>将每个小组带入世界
>将动画烘焙到世界空间(摆脱组节点)
>冻结比例转换
>重新将它们重新父母
当我手动执行此操作时,它可以正常工作,因此一切正常.但是,如果您认为有更好的方法可以实现我的主要目标,请告诉我.
因此,我一直在考虑将所有节点写入字符串,然后从那里调用它们,但是我不知道如何处理分支.
例如:
如果这是一个无分支的层次结构(一直有一个父母和一个孩子),我可以两个人和一个父母来轻松地称呼它们.
但是分支使字符串中的名称变得像“父母,孩子,孩子,孩子,父母…”
可能我想得太多,方向错误.有任何想法吗?
解决方法:
如果您还没有的话,我建议您使用python-您可以相互使用几乎任何数据类型,以在单个数据结构中获得所需的数据.这将比创建一个长字符串并稍后再将其重新分配容易得多.
收集层次结构数据:
import maya.cmds as mc
def hierarchyTree(parent, tree):
children = mc.listRelatives(parent, c=True, type='transform')
if children:
tree[parent] = (children, {})
for child in children:
hierarchyTree(child, tree[parent][1])
top_node = 'name_of_node' # could also use mc.ls(sl=True)[0] if you want...
hierarchy_tree = {}
hierarchyTree(top_node, hierarchy_tree)
这基本上应该从您的顶部节点开始,然后递归地向下层次结构创建一个类似于嵌套字典的数据结构…每个键都是父节点,其键值为一个元组,用于存储子级列表和dict儿童数据.每个子dict遵循相同的格式-子是键,其子数据在元组等中,等等,等等,直到层次结构的末尾.我正在使用带有列表和字典的元组,因为字典是无序的…列表基本上可以确保您按照它们来自的顺序重新父它们,但是如果您不是真的,可以只存储字典关心保留订单…
要将其作为父项,您将执行以下操作:
def reparent(tree):
for parent, data in tree.iteritems():
children, child_tree = data
mc.parent(children, parent)
reparent(child_tree)
reparent(hierarchy_tree)
现在…我还没有测试过此代码-无需将其带入Maya即可即时编写.我更担心re-parent函数中会弹出错误,因此您可能需要在其中尝试/例外,但希望它会跳过任何空的dict项,并使您接近需要输入的内容.育儿/重新养育.这也假设您所有的节点都有唯一的短名称…
哦,关于递归函数的说明…请确保它们会在某个时刻终止,否则您可能会陷入无限循环中(这应该很好,因为我们正在跟踪具有确定末端的层次结构,即:否更多子节点)