如何父对象取决于他们在玛雅通过 python

how to parent objects depends on their in maya via python

我对 Python 有点陌生,我正在尝试根据对象的名称在 Maya 中设置对象的父级。我在场景 "spineA_jnt"、"spineB_jnt"、"spineC_jnt" 和 "spineA_jb"、"spineB_jb"、"spineC_jb" 中有示例。如何 select 它们全部以及父级 "spineA_jnt" 到 "spineA_jb" 等等。任何提示将不胜感激,谢谢。

您可能会使用字典:

spines = "spineA_jnt", "spineB_jnt", "spineC_jnt", "spineA_jb", "spineB_jb", "spineC_jb"
def group_spines(spines):
    spine_dict = {}
    for spine in spines:
        parts = spine.split('_')
        if parts[0] in spine_dict:
            spine_dict[parts[0]].append(spine)
        else:
            spine_dict[parts[0]]=[spine]
    return spine_dict

spine_dict = group_spines(spines)
# results of group_spines function
{'spineA': ['spineA_jnt', 'spineA_jb'],
 'spineB': ['spineB_jnt', 'spineB_jb'],
 'spineC': ['spineC_jnt', 'spineC_jb']}

final_result = dict(spine_dict.values())
# now we have parented the spine parts together 
{'spineA_jnt': 'spineA_jb',
 'spineB_jnt': 'spineB_jb',
 'spineC_jnt': 'spineC_jb'}

看起来你可以利用你的名字来发挥你的优势,因为它们共享相同的名字但有不同的后缀,所以你不需要 hard-code 个字符串。

下面是将 _jnt 对象作为 _jb 的父对象的示例。

import maya.cmds as cmds

# Use * as a wildcard to get all spine joints.
jnts = cmds.ls("spine*_jnt")

for obj in jnts:
    # Build name to the object we want it to parent to.
    parent_obj = obj.replace("_jnt", "_jb")

    # But skip it if it doesn't exist.
    if not cmds.objExists(parent_obj):
        continue

    # Finally parent _jnt to _jb
    cmds.parent(obj, parent_obj)

如果您想使用不同的名称,您可以随时更改“_jnt”或“_jb”。