2013-07-15 74 views
1

我的問題是我如何從Python中的列表中選擇隨機數字的點(例如在這個腳本中)格子或頂點的對象或面或一切或完全隨機選擇。maya-python隨機選擇

請首先解釋此腳本隨機選擇

cm.select( 'ffd1Lattice.pt [:] [:] [:]',R = TRUE)

和請之後解釋隨機選擇列表和每種方法。

問候

import maya.cmds as cm 
import sys 
import random as rand 

myList = cm.ls (sl = True) 


def softIt(*arg): 
    cm.polySmooth(c = True , dv = 1 , kb = False) 

def randomize(*arg): 
    myList = cm.ls (sl = True) 
    for i in myList: 
     cm.lattice(dv=(4, 5, 4), oc=True) 
     cm.select('ffd1Lattice.pt[:][:][:]',r=True) 
     cm.xform(r = True , t = [ rand.uniform(-1,1) , rand.uniform(-1,1) , rand.uniform(-1,1)] ) 

cm.headsUpMessage('this script just work with one object at time', verticalOffset=250) 


cm.window(t = 'Randomaize' , s = False) 
cm.columnLayout() 
cm.button(l = 'do it' , c = randomize , w = 200) 
cm.button(l = 'soft it' , c = softIt , w = 200) 
cm.showWindow() 

sys.stdout.write("this script just work with one object at time\t\"script by Amin khormaei\"") 

回答

0

如果你不理解的是小片段,那麼你應該先了解列表切片的作品。 Theselinks應該指向正確的方向。

0

行:

cm.select('ffd1Lattice.pt[:][:][:]',r=True) 

說基本上是 '在晶格中選擇所有控制點'。然而,在Maya 2011(稍後不知道)中會出現一個錯誤,它會嘗試選擇不存在的點。一個1x1x1格應該有8個號碼的所有三個維度0-1 - 但使用您的片段,然後對結果調用LS將報告

// result: 'ffdLatticeShape.pt[0:2][0:2][0:2]' // 

...至少它在我的機器 - 這應該是不可能的。我會避免使用帶格子的[:]格式(實際上[*]格式也有相同的錯誤。然而,它對正常頂點工作正常。

對於您的特定應用程序,您是否希望以相同的隨機數量移動所有點 - 這就是您的片段所暗示的 - 或者是所有點的不同隨機數?或隨機點的隨機集合?代碼對於每個備選方案都會有所不同。