Newer
Older
Campbell Barton
committed
# ##### BEGIN GPL LICENSE BLOCK #####
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# ##### END GPL LICENSE BLOCK #####
Campbell Barton
committed
""" This script is an exporter to the nuke's .chan files.
It takes the currently active object and writes it's transformation data
into a text file with .chan extension."""
from mathutils import Matrix
from math import radians, degrees
Campbell Barton
committed
def save_chan(context, filepath, y_up, rot_ord):
# get the active scene and object
scene = context.scene
obj = context.active_object
Campbell Barton
committed
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
# get the range of an animation
f_start = scene.frame_start
f_end = scene.frame_end
# prepare the correcting matrix
rot_mat = Matrix.Rotation(radians(-90.0), 4, 'X').to_4x4()
filehandle = open(filepath, 'w')
fw = filehandle.write
# iterate the frames
for frame in range(f_start, f_end, 1):
# set the current frame
scene.frame_set(frame)
# get the objects world matrix
mat = obj.matrix_world.copy()
# if the setting is proper use the rotation matrix
# to flip the Z and Y axis
if y_up:
mat = rot_mat * mat
# create the first component of a new line, the frame number
fw("%i\t" % frame)
# create transform component
t = mat.to_translation()
fw("%f\t%f\t%f\t" % t[:])
# create rotation component
r = mat.to_euler(rot_ord)
fw("%f\t%f\t%f\t" % (degrees(r[0]), degrees(r[1]), degrees(r[2])))
# if we have a camera, add the focal length
Michael Krupa
committed
sensor_x = camera.sensor_width
sensor_y = camera.sensor_height
vfov = degrees(camera.angle_y)
Campbell Barton
committed
fw("%f" % vfov)
fw("\n")
# after the whole loop close the file
filehandle.close()
return {'FINISHED'}