1

我的问题是如何从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\"")
4

2 回答 2

0

该行:

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

基本上说“选择格子中的所有控制点”。然而,似乎有一个错误,在 Maya 2011 中(以后不知道),它将尝试选择不存在的点。一个 1x1x1 的格子应该在所有三个维度上都有 8 个点,编号为 0-1 - 但是使用您的代码段,然后在结果上调用 ls 会报告

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

...至少它在我的机器上是这样的——这应该是不可能的。我会避免使用带有格子的 [:] 表单(实际上 [*] 表单也有相同的错误。哎哟。)。但是,它适用于常规顶点。

对于您的特定应用程序,您是想将所有点移动相同的随机量 - 这是您的代码段所暗示的 - 还是将所有点移动不同的随机量?还是随机数量的随机点集?每个替代方案的代码都会有所不同。

于 2013-07-15T20:59:51.247 回答
0

如果您不了解那个小片段,那么您应该首先了解列表切片的工作原理。这些 链接应该为您指明正确的方向。

于 2013-07-15T05:11:33.937 回答