[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