如何使用选定的定位器创建新组并显示图层?玛雅蟒蛇

问题描述 投票:0回答:2

我正在尝试在选定的顶点上创建定位器并使它们成为一个组。然后用该组创建一个新的显示层。 但这在形式之后不起作用,我不知道为什么。 我可以寻求帮助吗?

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' )
python maya layer
2个回答
1
投票

我同意哈吉·克雷的观点。此外,您应该创建一些命名约定或使用长名称,因为它会在每个循环中不断创建 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)

1
投票

您的代码存在一些严重问题并且无法运行:

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 不能拥有具有完全相同名称的对象。

© www.soinside.com 2019 - 2024. All rights reserved.