如果您还没有的话,我建议您使用python-
您可以相互使用几乎任何数据类型,以在单个数据结构中获得所需的数据。这将比创建一个长字符串并稍后再将其重新分配容易得多。
收集层次结构数据:
import maya.cmds as mcdef 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遵循相同的格式-
子是键,其子数据在元组等中,等等,等等,直到层次结构的末尾。我正在使用具有列表和字典的元组,因为字典是无序的…列表基本上可以确保您按照它们来自的顺序重新父它们,但是如果您不是真的,可以只存储字典关心保留订单…
要将其作为父项,您将执行以下操作:
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项,并使您接近需要输入的内容。育儿/重新育儿。这也假设您所有节点都有唯一的短名称…
哦,关于递归函数的说明…请确保它们会在某个时刻终止,否则您可能会陷入无限循环中(这很好,因为我们正在跟踪具有确定末端的层次结构,即:否更多子节点)



