diff options
author | Campbell Barton <ideasman42@gmail.com> | 2012-12-30 05:39:55 +0400 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2012-12-30 05:39:55 +0400 |
commit | 33955940e4931e2184434393e0f8c15c36a5c3c6 (patch) | |
tree | 7b3c10343162a256e85ff4346f57122032715e82 /release/scripts/templates_py/background_job.py | |
parent | e12354c4c5850864f925d22f53ec31578384bc63 (diff) |
add templates menu for OSL, use preprocessor directive color for decorators in python.
Diffstat (limited to 'release/scripts/templates_py/background_job.py')
-rw-r--r-- | release/scripts/templates_py/background_job.py | 122 |
1 files changed, 122 insertions, 0 deletions
diff --git a/release/scripts/templates_py/background_job.py b/release/scripts/templates_py/background_job.py new file mode 100644 index 00000000000..11b51e5a9b5 --- /dev/null +++ b/release/scripts/templates_py/background_job.py @@ -0,0 +1,122 @@ +# This script is an example of how you can run blender from the command line +# (in background mode with no interface) to automate tasks, in this example it +# creates a text object, camera and light, then renders and/or saves it. +# This example also shows how you can parse command line options to scripts. +# +# Example usage for this test. +# blender --background --factory-startup --python $HOME/background_job.py -- \ +# --text="Hello World" \ +# --render="/tmp/hello" \ +# --save="/tmp/hello.blend" +# +# Notice: +# '--factory-startup' is used to avoid the user default settings from +# interfearing with automated scene generation. +# +# '--' causes blender to ignore all following arguments so python can use them. +# +# See blender --help for details. + +import bpy + + +def example_function(text, save_path, render_path): + + scene = bpy.context.scene + + # Clear existing objects. + scene.camera = None + for obj in scene.objects: + scene.objects.unlink(obj) + + txt_data = bpy.data.curves.new(name="MyText", type='FONT') + + # Text Object + txt_ob = bpy.data.objects.new(name="MyText", object_data=txt_data) + scene.objects.link(txt_ob) # add the data to the scene as an object + txt_data.body = text # the body text to the command line arg given + txt_data.align = 'CENTER' # center text + + # Camera + cam_data = bpy.data.cameras.new("MyCam") + cam_ob = bpy.data.objects.new(name="MyCam", object_data=cam_data) + scene.objects.link(cam_ob) # instance the camera object in the scene + scene.camera = cam_ob # set the active camera + cam_ob.location = 0.0, 0.0, 10.0 + + # Lamp + lamp_data = bpy.data.lamps.new("MyLamp", 'POINT') + lamp_ob = bpy.data.objects.new(name="MyCam", object_data=lamp_data) + scene.objects.link(lamp_ob) + lamp_ob.location = 2.0, 2.0, 5.0 + + if save_path: + try: + f = open(save_path, 'w') + f.close() + ok = True + except: + print("Cannot save to path %r" % save_path) + + import traceback + traceback.print_exc() + + if ok: + bpy.ops.wm.save_as_mainfile(filepath=save_path) + + if render_path: + render = scene.render + render.use_file_extension = True + render.filepath = render_path + bpy.ops.render.render(write_still=True) + + +def main(): + import sys # to get command line args + import argparse # to parse options for us and print a nice help message + + # get the args passed to blender after "--", all of which are ignored by + # blender so scripts may receive their own arguments + argv = sys.argv + + if "--" not in argv: + argv = [] # as if no args are passed + else: + argv = argv[argv.index("--") + 1:] # get all args after "--" + + # When --help or no args are given, print this help + usage_text = \ + "Run blender in background mode with this script:" + " blender --background --python " + __file__ + " -- [options]" + + parser = argparse.ArgumentParser(description=usage_text) + + # Example utility, add some text and renders or saves it (with options) + # Possible types are: string, int, long, choice, float and complex. + parser.add_argument("-t", "--text", dest="text", type=str, required=True, + help="This text will be used to render an image") + + parser.add_argument("-s", "--save", dest="save_path", metavar='FILE', + help="Save the generated file to the specified path") + parser.add_argument("-r", "--render", dest="render_path", metavar='FILE', + help="Render an image to the specified path") + + args = parser.parse_args(argv) # In this example we wont use the args + + if not argv: + parser.print_help() + return + + if not args.text: + print("Error: --text=\"some string\" argument not given, aborting.") + parser.print_help() + return + + # Run the example function + example_function(args.text, args.save_path, args.render_path) + + print("batch job finished, exiting") + + +if __name__ == "__main__": + main() |