Animate with position and orientation from txt file

I want to animate a body using an external file with x, y, z coordinates and quaternion data.

In the file every entry [x,y,x,q0,q1,q2,q3] represents a frame to be rendered.

I heard about Blender and its compatibility with python and, since I am a python user, I would like to know if it is possible to do what I mentioned above and how to do it.

It's very possible, and doesn't even sound difficult to do.

Make sure Object.rotation_mode is 'QUATERNION' (once for the object):

ob = bpy.context.object # active object, assuming there is one
ob.rotation_mode = 'QUATERNION'


import bpy
from mathutils import Vector, Quaternion

file = open("input.txt", "r")
for line in file:
x, y, z, q0, q1, q2, q3 = line.strip(" \t\r\n[]").split(",")
loc = float(x), float(y), float(z)
quat = float(q0), float(q1), float(q2), float(q3)

# Or cast to Vector / Quaternion type if you need any methods of them later
#loc = Vector(loc)
#quat = Quaternion(quat)


I assume line 1 in the file is meant to be the first frame in Blender and so on. Let's keep track of the line number:

for i, line in enumerate(file, 1):
...


Assign the location and the rotation in our for-loop:

    ob.location = loc
ob.rotation_quaternion = quat


and insert keyframes for frame i:

    ob.keyframe_insert('location', frame=i)
ob.keyframe_insert('rotation_quaternion', frame=i)


Finally, we close the file:

file.close()


For a better performaning way to animate with python, see:

http://www.blender.org/documentation/blender_python_api_2_69_10/info_quickstart.html#animation

• Thank you so much for your help. It works! I just want to add something: loc and quat can't have string entries so they must be transform to float. – Tharek M Feb 12 '14 at 0:33
• Geez! Totally forgot to cast to numbers, edited my post. float() accepts any kind of floating point notation: 0.1, .1, 1., 1e-3. For integer values, you would use int() (no rounding if used on floats, use math.round() instead if needed). Properties like Object.location accept several types without explicit casting, Vector, int, float... – CoDEmanX Feb 12 '14 at 0:41