merge with 2.5 at r18679
[blender.git] / release / scripts / scripttemplate_background_job.py
1 #!BPY
2 """
3 Name: 'Background Job Example'
4 Blender: 248
5 Group: 'ScriptTemplate'
6 Tooltip: 'Script template for automating tasks from the command line with blender'
7 """
8
9 from Blender import Window
10 import bpy
11
12 script_data = \
13 '''# This script is an example of how you can run blender from the command line (in background mode with no interface)
14 # to automate tasks, in this example it creates a text object, camera and light, then renders and/or saves it.
15 # This example also shows how you can parse command line options to python scripts.
16
17 # Example usage for this test.
18 #  blender -b -P $HOME/background_job.py -- --text="Hello World" --render="/tmp/hello" --save="/tmp/hello.blend"
19
20 # Notice all python args are after the '--' argument.
21
22 import Blender
23 import bpy
24
25 def example_function(body_text, save_path, render_path):
26         
27         sce= bpy.data.scenes.active
28
29         txt_data= bpy.data.curves.new('MyText', 'Text3d')
30         
31         # Text Object
32         txt_ob = sce.objects.new(txt_data)                      # add the data to the scene as an object
33         txt_data.setText(body_text)                                     # set the body text to the command line arg given
34         txt_data.setAlignment(Blender.Text3d.MIDDLE)# center text
35         
36         # Camera
37         cam_data= bpy.data.cameras.new('MyCam')         # create new camera data
38         cam_ob= sce.objects.new(cam_data)                       # add the camera data to the scene (creating a new object)
39         sce.objects.camera= cam_ob                                      # set the active camera
40         cam_ob.loc= 0,0,10
41         
42         # Lamp
43         lamp_data= bpy.data.lamps.new('MyLamp')
44         lamp_ob= sce.objects.new(lamp_data)
45         lamp_ob.loc= 2,2,5
46
47         if save_path:
48                 try:
49                         f= open(save_path, 'w')
50                         f.close()
51                         ok= True
52                 except:
53                         print 'Cannot save to path "%s"' % save_path
54                         ok= False
55                 
56                 if ok:
57                         Blender.Save(save_path, 1)
58         
59         if render_path:
60                 render= sce.render
61                 render.extensions= True
62                 render.renderPath = render_path
63                 render.sFrame= 1
64                 render.eFrame= 1
65                 render.renderAnim()
66
67
68
69 import sys              # to get command line args
70 import optparse # to parse options for us and print a nice help message
71
72 script_name= 'background_job.py'
73
74 def main():
75         
76         # get the args passed to blender after "--", all of which are ignored by blender specifically
77         # so python may receive its own arguments
78         argv= sys.argv
79
80         if '--' not in argv:
81                 argv = [] # as if no args are passed
82         else:   
83                 argv = argv[argv.index('--')+1: ] # get all args after "--"
84         
85         # When --help or no args are given, print this help
86         usage_text =  'Run blender in background mode with this script:\n'
87         usage_text += '  blender -b -P ' + script_name + ' -- [options]'
88                         
89         parser = optparse.OptionParser(usage = usage_text)
90         
91
92         # Example background utility, add some text and renders or saves it (with options)
93         # Possible types are: string, int, long, choice, float and complex.
94         parser.add_option('-t', '--text', dest='body_text', help='This text will be used to render an image', type='string')
95
96         parser.add_option('-s', '--save', dest='save_path', help='Save the generated file to the specified path', metavar='FILE')
97         parser.add_option('-r', '--render', dest='render_path', help='Render an image to the specified path', metavar='FILE')
98
99         options, args = parser.parse_args(argv) # In this example we wont use the args
100         
101         if not argv:
102                 parser.print_help()
103                 return
104
105         if not options.body_text:
106                 print 'Error: --text="some string" argument not given, aborting.\n'
107                 parser.print_help()
108                 return
109         
110         # Run the example function
111         example_function(options.body_text, options.save_path, options.render_path)
112
113         print 'batch job finished, exiting'
114
115
116 if __name__ == '__main__':
117         main()
118 '''
119
120 new_text = bpy.data.texts.new('background_job.py')
121 new_text.write(script_data)
122 bpy.data.texts.active = new_text
123 Window.RedrawAll()
124