Freestyle: lazy load 'export_svg'

Loading XML module, registering etree namespaces... etc
on startup for everyone on chance someone may want to export
an SVG from Freestyle is unacceptable.

This shouldn't have got through the review.

also disable loading when built without freestyle.
This commit is contained in:
Campbell Barton 2014-10-18 17:46:09 +02:00
parent fc7752b53c
commit c35a649a0a
Notes: blender-bot 2023-02-14 09:55:28 +01:00
Referenced by commit dd2525c362, Revert "Freestyle: lazy load 'export_svg'"
Referenced by issue #42313, Ruler always measures 0.0
Referenced by issue #42294, Bullet Physic Rigid Body Updates In Viewport Playback, Object Using Constraints (Loc,Rot) Breaks One Frame In To Animation When Rendering, But Viewport Playback Updates Correctly
Referenced by issue #42298, Problems with Freestyle SVG file output
2 changed files with 37 additions and 17 deletions

View File

@ -23,7 +23,6 @@ import bpy
import xml.etree.cElementTree as et
from bpy.path import abspath
from bpy.app.handlers import persistent
from bpy_extras.object_utils import world_to_camera_view
from freestyle.types import StrokeShader, BinaryPredicate1D, Interface0DIterator
@ -266,12 +265,10 @@ def indent_xml(elem, level=0, indentsize=4):
# - callbacks - #
@persistent
# called from: bpy.app.handlers.render_init
def svg_export_header(scene):
render = scene.render
if not (render.use_freestyle and render.use_svg_export):
return
# create new file (overwrite existing)
render = scene.render
width, height = render.resolution_x, render.resolution_y
scale = render.resolution_percentage / 100
@ -283,16 +280,15 @@ def svg_export_header(scene):
print("SVG export: invalid path")
@persistent
# called from: bpy.app.handlers.render_complete
def svg_export_animation(scene):
"""makes an animation of the exported SVG file """
# makes an animation of the exported SVG file
render = scene.render
if render.use_freestyle and render.use_svg_export and render.svg_mode == 'ANIMATION':
write_animation(abspath(render.svg_path), scene.frame_start, render.fps)
write_animation(abspath(render.svg_path), scene.frame_start, render.fps)
def write_animation(filepath, frame_begin, fps=25):
"""Adds animate tags to the specified file."""
# Adds animate tags to the specified file.
tree = et.parse(filepath)
root = tree.getroot()

View File

@ -20,15 +20,39 @@
import bpy
from export_svg import svg_export_header, svg_export_animation
if bpy.app.build_options.freestyle:
from bpy.app.handlers import persistent
def register():
bpy.app.handlers.render_init.append(svg_export_header)
bpy.app.handlers.render_complete.append(svg_export_animation)
@persistent
def freestyle_render_init(scene):
render = scene.render
if render.use_freestyle:
if render.use_svg_export:
from export_svg import svg_export_header
svg_export_header(scene)
def unregister():
bpy.app.handlers.render_init.remove(svg_export_header)
bpy.app.handlers.render_complete.remove(svg_export_animation)
@persistent
def freestyle_render_complete(scene):
render = scene.render
if render.use_freestyle:
if render.use_svg_export and render.svg_mode == 'ANIMATION':
from export_svg import svg_export_animation
svg_export_animation(scene)
def register():
bpy.app.handlers.render_init.append(freestyle_render_init)
bpy.app.handlers.render_complete.append(freestyle_render_complete)
def unregister():
bpy.app.handlers.render_init.remove(freestyle_render_init)
bpy.app.handlers.render_complete.remove(freestyle_render_complete)
else:
def register():
pass
def unregister():
pass
if __name__ == '__main__':
register()