【问题标题】:How to make a new group and display layer with selected locators? Maya Python如何使用选定的定位器创建新组和显示层?玛雅蟒蛇
【发布时间】:2018-01-05 05:36:07
【问题描述】:

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

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


    【解决方案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)
    

    【讨论】:

      【解决方案2】:

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

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

      xform() 命令不会返回任何内容,它只会更改对象。所以 d 是None 您尝试在以下代码中使用的内容。 无需选择任何内容,您始终可以使用对象名称作为您在此处尝试执行的操作:

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

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

      【讨论】:

        猜你喜欢
        • 2018-07-26
        • 1970-01-01
        • 2021-12-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多