在Blender中获取关键帧点数组

时间:2016-01-11 19:03:11

标签: python-3.x blender blender-2.67

嗨,我有一个正在处理的脚本,它不能正常工作,我想要它 这是我到目前为止所得到的

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对象的值一样。但是当我要求它将这些值作为一个数组时,它只是打印出最后一帧。

以下简要介绍

enter image description here

1 个答案:

答案 0 :(得分:0)

我认为您要做的是将每个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],您每次都在阅读相同的曲线,您可能打算使用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)可以为您提供任何帧的曲线值,而不仅仅是键控值。