如何使用选定的定位器创建一个新的组和显示层?玛雅 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)
我正在尝试在选定的顶点上创建定位器并将它们组成一个组。然后用该组创建一个新的显示层。 但这在 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)