0

这是我正在运行的代码,但它显示“这些属性无效”,我如何在场景中列出属性/变换以便正确列出它们。我尝试使用 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)
4

1 回答 1

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)

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

于 2013-11-10T21:51:29.470 回答