如何使用选定的定位器创建一个新的组和显示层?玛雅 Python

How to make a new group and display layer with selected locators? Maya Python

我正在尝试在选定的顶点上创建定位器并将它们组成一个组。然后用该组创建一个新的显示层。 但这在 form 之后不起作用,我不知道为什么。 我能得到一些帮助吗?

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' )

"但这不起作用..." 对寻找解决方案没有帮助,请在此处查看 https://whosebug.com/help/mcve。 但是无论如何你的代码有一些严重的问题并且无法工作:

d = cmds.xform(c, a=True, t=(pos[0], pos[1], pos[2]) )

xform()命令不return任何东西,它只改变对象。所以 d 是 None 您尝试在以下代码中使用的内容。 不需要 select 任何东西,你总是可以使用对象名称作为你在这里尝试做的事情的补充:

g = cmds.group(d, n = 'loc')

当然有None d参数。 并且您正在尝试为每个定位器创建一个组,并且每个组都应该具有相同的名称,但同样会失败,因为 Maya 不能拥有名称完全相同的对象。

我同意 haggi krey 的观点。此外,您应该创建一些命名约定或使用长名称,因为它会在每个循环中继续创建 loc01。

你应该避免 cmds.select 并且只用参数填充命令。

此外,如果您是脚本编写的初学者,您可以将描述您正在做的事情的每一行注释为: # Group the locator 'c' ; # 设置定位器位置 ...etc

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)