There was a problem with the last merge :S
[blender.git] / release / scripts / scripttemplate_ipo_gen.py
1 #!BPY
2 """
3 Name: 'Camera/Object Example'
4 Blender: 245
5 Group: 'ScriptTemplate'
6 Tooltip: 'Script template for setting the camera direction'
7 """
8
9 from Blender import Window
10 import bpy
11
12 script_data = \
13 '''#!BPY
14 """
15 Name: 'My Ipo Script'
16 Blender: 245
17 Group: 'Animation'
18 Tooltip: 'Put some useful info here'
19 """
20
21 # Add a licence here if you wish to re-distribute, we recommend the GPL
22
23 from Blender import Ipo, Mathutils, Window
24 import bpy, BPyMessages
25
26 def makeRandomIpo(object, firstFrame, numberOfFrames, frameStep):
27         # Create an new Ipo Curve of name myIpo and type Object
28         myIpo = bpy.data.ipos.new('myIpo', 'Object')
29         
30         # Create LocX, LocY, and LocZ Ipo curves in our new Curve Object
31         # and store them so we can access them later
32         myIpo_x = myIpo.addCurve('LocX')
33         myIpo_y = myIpo.addCurve('LocY')
34         myIpo_z = myIpo.addCurve('LocZ')
35         
36         # What value we want to scale our random value by
37         ipoScale = 4
38         
39         # This Calculates the End Frame for use in an xrange() expression
40         endFrame = firstFrame + (numberOfFrames * frameStep) + frameStep
41         
42         for frame in xrange(firstFrame, endFrame, frameStep):
43                 
44                 # Use the Mathutils Rand() function to get random numbers
45                 ipoValue_x = Mathutils.Rand(-1, 1) * ipoScale
46                 ipoValue_y = Mathutils.Rand(-1, 1) * ipoScale
47                 ipoValue_z = Mathutils.Rand(-1, 1) * ipoScale
48                 
49                 # Append to the Ipo curve at location frame, with the value ipoValue_x
50                 # Note that we should pass the append function a tuple or a BezTriple
51                 myIpo_x.append((frame, ipoValue_x))
52         
53                 # Similar to above
54                 myIpo_y.append((frame, ipoValue_y))
55                 myIpo_z.append((frame, ipoValue_z))
56         
57         # Link our new Ipo Curve to the passed object
58         object.setIpo(myIpo)
59         print object
60         
61         
62 def main():
63         
64         # Get the active scene, since there can be multiple ones
65         sce = bpy.data.scenes.active
66         
67         # Get the active object
68         object = sce.objects.active
69         
70         # If there is no active object, pop up an error message
71         if not object:
72                 BPyMessages.Error_NoActive()
73                 
74         Window.WaitCursor(1)
75         
76         # Call our makeRandomIpo function
77         # Pass it our object, Tell it to keys from the start frame until the end frame, at a step of 10 frames
78         # between them
79         
80         makeRandomIpo(object, sce.render.sFrame, sce.render.eFrame, 10)
81         
82         Window.WaitCursor(0)
83
84 if __name__ == '__main__':
85         main()
86
87 '''
88
89 new_text = bpy.data.texts.new('ipo_template.py')
90 new_text.write(script_data)
91 bpy.data.texts.active = new_text
92 Window.RedrawAll()