如果您还没有使用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)
这基本上应该从你的顶部节点开始,递归地向下层次结构,以创建一个几乎类似于嵌套dicts的数据结构。。。每个键都是一个父节点,其键值是一个元组,该元组存储子节点的列表和子数据的dict。每个子dict遵循相同的格式-子对象是一个键,它的子数据在元组中,等等,等等,直到层次结构的末尾。因为dict是无序的,所以我用的是一个列表和一个dict的元组。。。这个列表基本上可以确保你按照它们来自的顺序对它们进行再父代,但是如果你真的不在乎保留顺序,你可以只存储dict。。。在
若要将其全部还原,请执行以下操作:
^{pr2}$
现在。。。我还没有测试过这段代码-在没有把它引入Maya的情况下就编写了它。我更关心re parent函数中突然出现的错误,因此您可能需要尝试一下/except,但希望它可以跳过任何空的dict项,让您接近您需要的in parenting/re parenting。这也假设所有节点都有唯一的短名称。。。在
哦,关于递归函数。。。确保它们会在某个点终止,否则你会陷入一个无限循环中(这应该很好,因为我们跟踪的层次结构有一个明确的结束-即:没有更多的子节点)