Как создать случайный полигональный примитив со случайным количеством подразделений?

Я пытаюсь создать случайный полигональный примитив со случайным количеством подразделений каждый раз.

Если мои ограниченные знания верны, я не могу просто создать случайную сетку. Мне нужно будет собрать все типы мешей, которые я могу создать, в массив чисел, а затем выбрать случайное число, представляющее этот меш, и создать его.

Однако у каждой сетки есть своя команда/способ разделения.

import random

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

Я могу создать каждую сетку отдельно и рандомизировать ее на основе определенных команд, но как мне заставить ее создавать куб, конус или любой другой примитив со случайным числом делений?

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
0
204
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Интересная вещь при создании примитивов заключается в том, что их возвращаемые значения непротиворечивы. Они всегда возвращают преобразование и форму, например:

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

Привет, @Green-cell! Не уверен, что вы увидите этот комментарий, но мне было интересно, как мне создать список этих мешей, чтобы отслеживать их количество в сцене? Это не может быть так просто, как примитивы = cmds.ls(‘myMesh’)? Таким образом, я мог контролировать их количество в сцене и удалять их при необходимости. Спасибо.

boomstick 08.04.2019 16:37

Вы можете перечислять объекты и фильтровать по типу, поэтому, если вы имеете в виду все сетки, которые вы можете сделать cmds.ls(type = "mesh"), или если вы хотите, чтобы определенные типы вы могли сделать cmds.ls(type = "polySphere")

Green Cell 08.04.2019 18:04

Другие вопросы по теме