[Bf-extensions-cvs] [7a331da] temp-freestyle-svg: Fix for SVG animation rendering failure when the export mode set to FRAME.

Tamito Kajiyama noreply at git.blender.org
Wed Dec 3 14:25:30 CET 2014


Commit: 7a331da7671a568468f01cfbdf693c25629c3961
Author: Tamito Kajiyama
Date:   Wed Dec 3 15:10:10 2014 +0900
Branches: temp-freestyle-svg
https://developer.blender.org/rBA7a331da7671a568468f01cfbdf693c25629c3961

Fix for SVG animation rendering failure when the export mode set to FRAME.

===================================================================

M	render_freestyle_svg.py

===================================================================

diff --git a/render_freestyle_svg.py b/render_freestyle_svg.py
index 905e298..9147030 100644
--- a/render_freestyle_svg.py
+++ b/render_freestyle_svg.py
@@ -33,6 +33,7 @@ bl_info = {
 import bpy
 import parameter_editor
 import itertools
+import os
 
 import xml.etree.cElementTree as et
 
@@ -86,12 +87,35 @@ def render_width(scene):
     return int(scene.render.resolution_x * scene.render.resolution_percentage / 100)
 
 
+class RenderState:
+    # Note that this flag is set to False only after the first frame
+    # has been written to file.
+    is_preview = True
+
+
+ at persistent
+def render_init(scene):
+    RenderState.is_preview = True
+
+
+ at persistent
+def render_write(scene):
+    RenderState.is_preview = False
+
+
+def is_preview_render(scene):
+    return RenderState.is_preview or scene.svg_export.mode == 'FRAME'
+
+
 def create_path(scene):
     """Creates the output path for the svg file"""
-    # current frame if rendering a single frame
-    # start frame when rendering an animation
-    frame = scene.frame_current if scene.svg_export.mode == 'FRAME' else scene.frame_start
-    return scene.render.frame_path(frame).split(".")[0] + ".svg"
+    dirname = os.path.dirname(scene.render.frame_path())
+    basename = bpy.path.basename(scene.render.filepath)
+    if scene.svg_export.mode == 'FRAME':
+        frame = "{:04d}".format(scene.frame_current)
+    else:
+        frame = "{:04d}-{:04d}".format(scene.frame_start, scene.frame_end)
+    return os.path.join(dirname, basename + frame + ".svg")
 
 
 class SVGExport(bpy.types.PropertyGroup):
@@ -162,10 +186,11 @@ class SVGExporterPanel(bpy.types.Panel):
 
 @persistent
 def svg_export_header(scene):
-    # svg = scene.svg_export
-    render = scene.render
+    if not (scene.render.use_freestyle and scene.svg_export.use_svg_export):
+        return
 
-    if not (render.use_freestyle and scene.svg_export.use_svg_export):
+    # write the header only for the first frame when animation is being rendered
+    if not is_preview_render(scene) and scene.frame_current != scene.frame_start:
         return
 
     # this may fail still. The error is printed to the console.
@@ -179,7 +204,7 @@ def svg_export_animation(scene):
     render = scene.render
     svg = scene.svg_export
 
-    if render.use_freestyle and svg.use_svg_export and svg.mode == 'ANIMATION':
+    if render.use_freestyle and svg.use_svg_export and not is_preview_render(scene):
         write_animation(create_path(scene), scene.frame_start, render.fps)
 
 
@@ -479,7 +504,9 @@ def register():
     bpy.types.Scene.svg_export = PointerProperty(type=SVGExport)
 
     # add callbacks
-    bpy.app.handlers.render_init.append(svg_export_header)
+    bpy.app.handlers.render_init.append(render_init)
+    bpy.app.handlers.render_write.append(render_write)
+    bpy.app.handlers.render_pre.append(svg_export_header)
     bpy.app.handlers.render_complete.append(svg_export_animation)
 
     # manipulate shaders list
@@ -500,7 +527,9 @@ def unregister():
     del bpy.types.Scene.svg_export
 
     # remove callbacks
-    bpy.app.handlers.render_init.remove(svg_export_header)
+    bpy.app.handlers.render_init.remove(render_init)
+    bpy.app.handlers.render_write.remove(render_write)
+    bpy.app.handlers.render_pre.remove(svg_export_header)
     bpy.app.handlers.render_complete.remove(svg_export_animation)
 
     # manipulate shaders list



More information about the Bf-extensions-cvs mailing list