Я пытаюсь получить первый и последний ключевые кадры анимации с помощью Maya Standalone. Если вы не уверены, Maya Standalone означает отсутствие пользовательского интерфейса. Это все чисто командная строка, и Maya не запущена; это означает, что некоторые вещи, которые вы обычно можете делать в Maya, требуют специальных обходных путей. Что я делал, так это использовал maya.mel.eval('setPlaybackRangeToMinMax'), но, к удивлению, к удивлению, это не работает в автономном Maya. Итак, я ищу способ установить минимальный и максимальный диапазон воспроизведения на основе существующей анимации с использованием pymel.core. Пока я не нахожу никакого успеха, и мне интересно, есть ли у кого-нибудь примеры этого. Большое спасибо заранее.
Получение начальных и конечных ключевых кадров анимации в Maya Standalone (без пользовательского интерфейса)
Ответы (2)
Вы можете получить текущие диапазоны сцен с помощью следующего для pymel
или cmds
:
import pymel.core as pymel
pymel.playbackOptions(q=True, min=True)
pymel.playbackOptions(q=True, max=True)
import maya.cmds as cmds
cmds.playbackOptions(q=True, min=True)
cmds.playbackOptions(q=True, max=True)
Запуск его в пакетном режиме или интерфейсе не должен иметь значения. дополнительную информацию см. в документации. Информация.
Редактировать:
Вы пытаетесь получить диапазон первого и последнего ключевого кадра данного объекта? Если это так, вам нужно использовать cmds.keyframe
. Вы можете передать объект, и он вернет список кадров со всех ключей. Оттуда вы можете отсортировать его, а затем получить первый и последний ключи, которые будут диапазоном, который вы ищете:
import maya.cmds
obj = "pSphere1" # Object to check animation range with.
all_keys = sorted(cmds.keyframe(obj, q=True) or []) # Get all the keys and sort them by order. We use `or []` in-case it has no keys, which will use an empty list instead so it doesn't crash `sort`.
if all_keys: # Check to see if it at least has one key.
print all_keys[0], all_keys[-1] # Print the start and end frames
Если вы не хотите проверять все атрибуты, вы можете включить атрибут для проверки ключей. Так, например, предположим, что вы анимировали перевод сферы, вы можете получить все ее ключи от translateX следующим образом: cmds.keyframe("pSphere1.tx", q=True)
.
Хорошо, после небольшого дальнейшего тестирования я смог заставить работать следующее.
# Assuming that I've already imported or opened an animation file and selected the object
import pymel.core as pmc
keyframes = pmc.keyframe(q=True, time=(-9999999, 9999999))
min_max = sorted(keyframes)
min = min_max[0]
max = min_max[-1]
Это успешно вернуло первый и последний ключевые кадры, которые мне нужны для выполнения остальной работы. Я имею дело с данными поставщика MoCap, поэтому мне нужно проверить крайние временные диапазоны, чтобы найти все ключевые кадры, но это работает.