如何生成具有随机细分数的随机多边形基元?
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))
我试图生成一个随机的多边形图元,每次都有随机的细分数。
如果我有限的知识是正确的,我不能只生成随机网格。我需要将我可以生成的所有类型的网格收集到一个数字数组中,然后拉出一个代表该网格的随机数并生成它。
但是每个网格都有不同的 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))