[Bf-extensions-cvs] SVN commit: /data/svn/bf-extensions [3139] trunk/py/scripts/addons/ system_demo_mode/demo_mode.py: demo mode no longer needs to write files to disk

Campbell Barton ideasman42 at gmail.com
Wed Mar 21 00:28:42 CET 2012


Revision: 3139
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-extensions&revision=3139
Author:   campbellbarton
Date:     2012-03-20 23:28:35 +0000 (Tue, 20 Mar 2012)
Log Message:
-----------
demo mode no longer needs to write files to disk

Modified Paths:
--------------
    trunk/py/scripts/addons/system_demo_mode/demo_mode.py

Modified: trunk/py/scripts/addons/system_demo_mode/demo_mode.py
===================================================================
--- trunk/py/scripts/addons/system_demo_mode/demo_mode.py	2012-03-20 17:30:03 UTC (rev 3138)
+++ trunk/py/scripts/addons/system_demo_mode/demo_mode.py	2012-03-20 23:28:35 UTC (rev 3139)
@@ -69,7 +69,7 @@
     "reset_anim": False,
     "anim_cycles": 0,  # count how many times we played the anim
     "last_frame": -1,
-    "render_out": "",
+    "is_render": False,
     "render_time": "",  # time render was finished.
     "timer": None,
     "basedir": "",  # demo.py is stored here
@@ -77,6 +77,26 @@
 }
 
 
+# -----------------------------------------------------------------------------
+# render handler - maintain "is_render"
+
+def handle_render_clear():
+    for ls in (bpy.app.handlers.render_complete, bpy.app.handlers.render_cancel):
+        while handle_render_done_cb in ls:
+            ls.remove(handle_render_done_cb)
+
+
+def handle_render_done_cb(self):
+    global_state["is_render"] = True
+
+
+def handle_render_init():
+    handle_render_clear()
+    bpy.app.handlers.render_complete.append(handle_render_done_cb)
+    bpy.app.handlers.render_cancel.append(handle_render_done_cb)
+    global_state["is_render"] = False
+
+
 def demo_mode_auto_select():
 
     play_area = 0
@@ -162,18 +182,9 @@
     elif global_config["mode"] == 'RENDER':
         print("  render")
 
-        # setup tempfile
-        handle, global_state["render_out"] = tempfile.mkstemp()
-        os.close(handle)
-        del handle
-
-        if os.path.exists(global_state["render_out"]):
-            print("  render!!!")
-            os.remove(global_state["render_out"])
-
         # setup scene.
         scene = bpy.context.scene
-        scene.render.filepath = global_state["render_out"]
+        scene.render.filepath = "TEMP_RENDER"
         scene.render.image_settings.file_format = 'AVI_JPEG' if global_config["anim_render"] else 'PNG'
         scene.render.use_file_extension = False
         scene.render.use_placeholder = False
@@ -181,13 +192,14 @@
             if global_config["anim_render"]:
                 bpy.ops.render.render('INVOKE_DEFAULT', animation=True)
             else:
-                bpy.ops.render.render('INVOKE_DEFAULT', write_still=True)
+                bpy.ops.render.render('INVOKE_DEFAULT')  # write_still=True, no need to write now.
+
+                handle_render_init()
+
         except RuntimeError:  # no camera for eg:
             import traceback
             traceback.print_exc()
 
-            open(global_state["render_out"], 'w').close()  # touch so we move on.
-
     else:
         raise Exception("Unsupported mode %r" % global_config["mode"])
 
@@ -254,14 +266,14 @@
     # --------------------------------------------------------------------------
     # RENDER MODE
     elif global_config["mode"] == 'RENDER':
-        if os.path.exists(global_state["render_out"]):
+        if global_state["is_render"]:
             # wait until the time has passed
             # XXX, todo, if rendering an anim we need some way to check its done.
             if global_state["render_time"] == -1.0:
                 global_state["render_time"] = time.time()
             else:
                 if time.time() - global_state["render_time"] > global_config["display_render"]:
-                    os.remove(global_state["render_out"])
+                    handle_render_clear()
                     demo_mode_next_file()
                     return
     else:



More information about the Bf-extensions-cvs mailing list