Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTamito Kajiyama <rd6t-kjym@asahi-net.or.jp>2011-09-20 02:40:44 +0400
committerTamito Kajiyama <rd6t-kjym@asahi-net.or.jp>2011-09-20 02:40:44 +0400
commit38f24637d49f6d8742883d50fbae4738de56cd4c (patch)
tree2130195835b7ace773664538006364c21774b675
parent513293a2566016f6e2f1aba00f73910d14e71780 (diff)
Added new line style options for sketchy chaining of feature edges.
The default chaining option is now called "Natural", while the new chaining options are "Sketchy: Topology Preserved" and "Sketchy: Topology broken". The latter two options allow for generating chains of feature edges with a sketchy multiple touch. The "Sketchy: Topology Preserved" option takes account of the topology of objects in the view map, while the "Sketchy: Topology broken" ignores the edge topology. The "rounds" option specifies the number of rounds in sketchy strokes.
-rw-r--r--release/scripts/freestyle/style_modules/parameter_editor.py13
-rw-r--r--release/scripts/startup/bl_ui/properties_render.py8
-rw-r--r--source/blender/blenkernel/intern/linestyle.c2
-rw-r--r--source/blender/makesdna/DNA_linestyle_types.h7
-rw-r--r--source/blender/makesrna/intern/rna_linestyle.c17
5 files changed, 42 insertions, 5 deletions
diff --git a/release/scripts/freestyle/style_modules/parameter_editor.py b/release/scripts/freestyle/style_modules/parameter_editor.py
index 45c242fec8e..0324586b135 100644
--- a/release/scripts/freestyle/style_modules/parameter_editor.py
+++ b/release/scripts/freestyle/style_modules/parameter_editor.py
@@ -881,10 +881,15 @@ def process(layer_name, lineset_name):
upred = TrueUP1D()
Operators.select(upred)
# join feature edges to form chains
- bpred = AngleLargerThanBP1D(1.0) # XXX temporary fix for occasional unexpected long lines
- if linestyle.same_object:
- bpred = AndBP1D(bpred, SameShapeIdBP1D())
- Operators.bidirectionalChain(ChainPredicateIterator(upred, bpred), NotUP1D(upred))
+ if linestyle.chaining == "NATURAL":
+ bpred = AngleLargerThanBP1D(1.0) # XXX temporary fix for occasional unexpected long lines
+ if linestyle.same_object:
+ bpred = AndBP1D(bpred, SameShapeIdBP1D())
+ Operators.bidirectionalChain(ChainPredicateIterator(upred, bpred), NotUP1D(upred))
+ elif linestyle.chaining == "SKETCHY_TOPOLOGY_PRESERVED":
+ Operators.bidirectionalChain(pySketchyChainSilhouetteIterator(linestyle.rounds))
+ elif linestyle.chaining == "SKETCHY_TOPOLOGY_BROKEN":
+ Operators.bidirectionalChain(pySketchyChainingIterator(linestyle.rounds))
# split chains
if linestyle.material_boundary:
Operators.sequentialSplit(MaterialBoundaryUP0D())
diff --git a/release/scripts/startup/bl_ui/properties_render.py b/release/scripts/startup/bl_ui/properties_render.py
index f471ffc65e5..8d72fc95cf1 100644
--- a/release/scripts/startup/bl_ui/properties_render.py
+++ b/release/scripts/startup/bl_ui/properties_render.py
@@ -514,7 +514,13 @@ class RENDER_PT_freestyle_linestyle(RenderButtonsPanel, Panel):
# Chaining
col = layout.column()
col.label(text="Chaining:")
- col.prop(linestyle, "same_object")
+ col.prop(linestyle, "chaining", text="")
+ if linestyle.chaining == "NATURAL":
+ col.prop(linestyle, "same_object")
+ elif linestyle.chaining == "SKETCHY_TOPOLOGY_PRESERVED":
+ col.prop(linestyle, "rounds")
+ elif linestyle.chaining == "SKETCHY_TOPOLOGY_BROKEN":
+ col.prop(linestyle, "rounds")
# Splitting
col = layout.column()
col.label(text="Splitting:")
diff --git a/source/blender/blenkernel/intern/linestyle.c b/source/blender/blenkernel/intern/linestyle.c
index 86ea80cb89e..167f440ffd0 100644
--- a/source/blender/blenkernel/intern/linestyle.c
+++ b/source/blender/blenkernel/intern/linestyle.c
@@ -69,6 +69,8 @@ static void default_linestyle_settings(FreestyleLineStyle *linestyle)
linestyle->r = linestyle->g = linestyle->b = 0.0;
linestyle->alpha = 1.0;
linestyle->thickness = 1.0;
+ linestyle->chaining = LS_CHAINING_NATURAL;
+ linestyle->rounds = 3;
linestyle->min_length = 0.0f;
linestyle->max_length = 10000.0f;
diff --git a/source/blender/makesdna/DNA_linestyle_types.h b/source/blender/makesdna/DNA_linestyle_types.h
index 85468ce6657..d3536da2336 100644
--- a/source/blender/makesdna/DNA_linestyle_types.h
+++ b/source/blender/makesdna/DNA_linestyle_types.h
@@ -322,6 +322,11 @@ typedef struct LineStyleThicknessModifier_Calligraphy {
#define LS_MIN_2D_LENGTH 16
#define LS_MAX_2D_LENGTH 32
+/* FreestyleLineStyle::chaining */
+#define LS_CHAINING_NATURAL 1
+#define LS_CHAINING_SKETCHY_TOPOLOGY_PRESERVED 2
+#define LS_CHAINING_SKETCHY_TOPOLOGY_BROKEN 3
+
/* FreestyleLineStyle::caps */
#define LS_CAPS_BUTT 1
#define LS_CAPS_ROUND 2
@@ -334,6 +339,8 @@ typedef struct FreestyleLineStyle {
float r, g, b, alpha;
float thickness;
int flag, caps;
+ int chaining;
+ unsigned int rounds;
float min_length, max_length;
unsigned short dash1, gap1, dash2, gap2, dash3, gap3;
int panel; /* for UI */
diff --git a/source/blender/makesrna/intern/rna_linestyle.c b/source/blender/makesrna/intern/rna_linestyle.c
index 389d3746671..415379b39d1 100644
--- a/source/blender/makesrna/intern/rna_linestyle.c
+++ b/source/blender/makesrna/intern/rna_linestyle.c
@@ -674,6 +674,11 @@ static void rna_def_linestyle(BlenderRNA *brna)
{LS_PANEL_GEOMETRY, "GEOMETRY", 0, "Geometry", "Show the panel for stroke geometry options."},
{LS_PANEL_MISC, "MISC", 0, "Misc", "Show the panel for miscellaneous options."},
{0, NULL, 0, NULL, NULL}};
+ static EnumPropertyItem chaining_items[] = {
+ {LS_CHAINING_NATURAL, "NATURAL", 0, "Natural", "Natural chaining."},
+ {LS_CHAINING_SKETCHY_TOPOLOGY_PRESERVED, "SKETCHY_TOPOLOGY_PRESERVED", 0, "Sketchy: Topology Preserved", "Natural chaining with a sketchy multiple touch."},
+ {LS_CHAINING_SKETCHY_TOPOLOGY_BROKEN, "SKETCHY_TOPOLOGY_BROKEN", 0, "Sketchy: Topology Broken", "Sketchy chaining with a broken topology of objects."},
+ {0, NULL, 0, NULL, NULL}};
static EnumPropertyItem cap_items[] = {
{LS_CAPS_BUTT, "BUTT", 0, "Butt", "Butt cap (flat)."},
{LS_CAPS_ROUND, "ROUND", 0, "Round", "Round cap (half-circle)."},
@@ -723,6 +728,18 @@ static void rna_def_linestyle(BlenderRNA *brna)
RNA_def_property_struct_type(prop, "LineStyleThicknessModifier");
RNA_def_property_ui_text(prop, "Thickness Modifiers", "List of line thickness modifiers.");
+ prop= RNA_def_property(srna, "chaining", PROP_ENUM, PROP_NONE);
+ RNA_def_property_enum_sdna(prop, NULL, "chaining");
+ RNA_def_property_enum_items(prop, chaining_items);
+ RNA_def_property_ui_text(prop, "Chaining", "Select the way how feature edges are jointed to form chains.");
+ RNA_def_property_update(prop, NC_SCENE, NULL);
+
+ prop= RNA_def_property(srna, "rounds", PROP_INT, PROP_UNSIGNED);
+ RNA_def_property_int_sdna(prop, NULL, "rounds");
+ RNA_def_property_range(prop, 1, 1000);
+ RNA_def_property_ui_text(prop, "Rounds", "Number of rounds in a sketch multiple touch.");
+ RNA_def_property_update(prop, NC_SCENE, NULL);
+
prop= RNA_def_property(srna, "geometry_modifiers", PROP_COLLECTION, PROP_NONE);
RNA_def_property_collection_sdna(prop, NULL, "geometry_modifiers", NULL);
RNA_def_property_struct_type(prop, "LineStyleGeometryModifier");