В Python Maya запускайте команду, даже если объект (часть строки) не существует в сцене - PullRequest
0 голосов
/ 29 сентября 2019

У меня есть этот код

cmds.select('cat', 'dog', 'cow', 'mouse', hierarchy=True, r=True)
min_time = cmds.playbackOptions(q=True, min=True)
max_time = cmds.playbackOptions(q=True, max=True)
cmds.bakeResults(simulation=True, time=(min_time, max_time))

Если, например, объект "собака" не существует, команда не запустится, потому что ищет этот объект. Но я хочу, чтобы команда выбрала все остальные объекты, даже если один из них не существует, чтобы продолжить выпекание с другими. Подводя итог, как я могу сделать, чтобы запустить его, даже если один из перечисленных объектов не существует в сцене? Мне нужен этот скрипт для запуска в разных сценах, где иногда не все эти объекты будут существовать. Спасибо.

PS. эти объекты являются лишь примером, у меня есть около 20 конкретных объектов, которые я всегда должен включать в этот скрипт.

1 Ответ

1 голос
/ 30 сентября 2019

Вы можете использовать cmds.ls для передачи ему серии имен объектов. Он вернет список объектов, найденных в сцене, так что он отфильтрует объекты, которые не существуют. В целом, большинство команд не требуют от вас выбора, поэтому вам вообще ничего не нужно выбирать. Это плохая привычка, так как заставляет сцену перерисовываться, и это лишние накладные расходы, которых можно легко избежать. Вместо этого мы можем передать результаты напрямую cmds.bakeResults:

import maya.cmds as cmds

min_time = cmds.playbackOptions(q=True, min=True)
max_time = cmds.playbackOptions(q=True, max=True)

objs = cmds.ls('cat', 'dog', 'cow', 'mouse')  # Returns a new list of objects it finds.

if objs:  # Only bake if there is at least one object.
    cmds.bakeResults(objs, simulation=True, time=(min_time, max_time))  # Pass new list as first argument.
...