其实这些代码大部分是从 chatgpt 中生成的。
骨骼命名
import maya.cmds as cmdsdef rename_bones():selected_bones = cmds.ls(type="joint") # 获取选中的骨骼for bone in selected_bones:if "_" in bone:new_name = bone.split("_")[0] # 获取下划线前面的部分作为新的骨骼名称cmds.rename(bone, new_name) # 重命名骨骼rename_bones()
层级 rename
import maya.cmds as cmdsdef rename_bones_with_suffix(bone, suffix):children = cmds.listRelatives(bone, children=True, type="joint") or [] # 获取骨骼的子骨骼for child in children:rename_bones_with_suffix(child, suffix) # 递归调用,处理子骨骼new_name = bone + suffix # 添加结尾字符串cmds.rename(bone, new_name) # 重命名骨骼print("将骨骼 {} 重命名为 {}".format(bone, new_name))selected_bones = cmds.ls(selection=True, type="joint") # 获取选中的骨骼for bone in selected_bones:rename_bones_with_suffix(bone, "_R")
属性赋值
左手旋转复制到右手上
import maya.cmds as cmdsdef flip_z_rotation(source_bone, target_bone):# 获取源骨骼的旋转值source_rotation = cmds.getAttr(source_bone + ".rotate")[0]# 翻转旋转值的Z轴flipped_rotation = [source_rotation[0], source_rotation[1], -source_rotation[2]]# 将翻转后的旋转值赋值给目标骨骼cmds.setAttr(target_bone + ".rotate", flipped_rotation[0], flipped_rotation[1], flipped_rotation[2], type="double3")print("将骨骼 {} 的旋转值翻转并赋值到骨骼 {}".format(source_bone, target_bone))all_bones = cmds.ls(type="joint") # 获取所有骨骼for bone in all_bones:if "_L" in bone:# 替换"_L"为"_R"的骨骼target_bone = bone.replace("_L", "_R")# 检查替换后的骨骼是否存在if cmds.objExists(target_bone):flip_z_rotation(bone, target_bone)