fix BGE bug #8668: Behavior of os.getcwd() is not consistent between operating systems
[blender-staging.git] / release / scripts / import_lightwave_motion.py
1 #!BPY
2
3 """ Registration info for Blender menus: <- these words are ignored
4 Name: 'Lightwave Motion (.mot)...'
5 Blender: 245
6 Group: 'Import'
7 Tip: 'Import Loc Rot Size chanels from a Lightwave .mot file'
8 """
9
10 __author__ = "Daniel Salazar (ZanQdo)"
11 __url__ = ("blender", "blenderartists.org",
12 "e-mail: zanqdo@gmail.com")
13 __version__ = "16/04/08"
14
15 __bpydoc__ = """\
16 This script loads Lightwave motion files (.mot)
17 into the selected objects
18
19 Usage:
20 Run the script with one or more objects selected (any kind)
21 Be sure to set the framerate correctly
22
23 """
24
25 # $Id: export_lightwave_motion.py 9924 2007-01-27 02:15:14Z campbellbarton $
26 # --------------------------------------------------------------------------
27 # ***** BEGIN GPL LICENSE BLOCK *****
28 #
29 # Copyright (C) 2003, 2004: A Vanpoucke
30 #
31 # This program is free software; you can redistribute it and/or
32 # modify it under the terms of the GNU General Public License
33 # as published by the Free Software Foundation; either version 2
34 # of the License, or (at your option) any later version.
35 #
36 # This program is distributed in the hope that it will be useful,
37 # but WITHOUT ANY WARRANTY; without even the implied warranty of
38 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
39 # GNU General Public License for more details.
40 #
41 # You should have received a copy of the GNU General Public License
42 # along with this program; if not, write to the Free Software Foundation,
43 # Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
44 #
45 # ***** END GPL LICENCE BLOCK *****
46 # --------------------------------------------------------------------------
47
48 import math as M
49 import Blender as B
50 import bpy
51
52
53 def FuncionPrincipal (Dir):
54         B.Window.WaitCursor(1)
55         ObjSelect = B.Object.GetSelected()
56         
57         if not ObjSelect:
58                 B.Draw.PupMenu('Select one or more objects, aborting.')
59                 return
60         
61         
62         SC = B.Scene.GetCurrent()
63         SCR = SC.getRenderingContext()
64         FrameRate = float(SCR.framesPerSec())
65         
66         
67         # Creating new IPO
68         
69         IPO = B.Ipo.New('Object', 'LW_Motion')
70         
71         
72         # Creating Curves in the IPO
73         
74         LocX   = IPO.addCurve("LocX")
75         LocX.setInterpolation("Bezier")
76         
77         LocY   = IPO.addCurve("LocY")
78         LocX.setInterpolation("Bezier")
79         
80         LocZ   = IPO.addCurve("LocZ")
81         LocX.setInterpolation("Bezier")
82         
83         RotX   = IPO.addCurve("RotX")
84         LocX.setInterpolation("Bezier")
85         
86         RotY   = IPO.addCurve("RotY")
87         LocX.setInterpolation("Bezier")
88         
89         RotZ   = IPO.addCurve("RotZ")
90         LocX.setInterpolation("Bezier")
91         
92         ScaleX = IPO.addCurve("ScaleX")
93         LocX.setInterpolation("Bezier")
94         
95         ScaleY = IPO.addCurve("ScaleY")
96         LocX.setInterpolation("Bezier")
97         
98         ScaleZ = IPO.addCurve("ScaleZ")
99         LocX.setInterpolation("Bezier")
100         
101         
102         # Opening the mot file
103         
104         File = open (Dir, 'rU')
105         
106         
107         # Init flags
108         
109         CurChannel = -1
110         ScaleFlag = 0
111         
112         # Main file reading cycle
113         
114         for Line in File:
115                 
116                 '''
117                 # Number of channels in the file
118                 
119                 if "NumChannels" in Line:
120                         Line = Line.split (' ')
121                         NumChannels = int(Line[1])
122                 '''
123                 
124                 # Current Channel Flag
125                 
126                 if "Channel 0" in Line:
127                         CurChannel = 0
128                         
129                 elif "Channel 1" in Line:
130                         CurChannel = 1
131                         
132                 elif "Channel 2" in Line:
133                         CurChannel = 2
134                         
135                 elif "Channel 3" in Line:
136                         CurChannel = 3
137                         
138                 elif "Channel 4" in Line:
139                         CurChannel = 4
140                         
141                 elif "Channel 5" in Line:
142                         CurChannel = 5
143                         
144                 elif "Channel 6" in Line:
145                         CurChannel = 6
146                         
147                 elif "Channel 7" in Line:
148                         CurChannel = 7
149                         
150                 elif "Channel 8" in Line:
151                         CurChannel = 8
152                 
153                 
154                 # Getting the data and writing to IPOs
155                 
156                 if CurChannel == 0:
157                         if "Key" in Line:
158                                 Line = Line.split (' ')
159                                 ValCh_0 = float (Line [3])
160                                 TimeCh_0  = float (Line [4]) * FrameRate
161                                 LocX.addBezier ((TimeCh_0, ValCh_0))
162                                 
163                 if CurChannel == 1:
164                         if "Key" in Line:
165                                 Line = Line.split (' ')
166                                 ValCh_1 = float (Line [3])
167                                 TimeCh_1  = float (Line [4]) * FrameRate
168                                 LocZ.addBezier ((TimeCh_1, ValCh_1))
169                                 
170                 if CurChannel == 2:
171                         if "Key" in Line:
172                                 Line = Line.split (' ')
173                                 ValCh_2 = float (Line [3])
174                                 TimeCh_2  = float (Line [4]) * FrameRate
175                                 LocY.addBezier ((TimeCh_2, ValCh_2))
176                                 
177                 if CurChannel == 3:
178                         if "Key" in Line:
179                                 Line = Line.split (' ')
180                                 ValCh_3 = M.degrees ( - float (Line [3]) ) / 10
181                                 TimeCh_3  = float (Line [4]) * FrameRate
182                                 RotZ.addBezier ((TimeCh_3, ValCh_3))
183                                 
184                 if CurChannel == 4:
185                         if "Key" in Line:
186                                 Line = Line.split (' ')
187                                 ValCh_4 = M.degrees ( - float (Line [3]) ) / 10
188                                 TimeCh_4  = float (Line [4]) * FrameRate
189                                 RotX.addBezier ((TimeCh_4, ValCh_4))
190                                 
191                 if CurChannel == 5:
192                         if "Key" in Line:
193                                 Line = Line.split (' ')
194                                 ValCh_5 = M.degrees ( - float (Line [3]) ) / 10
195                                 TimeCh_5  = float (Line [4]) * FrameRate
196                                 RotY.addBezier ((TimeCh_5, ValCh_5))
197                                 
198                 if CurChannel == 6:
199                         if "Key" in Line:
200                                 Line = Line.split (' ')
201                                 ValCh_6 = float (Line [3])
202                                 TimeCh_6  = float (Line [4]) * FrameRate
203                                 ScaleX.addBezier ((TimeCh_6, ValCh_6))
204                 elif ScaleFlag < 3:
205                         ScaleFlag += 1
206                         ScaleX.addBezier ((0, 1))
207                                 
208                 if CurChannel == 7:
209                         if "Key" in Line:
210                                 Line = Line.split (' ')
211                                 ValCh_7 = float (Line [3])
212                                 TimeCh_7 = float (Line [4]) * FrameRate
213                                 ScaleZ.addBezier ((TimeCh_7, ValCh_7))
214                 elif ScaleFlag < 3:
215                         ScaleFlag += 1
216                         ScaleZ.addBezier ((0, 1))
217                                 
218                 if CurChannel == 8:
219                         if "Key" in Line:
220                                 Line = Line.split (' ')
221                                 ValCh_8 = float (Line [3])
222                                 TimeCh_8  = float (Line [4]) * FrameRate
223                                 ScaleY.addBezier ((TimeCh_8, ValCh_8))
224                 elif ScaleFlag < 3:
225                         ScaleFlag += 1
226                         ScaleY.addBezier ((0, 1))
227                         
228                         
229         # Link the IPO to all selected objects
230         
231         for ob in ObjSelect:
232                 ob.setIpo(IPO)
233         
234         File.close()
235         
236         print '\nDone, the following motion file has been loaded:\n\n%s' % Dir
237         B.Window.WaitCursor(0)
238
239 def main():
240         B.Window.FileSelector(FuncionPrincipal, "Load IPO from .mot File", B.sys.makename(ext='.mot'))
241
242 if __name__=='__main__':
243         main()
244