如何生成具有随机细分数量的随机多边形图元?

时间:2019-04-07 20:55:34

标签: python maya

我试图每次生成带有随机细分数的随机多边形图元。

如果我的有限知识是正确的,我不能只生成随机网格。我将需要收集所有可能产生的网格类型,然后将其生成一个数字数组,然后提取一个代表该网格的随机数。

但是,每个网格物体都有自己细分的不同命令/方式。

import random

object = cmds.polySphere ( r=10, sx=random.randrange(10, 100), sy=random.randrange(10,100), name='mySphere#' )

我可以分别生成每个网格并根据特定命令将其随机化,但是如何获取它来生成具有随机数分割的立方体,圆锥体或其他任何图元?

1 个答案:

答案 0 :(得分:2)

创建基元的有趣之处在于它们的返回值是一致的。他们总是返回一个变换和一个形状,例如:

cmds.polyCube()
# Result: [u'pCube1', u'polyCube1'] # 

cmds.polyCone()
# Result: [u'pCone1', u'polyCone1'] # 

cmds.polySphere()
# Result: [u'pSphere1', u'polySphere1'] # 

幸运的是,每个除法属性中都有单词"subdivision",因此我们可以为其中包含该单词的任何属性设置随机值。

知道了这一点,我们可以选择一个随机图元来创建,然后遍历其形状的属性以设置一个随机细分:

import random
import maya.cmds as cmds


# Define a list of all primitive functions we can create from.
primitives = [cmds.polySphere, cmds.polyCube, cmds.polyCylinder, cmds.polyCone, cmds.polyTorus, cmds.polyPlane]

# Pick a random primitive and create it.
mesh_type = random.choice(primitives)
transform, shape = mesh_type()

# Set a random value on any attribute that has subdivision in its name.
attrs = cmds.listAttr(shape, keyable=True)
for attr in attrs:
    if "subdivision" in attr:
        cmds.setAttr(shape + "." + attr, random.randrange(10, 100))