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

How to spawn a random polygon primitive with random number of subdivisions?

我试图生成一个随机的多边形图元,每次都有随机的细分数。

如果我有限的知识是正确的,我不能只生成随机网格。我需要将我可以生成的所有类型的网格收集到一个数字数组中,然后拉出一个代表该网格的随机数并生成它。

但是每个网格都有不同的 command/way 细分自身。

import random

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

我可以单独生成每个网格并根据特定命令将其随机化,但我如何让它生成立方体、圆锥体或任何其他具有随机分割数的基本体?

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

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))