Я чувствую, что вы идете по поводу всего этого процесса немного неправильно, и я хотел бы уточнить, если вам интересно, но сейчас вот исправление для вашей ситуации l oop:
def deleteWasteGrp(*args):
curveList = cmds.ls('curve*',transforms=True)
try:
cmds.delete(curveList)
print('Deleted the following objects: {}'.format(curveList))
except Exception as e:
cmds.warning('Cleanup failed: {}'.format(e))
Метод cmds.delete
принимает параметр списка, который в вашем случае является самым простым способом выполнить работу. Имейте в виду, что когда вы удаляете родительский объект, вы также удаляете его дочерние объекты, поэтому в зависимости от ваших обстоятельств удаление объектов может зависеть от порядка c.
Бросать любые вызовы с "вероятностью сбоя" в попытке / Кроме того, предложение, как правило, является хорошей идеей, поскольку позволяет корректно обработать ошибку. Однако будьте осторожны, чтобы не подавлять его и просто двигаться дальше - вам по крайней мере нужно адекватно предупредить пользователя.
Наконец, ваш метод buildExamples
, скорее всего, потерпит неудачу, если вы запустите его больше, чем один раз. Потому что вы обращаетесь к объектам строковыми литералами (жестко закодированными именами) вместо того, чтобы отслеживать их фактические имена (и полный путь). Скорее всего, в конечном итоге вы увидите эту ошибку:
# Error: ValueError: file <maya console> line ??: More than one object matches name: demoJoint1 #
Редактировать: некоторые уточнения по запросу
Команды cmds.group
и cmds.joint
возвращают строковое значение, указывающее фактическое имя созданного объекта (в режиме создания). Обычно хорошей идеей является сохранение этого значения на тот случай, если Maya решит назвать ваш объект немного иначе, чем вы ожидаете, обычно, когда есть наименование cla sh. Например:
print cmds.group(name='test', world=True, empty=True)
# Returns: test
print cmds.group(name='test', world=True, empty=True)
# Returns: test1
Пример того, как захватывать имена объектов при их создании. Я объединил ваши пять одинаковых (i sh) вызовов для создания соединений и кривых в этом l oop:
import maya.cmds as cmds
topGroupName = 'exampleGroup'
actualTopGroupName = None
# Create top level group
actualTopGroupName = cmds.group(n=topGroupName, world=True, empty=True)
# Loop through 5 times and do the following:
for i in range(5):
# PS: hash character in name indicates "next available number"
cmds.select(clear=True)
jnt = cmds.joint(n='demoJoint#')
crv = cmds.group(n='curve#',world=True,empty=True)
cmds.parent(crv, jnt)
cmds.parent(jnt, actualTopGroupName)
Пример того, как сузить, какие объекты нужно искать с помощью cmds.ls
:
topGroupName = 'exampleGroup'
print cmds.ls('|{}*|*|curve*'.format(topGroupName))
# Returns: [u'curve1', u'curve2', u'curve3', u'curve4', u'curve5']
# The string .format() expression is just a dynamic way of writing this:
# |exampleGroup*|*|curve*
Вертикальные каналы (|
) указывают уровни в иерархии, подобно тому, как косые черты (/
) работают в URL. А звездочки / подстановочные знаки (*
) обозначают «любой символ или ни одного».
Надеюсь, это немного поможет вам на вашем пути.