# -*- coding:utf-8 -*-
# 导入maya命令模块
from maya import cmds
# 列一个字典,给物体种类相应的尾缀
SUFFIXES = {
"mesh": "geo",
"joint": "jnt",
"camera": None,
}
DEFAULT = "grp"
def rename(activate=False):
"""
这个函数是用来进行重命名的
Args:
activate: 是否(执行函数)要对选择的物体进行重命名
Returns:重命名后的物体列表
"""
# 在激活状态下,没有选择物体,则返回空列表,选择了物体则返回物体列表
objects = cmds.ls(selection=activate, dag=True, long=True)
# 如果没有选择物体,则弹出警告
if activate and not objects:
raise RuntimeError("you don't have any objects selected")
# 将物体根据名称路径的长短进行排序,因为要先修改子物体再修改父物体,所以顺序进行调换
objects.sort(key=len, reverse=True)
# 对列表中的每一个物体进行重命名
for obj in objects:
shortName = obj.split("|")[-1]
# maya每个物体是由tranform节点和形状节点组成,获取类型需要获取形状节点的类型,所以要取其子物体类型
children = cmds.listRelatives(obj, children=True, fullPath=True) or []
if len(children) == 1:
ObjectType = cmds.objectType(children[0])
else:
ObjectType = cmds.objectType(obj)
# 根据key名来获取对应的value,如果没有则返回DEFAULT
suffix = SUFFIXES.get(ObjectType, DEFAULT)
# 如果物体是摄像机,就跳过本次循环
if not suffix:
continue
# 如果已经有尾缀了,就跳过本次循环
if obj.endswith(suffix):
continue
newName = "%s_%s" % (shortName, suffix)
# 将物体重命名
cmds.rename(obj, newName)
# 替换object列表中obj的名称
index = objects.index(obj)
objects[index] = obj.replace(shortName, newName)
return objects