如何父对象取决于他们在玛雅通过 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”。
我对 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”。