0
randoms = [rand.uniform(-1,1)for items in range(10)]
x= 0
for i in List:
    cm.setKeyframe(at = "%s.cv[x].xValue"%i , t=5, v=rand.choice(randoms))
    x+=1

コードのこの部分を使用したいのですが、Maya はこれを受け入れることができません [x]。誰かがあなたがこれをするべきだと私に言った:

for i in List:
    x = 0
    cvAttrX = i+".cv["+str(x)+"].xValue"
    cm.setKeyframe(at = cvAttrX , t=5, v=rand.choice(randoms))
    x+=1

しかし、私はこのエラーが発生しました:

# Error: line 1: can only concatenate list (not "str") to list
# Traceback (most recent call last):
#   File "<maya console>", line 1, in <module>
#   File "<maya console>", line 7, in randList
# TypeError: can only concatenate list (not "str") to list #

誰かがこれを修正したら、私に深く説明してください。私はこれを非常によく学びたいので、この例も修正してください:

randoms = [rand.uniform(cm.floatField(Ceil, q = True , v = True),0.5)for i in range(30)]
    for objects in myList:
        cm.xform('%s.cv[0]'%objects , r = True , t = [(rand.choice(randoms)),(rand.choice(randoms)),(rand.choice(randoms))])
        cm.xform('%s.cv[1]'%objects , r = True , t = [(rand.choice(randoms)),(rand.choice(randoms)),(rand.choice(randoms))])
        cm.xform('%s.cv[2]'%objects , r = True , t = [(rand.choice(randoms)),(rand.choice(randoms)),(rand.choice(randoms))])
        cm.xform('%s.cv[3]'%objects , r = True , t = [(rand.choice(randoms)),(rand.choice(randoms)),(rand.choice(randoms))])
        cm.xform('%s.cv[4]'%objects , r = True , t = [(rand.choice(randoms)),(rand.choice(randoms)),(rand.choice(randoms))])
        cm.xform('%s.cv[5]'%objects , r = True , t = [(rand.choice(randoms)),(rand.choice(randoms)),(rand.choice(randoms))])
        cm.xform('%s.cv[6]'%objects , r = True , t = [(rand.choice(randoms)),(rand.choice(randoms)),(rand.choice(randoms))])
        cm.xform('%s.cv[7]'%objects , r = True , t = [(rand.choice(randoms)),(rand.choice(randoms)),(rand.choice(randoms))])
        cm.xform('%s.cv[8]'%objects , r = True , t = [(rand.choice(randoms)),(rand.choice(randoms)),(rand.choice(randoms))])
        cm.xform('%s.cv[9]'%objects , r = True , t = [(rand.choice(randoms)),(rand.choice(randoms)),(rand.choice(randoms))])
        cm.xform('%s.cv[10]'%objects , r = True , t = [(rand.choice(randoms)),(rand.choice(randoms)),(rand.choice(randoms))])

これは私のスクリプトの一部です。インクリメントを行うことができれば、例としてこの行を 100 回書きたくありません。そのために intField を作成し、必要な数を決定できます。

私はこのようなことをしたいのですが、方法がわかりません

import maya.cmds as cm
import random as rand
myList = cm.ls(sl =True)
cvList = []
randomList = []
def Lister():
for i in myList:
    cvList.append(cm.ls('%s.cv[:]'%i , flatten = True))
    return cvList
def randomize():
    x = 0 
    randomList.append([rand.uniform(-1,1)for items in range(10)])
    for i in cvList:
        cm.setKeyframe(at = "%s.cv[x].xValue"%i , t=5, v=rand.choice(randoms))
        x+=1
4

2 に答える 2

0
myCurve = cm.ls(sl=1) # Will return [u'curve1']

# Since it returned the object in a list in the next command you have to subscript it.

myCVs = cm.ls(myCurve[0] + ".cv[:]", fl=1)


# Result: [u'curve1.cv[0]',
 u'curve1.cv[1]',
 u'curve1.cv[2]',
 u'curve1.cv[3]',
 u'curve1.cv[4]',
 u'curve1.cv[5]',
 u'curve1.cv[6]',
 u'curve1.cv[7]',
 u'curve1.cv[8]',
 u'curve1.cv[9]',
 u'curve1.cv[10]'] # 

# We do not need to increment through these, flatten takes care of that. We need only iterate through the list of cvs and concatenate the attribute to the name.

for i in myCVs:
    cm.setAttr(i + ".xValue", random.uniform(-1, 1))
    print cm.getAttr(i + ".xValue")

# This will move all the cvs on that curve by a random value between -1 and 1.

-0.233699187896
0.353531892619
0.736778238244
-0.767007983153
0.672321920729
0.0556060597496
-0.340945469966
0.252136119281
-0.396852920849
-0.683451384587
0.926232431375
于 2013-08-01T15:31:04.217 に答える