[Bf-blender-cvs] [e3b68db] master: Freestyle: Py-Hooks for custom pre/post-processing line style

Tamito Kajiyama noreply at git.blender.org
Mon Nov 24 22:47:47 CET 2014


Commit: e3b68dbaf809a2370926ecc5739c28f80c0c1310
Author: Tamito Kajiyama
Date:   Mon Nov 24 22:41:34 2014 +0100
Branches: master
https://developer.blender.org/rBe3b68dbaf809a2370926ecc5739c28f80c0c1310

Freestyle: Py-Hooks for custom pre/post-processing line style

Patch D839, needed for SVG-render to be made into an addon.

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

M	release/scripts/freestyle/modules/parameter_editor.py

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

diff --git a/release/scripts/freestyle/modules/parameter_editor.py b/release/scripts/freestyle/modules/parameter_editor.py
index 9ac5c66..aad470e 100644
--- a/release/scripts/freestyle/modules/parameter_editor.py
+++ b/release/scripts/freestyle/modules/parameter_editor.py
@@ -97,7 +97,7 @@ from freestyle.utils import (
     stroke_normal,
     bound,
     pairwise,
-    BoundedProperty
+    BoundedProperty,
     )
 from _freestyle import (
     blendRamp,
@@ -110,6 +110,12 @@ from mathutils import Vector
 from math import pi, sin, cos, acos, radians
 from itertools import cycle, tee
 
+# lists of callback functions
+# WARNING: highly experimental, not a stable API
+callbacks_lineset_pre = []
+callbacks_modifiers_post = []
+callbacks_lineset_post = []
+
 
 class ColorRampModifier(StrokeShader):
     """Primitive for the color modifiers."""
@@ -878,6 +884,21 @@ class Seed:
 _seed = Seed()
 
 
+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
+
+
 integration_types = {
     'MEAN': IntegrationType.MEAN,
     'MIN': IntegrationType.MIN,
@@ -887,13 +908,19 @@ integration_types = {
 
 
 # main function for parameter processing
-
 def process(layer_name, lineset_name):
     scene = getCurrentScene()
     layer = scene.render.layers[layer_name]
     lineset = layer.freestyle_settings.linesets[lineset_name]
     linestyle = lineset.linestyle
 
+    # execute line set pre-processing callback functions
+    for fn in callbacks_lineset_pre:
+        try:
+            fn(scene, layer, lineset)
+        except Exception as e:
+            print(e)
+
     selection_criteria = []
     # prepare selection criteria by visibility
     if lineset.select_by_visibility:
@@ -1172,24 +1199,26 @@ def process(layer_name, lineset_name):
                 has_tex = True
     if has_tex:
         shaders_list.append(StrokeTextureStepShader(linestyle.texture_spacing))
+
+    # execute post-base stylization callbacks
+    for fn in callbacks_modifiers_post:
+        shaders_list.extend(fn(scene, layer, lineset))
+
     # -- Stroke caps -- #
     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)
+        pattern = get_dashed_pattern(linestyle)
         if len(pattern) > 0:
             shaders_list.append(DashedLineShader(pattern))
+
     # create strokes using the shaders list
     Operators.create(TrueUP1D(), shaders_list)
+
+    # execute line set post-processing callback functions
+    for fn in callbacks_lineset_post:
+        fn(scene, layer, lineset)




More information about the Bf-blender-cvs mailing list