我试图让这个重命名工作,因为定位器是复制和移动到关节的位置。 例如,如果我有一个大腿关节、膝盖关节、脚踝关节,则创建的定位器将命名为loc_nghigh_nt、loc_膝盖_jnt等
但是它对我不起作用,因为我收到了诸如# ValueError: No object matches name: loc_0 #
之类的错误
不用说,定位器可以被创建,但它不在关节的位置。
另外,我可以问一下是否可以为all
关节创建定位器?目前,它只为大腿和膝盖而不是脚踝创建
import maya.cmds as cmds
def createLoc():
cmds.select( cmds.listRelatives( type = 'joint', fullPath = True, allDescendents = True ) )
cmds.select( cmds.listRelatives( parent = True, fullPath = True ) )
sel = cmds.ls ( selection = True, type = 'joint' )
if not sel :
cmds.warning( "Please select a joint / No joints in selection " )
return
locGrp = cmds.group(n="loc_Grp_#", em=True)
cmds.addAttr ( locGrp, attributeType = 'double' , longName = 'locScale' , defaultValue = 1.0 , keyable = 1 )
masterLoc = cmds.spaceLocator(n="loc_0")[0]
cmds.parent( masterLoc, locGrp )
for attr in ["scaleZ", "scaleY", "scaleX"]:
cmds.connectAttr ( locGrp + ".locScale" , "%s.%s" % ( masterLoc, attr ) )
for jnt in sel:
print jnt
coords = cmds.xform ( jnt, query = True, worldSpace = True, pivots = True )[0:3]
cmds.select( masterLoc, replace = True )
cmds.duplicate( returnRootsOnly = True , inputConnections = True )
# This is where the errors starts
#cmds.rename(str(masterLoc), ("loc_" + str(sel)))
cmds.move( coords[0], coords[1], coords[2], rotatePivotRelative = True )
下面是您的代码片段,其中包含一些修改和更正以使其正常工作。在
在前两个命令。选择()调用,我添加了add=True标志。没有那面旗帜,命令。选择()默认情况下将假定replace=True。这就是为什么你的根关节被忽略了。在
在for循环中,masterLoc被复制了N次,其中N是关节的数目,因此产生了N+1个定位器(包括masterLoc)。所以我添加了is_root_loop标志来检查循环是否是第一次运行。在这个运行过程中,我们操纵masterLoc本身(不复制它),重命名masterLoc并存储名称。在这个循环的第二次迭代中,我们使用这个masterLoc来复制和重命名复制的定位器,正如您之前所写的那样。在
我做的另一个更改是存储重复定位器的名称
^{pr2}$用这个来重命名。这就是您得到错误的地方,因为您试图在每次迭代中重命名masterLoc。在
另外,捕捉命令的返回结果总是很重要的,比如命令。重复以及命令.重命名,因为它们指定的名称可能并不总是如预期的那样,因为如果名称与场景中的其他内容发生冲突,Maya将在新名称的末尾附加一个数字或增加该数字。在
我希望这有帮助!在
相关问题 更多 >
编程相关推荐