[Bf-blender-cvs] [4dd5b63] master: Revert "Freestyle: Built-in SVG exporter."
Campbell Barton
noreply at git.blender.org
Sun Oct 19 19:14:03 CEST 2014
Commit: 4dd5b635e8c5809561f35abc8cb9f42b8e104cf7
Author: Campbell Barton
Date: Sun Oct 19 19:10:06 2014 +0200
Branches: master
https://developer.blender.org/rB4dd5b635e8c5809561f35abc8cb9f42b8e104cf7
Revert "Freestyle: Built-in SVG exporter."
This reverts commit 61a330baca0ff9bb3cf477c04f539ef276a0356f.
This completes reverting D785
This feature is to be reworked into an addon.
===================================================================
M release/scripts/freestyle/modules/freestyle/utils.py
M release/scripts/freestyle/modules/parameter_editor.py
D release/scripts/freestyle/modules/svg_export.py
M release/scripts/startup/bl_ui/properties_freestyle.py
D release/scripts/startup/freestyle_builtins.py
M source/blender/blenkernel/intern/scene.c
M source/blender/blenloader/intern/versioning_270.c
M source/blender/blenloader/intern/versioning_defaults.c
M source/blender/makesdna/DNA_scene_types.h
M source/blender/makesrna/intern/rna_scene.c
===================================================================
diff --git a/release/scripts/freestyle/modules/freestyle/utils.py b/release/scripts/freestyle/modules/freestyle/utils.py
index a8e4743..6c5e1d5 100644
--- a/release/scripts/freestyle/modules/freestyle/utils.py
+++ b/release/scripts/freestyle/modules/freestyle/utils.py
@@ -86,20 +86,6 @@ def bounding_box(stroke):
x, y = zip(*(svert.point for svert in stroke))
return (Vector((min(x), min(y))), Vector((max(x), max(y))))
-def get_dashed_pattern(linestyle):
- """Extracts the dashed pattern from the various UI options """
- pattern = []
- if linestyle.dash1 > 0 and linestyle.gap1 > 0:
- pattern.append(linestyle.dash1)
- pattern.append(linestyle.gap1)
- if linestyle.dash2 > 0 and linestyle.gap2 > 0:
- pattern.append(linestyle.dash2)
- pattern.append(linestyle.gap2)
- if linestyle.dash3 > 0 and linestyle.gap3 > 0:
- pattern.append(linestyle.dash3)
- pattern.append(linestyle.gap3)
- return pattern
-
# -- General helper functions -- #
diff --git a/release/scripts/freestyle/modules/parameter_editor.py b/release/scripts/freestyle/modules/parameter_editor.py
index 0498213..9ac5c66 100644
--- a/release/scripts/freestyle/modules/parameter_editor.py
+++ b/release/scripts/freestyle/modules/parameter_editor.py
@@ -59,7 +59,6 @@ from freestyle.predicates import (
NotUP1D,
OrUP1D,
QuantitativeInvisibilityUP1D,
- SameShapeIdBP1D,
TrueBP1D,
TrueUP1D,
WithinImageBoundaryUP1D,
@@ -98,8 +97,7 @@ from freestyle.utils import (
stroke_normal,
bound,
pairwise,
- BoundedProperty,
- get_dashed_pattern,
+ BoundedProperty
)
from _freestyle import (
blendRamp,
@@ -107,19 +105,10 @@ from _freestyle import (
evaluateCurveMappingF,
)
-from svg_export import (
- SVGPathShader,
- SVGFillShader,
- ShapeZ,
- )
-
import time
-
from mathutils import Vector
from math import pi, sin, cos, acos, radians
from itertools import cycle, tee
-from bpy.path import abspath
-from os.path import isfile
class ColorRampModifier(StrokeShader):
@@ -430,7 +419,7 @@ class ColorMaterialShader(ColorRampModifier):
for svert in it:
material = self.func(it)
if self.attribute == 'LINE':
- b = material.line[0:3]
+ b = material.line[0:3]
elif self.attribute == 'DIFF':
b = material.diffuse[0:3]
else:
@@ -898,6 +887,7 @@ integration_types = {
# main function for parameter processing
+
def process(layer_name, lineset_name):
scene = getCurrentScene()
layer = scene.render.layers[layer_name]
@@ -1182,51 +1172,24 @@ def process(layer_name, lineset_name):
has_tex = True
if has_tex:
shaders_list.append(StrokeTextureStepShader(linestyle.texture_spacing))
- # -- Dashed line -- #
- if linestyle.use_dashed_line:
- pattern = get_dashed_pattern(linestyle)
- if len(pattern) > 0:
- shaders_list.append(DashedLineShader(pattern))
- # -- SVG export -- #
- render = scene.render
- filepath = abspath(render.svg_path)
- # if the export path is invalid: log to console, but continue normal rendering
- if render.use_svg_export:
- if not isfile(filepath):
- print("Error: SVG export: path is invalid")
- else:
- height = render.resolution_y * render.resolution_percentage / 100
- split_at_inv = render.svg_split_at_invisible
- frame_current = scene.frame_current
- # SVGPathShader: keep reference and add to shader list
- renderer = SVGPathShader.from_lineset(lineset, filepath, height, split_at_inv, frame_current)
- shaders_list.append(renderer)
-
# -- Stroke caps -- #
- # appended after svg shader to ensure correct svg output
if linestyle.caps == 'ROUND':
shaders_list.append(RoundCapShader())
elif linestyle.caps == 'SQUARE':
shaders_list.append(SquareCapShader())
-
+ # -- Dashed line -- #
+ if linestyle.use_dashed_line:
+ pattern = []
+ if linestyle.dash1 > 0 and linestyle.gap1 > 0:
+ pattern.append(linestyle.dash1)
+ pattern.append(linestyle.gap1)
+ if linestyle.dash2 > 0 and linestyle.gap2 > 0:
+ pattern.append(linestyle.dash2)
+ pattern.append(linestyle.gap2)
+ if linestyle.dash3 > 0 and linestyle.gap3 > 0:
+ pattern.append(linestyle.dash3)
+ pattern.append(linestyle.gap3)
+ if len(pattern) > 0:
+ shaders_list.append(DashedLineShader(pattern))
# create strokes using the shaders list
Operators.create(TrueUP1D(), shaders_list)
-
- if render.use_svg_export and isfile(filepath):
- # write svg output to file
- renderer.write()
- if render.svg_use_object_fill:
- # reset the stroke selection (but don't delete the already generated ones)
- Operators.reset(delete_strokes=False)
- # shape detection
- upred = AndUP1D(QuantitativeInvisibilityUP1D(0), ContourUP1D())
- Operators.select(upred)
- # chain when the same shape and visible
- bpred = SameShapeIdBP1D()
- Operators.bidirectional_chain(ChainPredicateIterator(upred, bpred), NotUP1D(QuantitativeInvisibilityUP1D(0)))
- # sort according to the distance from camera
- Operators.sort(ShapeZ(scene))
- # render and write fills
- renderer = SVGFillShader(filepath, height, lineset.name)
- Operators.create(TrueUP1D(), [renderer,])
- renderer.write()
diff --git a/release/scripts/freestyle/modules/svg_export.py b/release/scripts/freestyle/modules/svg_export.py
deleted file mode 100644
index 0956673..0000000
--- a/release/scripts/freestyle/modules/svg_export.py
+++ /dev/null
@@ -1,305 +0,0 @@
-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, ChainingIterator, BinaryPredicate1D, Interface0DIterator, AdjacencyIterator
-from freestyle.utils import getCurrentScene, get_dashed_pattern, get_test_stroke
-from freestyle.functions import GetShapeF1D, CurveMaterialF0D
-
-from itertools import dropwhile, repeat
-from collections import OrderedDict
-
-__all__ = (
- "SVGPathShader",
- "SVGFillShader",
- "ShapeZ",
- "indent_xml",
- "svg_export_header",
- "svg_export_animation",
- )
-
-# register namespaces
-et.register_namespace("", "http://www.w3.org/2000/svg")
-et.register_namespace("inkscape", "http://www.inkscape.org/namespaces/inkscape")
-et.register_namespace("sodipodi", "http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd")
-
-
-# use utf-8 here to keep ElementTree happy, end result is utf-16
-svg_primitive = """<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="{:d}" height="{:d}">
-</svg>"""
-
-
-# xml namespaces
-namespaces = {
- "inkscape": "http://www.inkscape.org/namespaces/inkscape",
- "svg": "http://www.w3.org/2000/svg",
- }
-
-# - SVG export - #
-class SVGPathShader(StrokeShader):
- """Stroke Shader for writing stroke data to a .svg file."""
- def __init__(self, name, style, filepath, res_y, split_at_invisible, frame_current):
- StrokeShader.__init__(self)
- # attribute 'name' of 'StrokeShader' objects is not writable, so _name is used
- self._name = name
- self.filepath = filepath
- self.h = res_y
- self.frame_current = frame_current
- self.elements = []
- self.split_at_invisible = split_at_invisible
- # put style attributes into a single svg path definition
- self.path = '\n<path ' + "".join('{}="{}" '.format(k, v) for k, v in style.items()) + 'd=" M '
-
- @classmethod
- def from_lineset(cls, lineset, filepath, res_y, split_at_invisible, frame_current, *, name=""):
- """Builds a SVGPathShader using data from the given lineset"""
- name = name or lineset.name
- linestyle = lineset.linestyle
- # extract style attributes from the linestyle
- style = {
- 'fill': 'none',
- 'stroke-width': linestyle.thickness,
- 'stroke-linecap': linestyle.caps.lower(),
- 'stroke-opacity': linestyle.alpha,
- 'stroke': 'rgb({}, {}, {})'.format(*(int(c * 255) for c in linestyle.color))
- }
- # get dashed line pattern (if specified)
- if linestyle.use_dashed_line:
- style['stroke-dasharray'] = ",".join(str(elem) for elem in get_dashed_pattern(linestyle))
- # return instance
- return cls(name, style, filepath, res_y, split_at_invisible, frame_current)
-
- @staticmethod
- def pathgen(stroke, path, height, split_at_invisible, f=lambda v: not v.attribute.visible):
- """Generator that creates SVG paths (as strings) from the current stroke """
- it = iter(stroke)
- # start first path
- yield path
- for v in it:
- x, y = v.point
- yield '{:.3f}, {:.3f} '.format(x, height - y)
- if split_at_invisible and v.attribute.visible == False:
- # end current and start new path;
- yield '" />' + path
- # fast-forward till the next visible vertex
- it = dropwhile(f, it)
- # yield next visible vertex
- svert = next(it, None)
- if svert is None:
- break
- x, y = svert.point
- yield '{:.3f}, {:.3f} '.format(x, height - y)
- # close current path
- yield '" />'
-
- def shade(self, stroke):
- stroke_to_paths = "".join(self.pathgen(stroke, self.path, self.h, self.split_at_invisible)).split("\n")
- # convert to actual XML, check to prevent empty paths
- self.elements.extend(et.XML(elem) for elem in stroke_to_paths if len(elem.strip()) > len(self.path))
-
- def write(self):
- """Wr
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list