diff options
author | Campbell Barton <ideasman42@gmail.com> | 2008-04-17 12:43:22 +0400 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2008-04-17 12:43:22 +0400 |
commit | 3175ecbcc0c6cb62c244d34ab3c67aac3ec8a36c (patch) | |
tree | a51be2d5eb743f3f6e7bbabed7571c638510557f /release | |
parent | 5d0a207ecb843c4c73be897cfccbf3a0d2db574b (diff) |
Mot importer from ZanQdo
Diffstat (limited to 'release')
-rw-r--r-- | release/scripts/import_lightwave_motion.py | 244 |
1 files changed, 244 insertions, 0 deletions
diff --git a/release/scripts/import_lightwave_motion.py b/release/scripts/import_lightwave_motion.py new file mode 100644 index 00000000000..bec988c8da5 --- /dev/null +++ b/release/scripts/import_lightwave_motion.py @@ -0,0 +1,244 @@ +#!BPY + +""" Registration info for Blender menus: <- these words are ignored +Name: 'Lightwave Motion (.mot)...' +Blender: 245 +Group: 'Import' +Tip: 'Import Loc Rot Size chanels from a Lightwave .mot file' +""" + +__author__ = "Daniel Salazar (ZanQdo)" +__url__ = ("blender", "elysiun", +"e-mail: zanqdo@gmail.com") +__version__ = "16/04/08" + +__bpydoc__ = """\ +This script loads Lightwave motion files (.mot) +into the selected objects + +Usage: +Run the script with one or more objects selected (any kind) +Be sure to set the framerate correctly + +""" + +# $Id: export_lightwave_motion.py 9924 2007-01-27 02:15:14Z campbellbarton $ +# -------------------------------------------------------------------------- +# ***** BEGIN GPL LICENSE BLOCK ***** +# +# Copyright (C) 2003, 2004: A Vanpoucke +# +# 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +# +# ***** END GPL LICENCE BLOCK ***** +# -------------------------------------------------------------------------- + +import math as M +import Blender as B +import bpy + + +def FuncionPrincipal (Dir): + B.Window.WaitCursor(1) + ObjSelect = B.Object.GetSelected() + + if not ObjSelect: + B.Draw.PupMenu('Select one or more objects, aborting.') + return + + + SC = B.Scene.GetCurrent() + SCR = SC.getRenderingContext() + FrameRate = float(SCR.framesPerSec()) + + + # Creating new IPO + + IPO = B.Ipo.New('Object', 'LW_Motion') + + + # Creating Curves in the IPO + + LocX = IPO.addCurve("LocX") + LocX.setInterpolation("Bezier") + + LocY = IPO.addCurve("LocY") + LocX.setInterpolation("Bezier") + + LocZ = IPO.addCurve("LocZ") + LocX.setInterpolation("Bezier") + + RotX = IPO.addCurve("RotX") + LocX.setInterpolation("Bezier") + + RotY = IPO.addCurve("RotY") + LocX.setInterpolation("Bezier") + + RotZ = IPO.addCurve("RotZ") + LocX.setInterpolation("Bezier") + + ScaleX = IPO.addCurve("ScaleX") + LocX.setInterpolation("Bezier") + + ScaleY = IPO.addCurve("ScaleY") + LocX.setInterpolation("Bezier") + + ScaleZ = IPO.addCurve("ScaleZ") + LocX.setInterpolation("Bezier") + + + # Opening the mot file + + File = open (Dir, 'rU') + + + # Init flags + + CurChannel = -1 + ScaleFlag = 0 + + # Main file reading cycle + + for Line in File: + + ''' + # Number of channels in the file + + if "NumChannels" in Line: + Line = Line.split (' ') + NumChannels = int(Line[1]) + ''' + + # Current Channel Flag + + if "Channel 0" in Line: + CurChannel = 0 + + elif "Channel 1" in Line: + CurChannel = 1 + + elif "Channel 2" in Line: + CurChannel = 2 + + elif "Channel 3" in Line: + CurChannel = 3 + + elif "Channel 4" in Line: + CurChannel = 4 + + elif "Channel 5" in Line: + CurChannel = 5 + + elif "Channel 6" in Line: + CurChannel = 6 + + elif "Channel 7" in Line: + CurChannel = 7 + + elif "Channel 8" in Line: + CurChannel = 8 + + + # Getting the data and writing to IPOs + + if CurChannel == 0: + if "Key" in Line: + Line = Line.split (' ') + ValCh_0 = float (Line [3]) + TimeCh_0 = float (Line [4]) * FrameRate + LocX.addBezier ((TimeCh_0, ValCh_0)) + + if CurChannel == 1: + if "Key" in Line: + Line = Line.split (' ') + ValCh_1 = float (Line [3]) + TimeCh_1 = float (Line [4]) * FrameRate + LocZ.addBezier ((TimeCh_1, ValCh_1)) + + if CurChannel == 2: + if "Key" in Line: + Line = Line.split (' ') + ValCh_2 = float (Line [3]) + TimeCh_2 = float (Line [4]) * FrameRate + LocY.addBezier ((TimeCh_2, ValCh_2)) + + if CurChannel == 3: + if "Key" in Line: + Line = Line.split (' ') + ValCh_3 = M.degrees ( - float (Line [3]) ) / 10 + TimeCh_3 = float (Line [4]) * FrameRate + RotZ.addBezier ((TimeCh_3, ValCh_3)) + + if CurChannel == 4: + if "Key" in Line: + Line = Line.split (' ') + ValCh_4 = M.degrees ( - float (Line [3]) ) / 10 + TimeCh_4 = float (Line [4]) * FrameRate + RotX.addBezier ((TimeCh_4, ValCh_4)) + + if CurChannel == 5: + if "Key" in Line: + Line = Line.split (' ') + ValCh_5 = M.degrees ( - float (Line [3]) ) / 10 + TimeCh_5 = float (Line [4]) * FrameRate + RotY.addBezier ((TimeCh_5, ValCh_5)) + + if CurChannel == 6: + if "Key" in Line: + Line = Line.split (' ') + ValCh_6 = float (Line [3]) + TimeCh_6 = float (Line [4]) * FrameRate + ScaleX.addBezier ((TimeCh_6, ValCh_6)) + elif ScaleFlag < 3: + ScaleFlag += 1 + ScaleX.addBezier ((0, 1)) + + if CurChannel == 7: + if "Key" in Line: + Line = Line.split (' ') + ValCh_7 = float (Line [3]) + TimeCh_7 = float (Line [4]) * FrameRate + ScaleZ.addBezier ((TimeCh_7, ValCh_7)) + elif ScaleFlag < 3: + ScaleFlag += 1 + ScaleZ.addBezier ((0, 1)) + + if CurChannel == 8: + if "Key" in Line: + Line = Line.split (' ') + ValCh_8 = float (Line [3]) + TimeCh_8 = float (Line [4]) * FrameRate + ScaleY.addBezier ((TimeCh_8, ValCh_8)) + elif ScaleFlag < 3: + ScaleFlag += 1 + ScaleY.addBezier ((0, 1)) + + + # Link the IPO to all selected objects + + for ob in ObjSelect: + ob.setIpo(IPO) + + File.close() + + print '\nDone, the following motion file has been loaded:\n\n%s' % Dir + B.Window.WaitCursor(0) + +def main(): + B.Window.FileSelector(FuncionPrincipal, "Load IPO from .mot File", B.sys.makename(ext='.mot')) + +if __name__=='__main__': + main() + |