我正在尝试在选定的顶点上创建定位器并使它们成为一个组。然后用该组创建一个新的显示层。 但这在形式之后不起作用,我不知道为什么。 我可以寻求帮助吗?
import maya.cmds as cmds
sel = cmds.ls(sl=True, fl=True)
for i in range(len(sel)):
pos = cmds.pointPosition(sel[i])
c = cmds.spaceLocator(n="loc01" , p=(0, 0, 0) )
d = cmds.xform(c, a=True, t=(pos[0], pos[1], pos[2]) )
cmds.select(d[0])
g = cmds.group(d, n = 'loc')
cmds.select(g[0])
cmds.createDisplayLayer( noRecurse=True, name='LocLayer' )
我同意哈吉·克雷的观点。此外,您应该创建一些命名约定或使用长名称,因为它会在每个循环中不断创建 loc01。
您应该避免 cmds.select 并只用参数填充命令。
此外,如果您是脚本编写的初学者,您可以对描述您正在执行的操作的每一行进行注释: # Group the locator 'c' ; # 设置定位器位置...等
import maya.cmds as cmds
sel = cmds.ls(sl=True, fl=True)
x=1
for i in sel:
pos = cmds.pointPosition(i)
c = cmds.spaceLocator(n="loc{0}".format(x) , p=(0, 0, 0) )
x+=1
d = cmds.xform(c[0], a=True, t=(pos[0], pos[1], pos[2]) )
g = cmds.group(c, n = 'loc_grp_{0}'.format(c[0][-2:]))
dspL = cmds.createDisplayLayer( noRecurse=True, name='LocLayer_{0}'.format(c[0]))
cmds.editDisplayLayerMembers(dspL, g, noRecurse=True)
您的代码存在一些严重问题并且无法运行:
d = cmds.xform(c, a=True, t=(pos[0], pos[1], pos[2]) )
xform()
命令不返回任何内容,它仅更改对象。所以 d 是您在以下代码中尝试使用的 None
。
无需选择任何内容,您始终可以使用对象名称作为您在此处尝试执行的操作的参数:
g = cmds.group(d, n = 'loc')
当然使用 None
d
参数。
并且您尝试为每个定位器创建一个组,并且每个组都应该具有相同的名称,这也会失败,因为 Maya 不能拥有具有完全相同名称的对象。