【问题标题】:Maya returning TypeError: 'NoneType' object is not iterableMaya 返回 TypeError:“NoneType”对象不可迭代
【发布时间】:2020-03-11 06:12:53
【问题描述】:

我是 Python 的新手,我正在努力让我在 Maya 中的生活更轻松。我想我会尝试为我经常做的事情编写简单的循环。例如,重置所有枢轴。当我尝试运行它时,我收到此错误“# Error: TypeError: file line 6: 'NoneType' object is not iterable #”

from maya import cmds

def resetPivots():
    selectAll = cmds.select(allDagObjects = True)

    for obj in selectAll:
        cmds.manipPivot(reset = True)

resetPivots()

任何帮助和解释将不胜感激。

:编辑:

事实证明,cmds.select(allDagObjects=True) 有一个 None 返回值,但您可以将选择输入到列表中。我已将代码更新为此,但我又卡住了:

from maya import cmds

def resetPivots(selection=False):
    cmds.select(all = True)
    selectAll = cmds.ls(sl = True, dag = True)
    print(selectAll)
    for obj in selectAll:
        center=cmds.objectCenter(obj, gl = True)
        print(center)
        cmds.manipPivot(p = (center))

resetPivots()

所以,我得到了所有对象中心的坐标,但是当列表传递给 cmds.manipPivot() 时什么都没有发生

此外,对于我想要做的事情来说,这是否会变得太多?

【问题讨论】:

  • selectAll 值为无。检查为什么 cmds.select(allDagObjects=True) 什么都不返回。

标签: python maya


【解决方案1】:

我将您的 manippivot 替换为 xform 并过滤了您的 selectAll 以仅采用具有形状的对象,您可以扩展为变换或其他插件形状

from maya import cmds


def resetPivots(selection=False):
    if selection:
        selectAll = cmds.ls(sl = True, dag = True, type='shape')
    else:
        selectAll = cmds.ls(dag = True, type='shape')        
    for obj in selectAll:
        center = cmds.objectCenter(obj, gl = True)
        obj_tr = cmds.listRelatives(obj, p=True)[0]
        cmds.xform(obj_tr, scalePivot=center, ws=True)
        cmds.xform(obj_tr, rotatePivot=center, ws=True)

resetPivots()

【讨论】:

  • 这很有意义,看来我使用了错误的命令。谢谢!
猜你喜欢
  • 2015-12-24
  • 2012-08-25
  • 1970-01-01
  • 2017-08-29
  • 2016-08-30
  • 2014-11-21
相关资源
最近更新 更多