如果你还没有使用Python,我建议你使用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)
这基本上应该从你的顶部节点开始,并递归地沿着层次结构创建一个几乎像嵌套字典的数据结构...每个键都是一个父节点,它的键值是一个存储子列表和字典的元组儿童数据。每个子字典都遵循相同的格式 - 子字典是一个键,其子数据位于元组中,等等,直到层次结构的末尾。我使用带有列表和字典的元组,因为字典是无序的...该列表基本上将确保您按照它们来自的顺序重新设置它们的父级,但如果您真的不这样做,您可以只存储字典关心保留订单...
要将其全部恢复,您将执行以下操作:
def reparent(tree):
for parent, data in tree.iteritems():
children, child_tree = data
mc.parent(children, parent)
reparent(child_tree)
reparent(hierarchy_tree)
现在...我还没有测试过这段代码 - 有点是即时编写的,没有将其引入 Maya。我更担心在重新父函数中弹出的错误,因此您可能需要在那里进行尝试/例外,但希望它会跳过任何空的字典项目并让您接近所需的内容 -养育/重新养育。这还假设您的所有节点都有唯一的短名称......
哦,关于递归函数的注意事项...确保它们会在某个时刻终止,否则您可能会陷入无限循环(这应该没问题,因为我们正在跟踪具有明确终点的层次结构 - 即:没有更多子节点)