gpt4 book ai didi

python - 在 Maya python 中将重复列表 "L"重命名为 "R"

转载 作者:行者123 更新时间:2023-11-30 22:32:59 24 4
gpt4 key购买 nike

我想要做的是将 Controller 复制到另一侧并将 _L 重命名/替换为 _R。因此,我只需选择 Controller ,它将创建一个组,然后创建另一个组以将其镜像到右侧,并将另一个组重命名为 _R。然后将第一组取消父级到世界。这就是我想做的。但我坚持重命名。我知道我必须以相反的顺序对列表进行排序才能重命名它,但每当我这样做时,玛雅都会说:

多个对象与名称匹配

重复的对象具有不同的父名称和相同的子名称。请告诉我应该怎么做以及我缺少什么。

import maya.cmds as cmds

list = cmds.ls(sl=1)
grp = cmds.group(em=1, name=("grp" + list[0]))

# creating constraint to match transform and deleting it
pc = cmds.pointConstraint(list, grp, o=[0,0,0], w=1)
oc = cmds.orientConstraint(list, grp, o=[0,0,0], w=1)
cmds.delete(pc, oc)

# parenting it to controller
cmds.parent(list, grp)

# creating new group to reverse it to another side
Newgrp = cmds.group(em=1)
cmds.parent(grp, Newgrp)
Reversedgrp = cmds.duplicate(Newgrp)

cmds.setAttr(Reversedgrp[0] +'.sx', -1)

selection = cmds.ls(Reversedgrp, long=1)
selection.sort(key=len, reverse=1)

最佳答案

在 Maya 中重命名非常烦人,因为名称是对象本身的唯一句柄。

通常的技巧基本上是:

  1. 使用 rr 标志复制项目,这样您就只能获得顶部节点
  2. listRelativesadfull 标志一起使用,以长格式获取重复顶部节点的所有子节点,如 |父|子|孙。在此表单中,名称上方的整个层次结构按顺序列出(您也可以在对象上使用 cmds.ls(l=True) 获取此表单)
  3. 对该列表进行排序,然后反转。这会将最长的路径名放在前面,因此您可以从叶节点开始并向上移动
  4. 现在循环遍历项目并应用您的重命名模式

像这样,尽管您可能想用您控制的内容替换此处的选择:

import maya.cmds as cmds
dupes = cmds.duplicate(cmds.ls(sl=True), rr=True) # duplicate, return only roots
dupes += cmds.listRelatives(dupes, ad=True, f=True) # add children as long names
longnames = cmds.ls(dupes, l=True) # make sure we have long name for root
longnames.sort() # usually these sort automatically, but's good to be safe
for item in longnames[::-1]: # this is shorthand for 'walk through the list backwards'
shortname = item.rpartition("|")[-1] # get the last bit of the name
cmds.rename(item, shortname.replace("r","l")) # at last, rename the item

关于python - 在 Maya python 中将重复列表 "L"重命名为 "R",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45296681/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com