Как вы можете проверить, является ли фрейм ключевым кадром в Maya с Python? - PullRequest
0 голосов
/ 11 октября 2019

Мне нужно циклически проходить через каждый кадр анимации в Maya и создавать два массива, одно из значений данного атрибута в каждом отдельном кадре и одно из этих значений только в ключевых кадрах. Проблема в том, что я не могу понять, как заставить майю задавать вопрос "является ли текущий кадр ключевым кадром для этого атрибута" в python. Я выяснил это в MEL, поэтому, возможно, кто-то может помочь мне преобразовать его.

Вот цикл в MEL:

global proc int keyExistsAtFrame(   int $frameNum,
                    string $object,
                    string $attribute)
{
    int $value;
    selectKey -clear;
    $value = `selectKey -add -k -t $frameNum ($object + "." + $attribute)`;

    if($value)
        return 1;
    else
        return 0;
}

for( $i=1; $i<120; ++$i )
{
    currentTime -edit $i;
    if (keyExistsAtFrame($i, "DD_headRoll_ctrl", "rotateZ"))
    {
        print "key exists at ";
        print $i;
        print "\n";
    }
}

Как я могу реализовать это в своем скрипте на python? Вот мой текущий черновик в Python:

import maya.cmds as cmd

for i in range(int(cmd.playbackOptions(q=1, minTime = True)), int(cmd.playbackOptions(q=1, maxTime = True))):
    cmd.currentTime(i, e=1)
    iskey = cmd.selectKey(add = True, k = True, t = (i, i), attribute = "DD_headRoll_ctrl.rotateZ")
    #print iskey
    if iskey:
        print i

1 Ответ

1 голос
/ 11 октября 2019

На самом деле намного проще, чем выяснить, есть ли у плагина ключи:

object = "pSphere1"
attr = "tx"

cmds.keyframe(object + "." + attr, q=True)

# Result: [5.0, 28.0, 46.0, 79.0] #

cmds.keyframe вернет список фреймов, на которых находится каждый ключ.

...