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 に答える