Mir*_*302 2 python parent-child hierarchy maya mel
我有一个层次结构,我需要:
我知道如何确定地打破事物,并且对当它们的层次结构扁平时我需要做的事情有计划。问题是我如何养育他们?
细节
这与我之前的问题有关:
在具有动画子项的父对象上冻结缩放变换(MAYA MEL/Python 脚本)
我需要在层次结构中的所有节点上冻结比例变换。问题是节点上有平移动画,如果我尝试在父节点上冻结缩放,它的子动画会变得很奇怪。但是看起来有一个解决方案,但我需要帮助来实现它。我想要:
当我手动执行时它可以工作,所以一切都应该没问题。但是,如果您认为有更好的方法来实现我的主要目标,请告诉我。
所以,我一直在考虑将所有节点写入一个字符串并从那里调用它们,但我不知道如何处理分支。例如:如果它是一个无分支的层次结构(一直是一个父母和一个孩子),我可以用两个来称呼他们,然后很容易地称呼他们为父母。但是分支使字符串中的名称像“父母,孩子,孩子,孩子,父母......”
可能是我想的太多,方向错了。有任何想法吗?
如果您还没有使用 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)
Run Code Online (Sandbox Code Playgroud)
这应该基本上从你的顶级节点开始,并递归地沿着层次结构向下创建一个数据结构,几乎就像嵌套的字典......每个键都是一个父节点,它的键值是一个元组,它存储了一个子项列表和一个字典儿童数据。每个子字典都遵循相同的格式 - 子是一个键,它的子数据在一个元组中,等等等等,直到层次结构的末尾。我正在使用带有列表和字典的元组,因为字典是无序的......该列表基本上可以确保您按照它们来自的相同顺序重新设置它们的父级,但是如果您不是真的可以存储字典关心保留订单...
要将其全部归还,您将执行以下操作:
def reparent(tree):
for parent, data in tree.iteritems():
children, child_tree = data
mc.parent(children, parent)
reparent(child_tree)
reparent(hierarchy_tree)
Run Code Online (Sandbox Code Playgroud)
现在...我还没有测试过这段代码——在没有将它引入 Maya 的情况下即时编写的。我更关心在重新父函数中弹出的错误,所以你可能需要尝试/除了在那里,但希望它会跳过任何空的 dict 项目并让你接近你需要的输入 -养育/重新养育。这也假设您的所有节点都有唯一的短名称...
哦,关于递归函数的说明......确保它们会在某个时刻终止,否则你会陷入无限循环(这应该没问题,因为我们正在追踪一个有明确结束的层次结构 - 即:没有更多子节点)
| 归档时间: |
|
| 查看次数: |
2034 次 |
| 最近记录: |