Python缺少属性/属性无效

时间:2013-11-09 13:44:01

标签: python maya

这是我正在运行的代码,但它说“这些属性无效”,如何在场景中列出属性/变换,以便我可以正确列出它们。我尝试使用cmds.ls(type ='transform')但它仍然不起作用。任何帮助表示赞赏。

import maya.cmds as cmds
def changeXtransformVal(myList, percentage=2.0):

    """
    Changes the value of each transform in the scene by a percentange.
    Parameters:
    percentage - Percentange to change each transform's value. Default value is 1.
    Returns:
    Nothing.
    """
    # The ls command is the list command. It is used to list various nodes
    # in the current scene. You can also use it to list selected nodes.
    transformInScene = cmds.ls(type='transform')
    found = False
    for thisTransform in transformInScene:
        if thisTransform not in ['front','persp','side','top']:
            found = True
            break
        else:
             found = False
    if found == False:
           sphere1 = cmds.polySphere()[0]
           cmds.xform(sphere1, t = (0.5, 0.5, 0.5))
    transformInScene = cmds.ls(type='transform')
    # If there are no transforms in the scene, there is no point running this script
    if not transformInScene:
          raise RuntimeError, 'There are no transforms in the scene!'
    badAttrs = list()
    # Loop through each transform
    for thisTransform in transformInScene:
          if thisTransform not in ['front','persp','side','top']:
              allAttrs = cmds.listAttr(thisTransform, keyable=True, scalar=True)
          allAttrs = [ i for i in badAttrs if i != "visibility" ]
          print allAttrs     
    for attr in myList:
               if attr in allAttrs:
                   currentVal = cmds.getAttr( thisTransform + "." + attr )
                   newVal = currentVal * percentage
                   cmds.setAttr(thisTransform + "." + attr, newval)
                   print "Changed %s. %s from %s to %s" % (thisTransform,attr,currentVal,newVal)
               else:
                   badAttrs.append(attr)

    if badAttrs:
        print "These attributes %s are not valid" % str()

myList = ['sx', 'sy', 'tz', 'ty', 'tx']
changeXtransformVal(myList, percentage=2.0)

1 个答案:

答案 0 :(得分:0)

您在多个地方都有一个简单的缩进错误。最后一个(第35行):

for attr in myList:

代码级别太低。 <第31行的代码> :

if thisTransform not in ['front','persp','side','top']:
     allAttrs = cmds.listAttr(thisTransform, keyable=True, scalar=True)

所有都应该在if级别。这也没有意义:

allAttrs = [ i for i in badAttrs if i != "visibility" ]

缩进错误所有代码之后应该在if的级别上。这是再次写的中心部分:

import maya.cmds as cmds
def changeXtransformVal(myList, percentage=2.0):
    transformInScene = [i for i in cmds.ls(type='transform') if i not in ['front','persp','side','top'] ]
    myList = [i for i in myList if i not in ['v','visibility']]
    for thisTransform in transformInScene:
        badAttrs = []
        for attr in myList:
            try:
                currentVal = cmds.getAttr( thisTransform + "." + attr )
                newVal = currentVal * percentage
                cmds.setAttr(thisTransform + "." + attr, newVal)
                print "Changed %s. %s from %s to %s" % (thisTransform,attr,currentVal,newVal)
            except TypeError:
                badAttrs.append(attr)
        if badAttrs:
            print "These attributes %s are not valid" % str(badAttrs)

myList = ['sx', 'sy', 'tz', 'ty', 'tx']
changeXtransformVal(myList, percentage=2.0)

请注意,考虑将床垫的循环移动到函数定义中,嵌套有点太深了。

相关问题