0
$\begingroup$

So i want to print each coordinate of XYZ individually along with the rotation and location. I found some code online structured like this for printing key frame data but i'm not sure how to get it to print individually.

    def get_keyframes(obj_list):
        keyframes = []
        for obj in obj_list:
            anim = obj.animation_data
            if anim is not None and anim.action is not None:
                for fcu in anim.action.fcurves:
                    for keyframe in fcu.keyframe_points:
                        x, y = keyframe.co
                        if x not in keyframes:
                            keyframes.append((math.ceil(x)))
        return keyframes
keys = get_keyframes(selection)
selection = bpy.context.selected_objects

This defines the keys. So lets say i want to define each coodinate as a variable:

for obj in enumerate(selection):
    XRot = round(keys.rotation_euler.x, 3)
    ZRot = round(keys.rotation_euler.z, 3)
    YRot = round(keys.rotation_euler.y, 3)
    xloc = round(keys.location.x, 3)
    yloc = round(keys.location.y, 3)
    zloc = round(keys.location.z, 3)

    EachKeyFrame  =  [key for key in keys]

    for keys in enumerate(EachKeyFrame):
        print(str(ZRot))

I've tried this although it gives a "AttributeError: 'tuple' object has no attribute 'rotation_euler'" error.

I've also tried ints like this but gives the same error.

for obj in enumerate(selection):
    XRot = round(keys.rotation_euler[0], 3)
    ZRot = round(keys.rotation_euler[1], 3)
    YRot = round(keys.rotation_euler[2], 3)
    xloc = round(keys.location[0], 3)
    yloc = round(keys.location[1], 3)
    zloc = round(keys.location[2], 3)

    EachKeyFrame  =  [key for key in keys]

    for keys in enumerate(EachKeyFrame):
        print(str(ZRot))
$\endgroup$
  • $\begingroup$ You can print and check that the obj is tuple (int, int). $\endgroup$ – tetii Dec 1 '17 at 1:48
  • $\begingroup$ I think it's just a simple typo. It's not keys.rotation - you want obj.rotation $\endgroup$ – Doyousketch2 Dec 1 '17 at 2:25
  • $\begingroup$ That seems to give out "AttributeError: 'tuple' object has no attribute 'rotation_euler'" $\endgroup$ – nathan miller Dec 1 '17 at 2:55
1
$\begingroup$

Avoid the enumerate, change keys to object as Doyousketch2 mentioned.

import bpy
import math

selection = bpy.context.selected_objects

def get_keyframes(obj_list):
    keyframes = []
    for obj in obj_list:
        anim = obj.animation_data
        if anim is not None and anim.action is not None:
            for fcu in anim.action.fcurves:
                for keyframe in fcu.keyframe_points:
                    x, y = keyframe.co
                    if x not in keyframes:
                        keyframes.append(math.ceil(x)) #(math.ceil(x)))
    return keyframes

def print_details(obj_list):
    XRot = round(obj_list.rotation_euler.x, 2)
    ZRot = round(obj_list.rotation_euler.z, 2)
    YRot = round(obj_list.rotation_euler.y, 2)
    xloc = round(obj_list.location.x, 2)
    yloc = round(obj_list.location.y, 2)
    zloc = round(obj_list.location.z, 2)
    print(obj_list.name)
    print("X Rot : ", XRot, '\t'*2, "Y Rot : ", YRot, '\t'*2, "Z Rot : ", ZRot)
    print("X Loc : ", xloc, '\t'*2, "Y Loc : ", yloc, '\t'*2, "Z Loc : ", zloc)


print("-"*25, "starting","-"*25)
for key in get_keyframes(selection):
    bpy.context.scene.frame_set(key)
    print("key : ", key)
    for obj in selection:
        print_details(obj)
print("-"*25, "ending","-"*25)

refer to example How can I get the location of an object at each keyframe?

$\endgroup$
  • $\begingroup$ Ah i see. Although I'm trying to use for keys in enumerate(EachKeyFrame): for each existing keyframe to print, seems to print the amount of instances there are but with the same values of the objects current position. So 3 key frames will print the same value 3 times. $\endgroup$ – nathan miller Dec 1 '17 at 14:41
  • $\begingroup$ The same data is being printed due to the fact that everything is in reference to 'bpy.contex'. which is not being updated with the script. $\endgroup$ – Ratt Dec 1 '17 at 21:33

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.