93 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			93 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| #!BPY
 | |
| """
 | |
| Name: 'IPO Example'
 | |
| Blender: 245
 | |
| Group: 'ScriptTemplate'
 | |
| Tooltip: 'Script template for setting the IPO'
 | |
| """
 | |
| 
 | |
| from Blender import Window
 | |
| import bpy
 | |
| 
 | |
| script_data = \
 | |
| '''#!BPY
 | |
| """
 | |
| Name: 'My Ipo Script'
 | |
| Blender: 245
 | |
| Group: 'Animation'
 | |
| Tooltip: 'Put some useful info here'
 | |
| """
 | |
| 
 | |
| # Add a licence here if you wish to re-distribute, we recommend the GPL
 | |
| 
 | |
| from Blender import Ipo, Mathutils, Window
 | |
| import bpy, BPyMessages
 | |
| 
 | |
| def makeRandomIpo(object, firstFrame, numberOfFrames, frameStep):
 | |
| 	# Create an new Ipo Curve of name myIpo and type Object
 | |
| 	myIpo = bpy.data.ipos.new('myIpo', 'Object')
 | |
| 	
 | |
| 	# Create LocX, LocY, and LocZ Ipo curves in our new Curve Object
 | |
| 	# and store them so we can access them later
 | |
| 	myIpo_x = myIpo.addCurve('LocX')
 | |
| 	myIpo_y = myIpo.addCurve('LocY')
 | |
| 	myIpo_z = myIpo.addCurve('LocZ')
 | |
| 	
 | |
| 	# What value we want to scale our random value by
 | |
| 	ipoScale = 4
 | |
| 	
 | |
| 	# This Calculates the End Frame for use in an xrange() expression
 | |
| 	endFrame = firstFrame + (numberOfFrames * frameStep) + frameStep
 | |
| 	
 | |
| 	for frame in xrange(firstFrame, endFrame, frameStep):
 | |
| 		
 | |
| 		# Use the Mathutils Rand() function to get random numbers
 | |
| 		ipoValue_x = Mathutils.Rand(-1, 1) * ipoScale
 | |
| 		ipoValue_y = Mathutils.Rand(-1, 1) * ipoScale
 | |
| 		ipoValue_z = Mathutils.Rand(-1, 1) * ipoScale
 | |
| 		
 | |
| 		# Append to the Ipo curve at location frame, with the value ipoValue_x
 | |
| 		# Note that we should pass the append function a tuple or a BezTriple
 | |
| 		myIpo_x.append((frame, ipoValue_x))
 | |
| 	
 | |
| 		# Similar to above
 | |
| 		myIpo_y.append((frame, ipoValue_y))
 | |
| 		myIpo_z.append((frame, ipoValue_z))
 | |
| 	
 | |
| 	# Link our new Ipo Curve to the passed object
 | |
| 	object.setIpo(myIpo)
 | |
| 	print object
 | |
| 	
 | |
| 	
 | |
| def main():
 | |
| 	
 | |
| 	# Get the active scene, since there can be multiple ones
 | |
| 	sce = bpy.data.scenes.active
 | |
| 	
 | |
| 	# Get the active object
 | |
| 	object = sce.objects.active
 | |
| 	
 | |
| 	# If there is no active object, pop up an error message
 | |
| 	if not object:
 | |
| 		BPyMessages.Error_NoActive()
 | |
| 		
 | |
| 	Window.WaitCursor(1)
 | |
| 	
 | |
| 	# Call our makeRandomIpo function
 | |
| 	# Pass it our object, Tell it to keys from the start frame until the end frame, at a step of 10 frames
 | |
| 	# between them
 | |
| 	
 | |
| 	makeRandomIpo(object, sce.render.sFrame, sce.render.eFrame, 10)
 | |
| 	
 | |
| 	Window.WaitCursor(0)
 | |
| 
 | |
| if __name__ == '__main__':
 | |
| 	main()
 | |
| 
 | |
| '''
 | |
| 
 | |
| new_text = bpy.data.texts.new('ipo_template.py')
 | |
| new_text.write(script_data)
 | |
| bpy.data.texts.active = new_text
 | |
| Window.RedrawAll()
 |