Получение массива точек ключевых кадров в Blender
Привет, у меня есть сценарий, над которым я работаю, и он не работает так, как я хочу. Это то, что я получил до сих пор.
import bpy
def Key_Frame_Points(): #Gets the key-frame values as an array.
fcurves = bpy.context.active_object.animation_data.action.fcurves
for curve in fcurves:
keyframePoints = fcurves[4].keyframe_points # selects Action channel's axis / attribute
for keyframe in keyframePoints:
print('KEY FRAME POINTS ARE @T ',keyframe.co[0])
KEYFRAME_POINTS_ARRAY = keyframe.co[0]
print(KEYFRAME_POINTS_ARRAY)
Key_Frame_Points()
Когда я запускаю его, он распечатывает все ключевые кадры на выбранных объектах так, как я этого хотел. Но проблема в том, что я не могу по какой-то причине получить значения его печати в переменную. Если вы запустите его и проверьте систему Concole. он действует странно. Как и при распечатке значений объекта Keyframed. Но когда я прошу его получить эти значения в виде массива, он просто распечатывает последний кадр.
Вот как это выглядит вкратце
1 ответ
Я думаю, что вы хотите сделать, это добавить каждый keyframe.co[1]
в массив, который означает, что вы хотите использовать KEYFRAME_POINTS_ARRAY.append(keyframe.co[1])
и чтобы это работало, вам нужно определить его как пустой массив вне цикла с KEYFRAME_POINTS_ARRAY = []
Обратите внимание, что keyframe.co[0]
это кадр, который в то время как ключ keyframe.co[1]
является ключевым значением в этом кадре.
Также следует отметить, что вы просматриваете fcurves, но не используете каждую кривую.
for curve in fcurves:
keyframePoints = fcurves[4].keyframe_points
Используя fcurves[4]
здесь вы читаете один и тот же fcurve каждый раз, вы, вероятно, хотели использовать keyframePoints = curve.keyframe_points
Так что я ожидаю, что вы хотите иметь -
import bpy
def Key_Frame_Points(): #Gets the key-frame values as an array.
KEYFRAME_POINTS_ARRAY = []
fcurves = bpy.context.active_object.animation_data.action.fcurves
for curve in fcurves:
keyframePoints = curve.keyframe_points
for keyframe in keyframePoints:
print('KEY FRAME POINTS ARE frame:{} value:{}'.format(keyframe.co[0],keyframe.co[1]))
KEYFRAME_POINTS_ARRAY.append(keyframe.co[1])
return KEYFRAME_POINTS_ARRAY
print(Key_Frame_Points())
Вы также можете быть заинтересованы в использовании fcurves.find(data_path)
найти конкретную кривую по ее пути.
Существует также fcurve.evaluate(frame)
это даст вам значение кривой в любом кадре, а не только в ключевых значениях.