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
path: root/source
diff options
context:
space:
mode:
authorFolkert de Vries <flokkievids@gmail.com>2015-07-10 15:57:23 +0300
committerTamito Kajiyama <rd6t-kjym@asahi-net.or.jp>2015-07-10 17:15:56 +0300
commiteeeb845d33e81afbc8ed127e6ab4ae7b18472a54 (patch)
tree78f8f3ecf9c4dd3bf4383ccc73520bcd2c6b2c7b /source
parent7837f0e8332f3726e0322b0c48b0da4d7c2d5813 (diff)
Freestyle: new stroke modifiers
This patch introduces a couple new stroke modifiers. The ones currently implemented are based on prototypes by @kjym3 and myself. The new modifiers: - Tangent - Thickness noise - Crease Angle - Simplification - Curvature 3D The documentation for these new modifier types can be found [[ http://www.blender.org/manual/render/freestyle/parameter_editor/index.html | in the manual ]]: {F134441} (left: AnisotropicThicknessShader, right: NoiseThicknessShader) {F140499} (left: Curvature 3D, right: Simplification) Author: Folkert de Vries (flokkievids) Reviewers: kjym3 Subscribers: #user_interface, plasmasolutions, kjym3 Projects: #bf_blender Differential Revision: https://developer.blender.org/D963
Diffstat (limited to 'source')
-rw-r--r--source/blender/blenkernel/intern/linestyle.c311
-rw-r--r--source/blender/blenloader/intern/readfile.c73
-rw-r--r--source/blender/blenloader/intern/writefile.c72
-rw-r--r--source/blender/freestyle/intern/python/BPy_FrsNoise.cpp32
-rw-r--r--source/blender/freestyle/intern/python/BPy_FrsNoise.h2
-rw-r--r--source/blender/freestyle/intern/stroke/BasicStrokeShaders.cpp2
-rw-r--r--source/blender/makesdna/DNA_linestyle_types.h128
-rw-r--r--source/blender/makesrna/RNA_access.h13
-rw-r--r--source/blender/makesrna/intern/rna_linestyle.c264
9 files changed, 894 insertions, 3 deletions
diff --git a/source/blender/blenkernel/intern/linestyle.c b/source/blender/blenkernel/intern/linestyle.c
index 40db411ef4c..901c6fd54d9 100644
--- a/source/blender/blenkernel/intern/linestyle.c
+++ b/source/blender/blenkernel/intern/linestyle.c
@@ -73,6 +73,11 @@ static const char *modifier_name[LS_MODIFIER_NUM] = {
"Blueprint",
"2D Offset",
"2D Transform",
+ "Tangent",
+ "Noise",
+ "Crease Angle",
+ "Simplification",
+ "3D Curvature",
};
static void default_linestyle_settings(FreestyleLineStyle *linestyle)
@@ -268,6 +273,18 @@ static LineStyleModifier *alloc_color_modifier(const char *name, int type)
case LS_MODIFIER_MATERIAL:
size = sizeof(LineStyleColorModifier_Material);
break;
+ case LS_MODIFIER_TANGENT:
+ size = sizeof(LineStyleColorModifier_Tangent);
+ break;
+ case LS_MODIFIER_NOISE:
+ size = sizeof(LineStyleColorModifier_Noise);
+ break;
+ case LS_MODIFIER_CREASE_ANGLE:
+ size = sizeof(LineStyleColorModifier_CreaseAngle);
+ break;
+ case LS_MODIFIER_CURVATURE_3D:
+ size = sizeof(LineStyleColorModifier_Curvature_3D);
+ break;
default:
return NULL; /* unknown modifier type */
}
@@ -304,6 +321,25 @@ LineStyleModifier *BKE_linestyle_color_modifier_add(FreestyleLineStyle *linestyl
((LineStyleColorModifier_Material *)m)->color_ramp = add_colorband(1);
((LineStyleColorModifier_Material *)m)->mat_attr = LS_MODIFIER_MATERIAL_LINE;
break;
+ case LS_MODIFIER_TANGENT:
+ ((LineStyleColorModifier_Tangent *)m)->color_ramp = add_colorband(1);
+ break;
+ case LS_MODIFIER_NOISE:
+ ((LineStyleColorModifier_Noise *)m)->color_ramp = add_colorband(1);
+ ((LineStyleColorModifier_Noise *)m)->amplitude = 10.0f;
+ ((LineStyleColorModifier_Noise *)m)->period = 10.0f;
+ ((LineStyleColorModifier_Noise *)m)->seed = 512;
+ break;
+ case LS_MODIFIER_CREASE_ANGLE:
+ ((LineStyleColorModifier_CreaseAngle *)m)->color_ramp = add_colorband(1);
+ ((LineStyleColorModifier_CreaseAngle *)m)->min_angle = 0.0f;
+ ((LineStyleColorModifier_CreaseAngle *)m)->max_angle = DEG2RADF(180.0f);
+ break;
+ case LS_MODIFIER_CURVATURE_3D:
+ ((LineStyleColorModifier_Curvature_3D *)m)->color_ramp = add_colorband(1);
+ ((LineStyleColorModifier_Curvature_3D *)m)->min_curvature = 0.0f;
+ ((LineStyleColorModifier_Curvature_3D *)m)->max_curvature = 0.5f;
+ break;
default:
return NULL; /* unknown modifier type */
}
@@ -362,6 +398,41 @@ LineStyleModifier *BKE_linestyle_color_modifier_copy(FreestyleLineStyle *linesty
q->mat_attr = p->mat_attr;
break;
}
+ case LS_MODIFIER_TANGENT:
+ {
+ LineStyleColorModifier_Tangent *p = (LineStyleColorModifier_Tangent *)m;
+ LineStyleColorModifier_Tangent *q = (LineStyleColorModifier_Tangent *)new_m;
+ q->color_ramp = MEM_dupallocN(p->color_ramp);
+ break;
+ }
+ case LS_MODIFIER_NOISE:
+ {
+ LineStyleColorModifier_Noise *p = (LineStyleColorModifier_Noise *)m;
+ LineStyleColorModifier_Noise *q = (LineStyleColorModifier_Noise *)new_m;
+ q->color_ramp = MEM_dupallocN(p->color_ramp);
+ q->amplitude = p->amplitude;
+ q->period = p->period;
+ q->seed = p->seed;
+ break;
+ }
+ case LS_MODIFIER_CREASE_ANGLE:
+ {
+ LineStyleColorModifier_CreaseAngle *p = (LineStyleColorModifier_CreaseAngle *)m;
+ LineStyleColorModifier_CreaseAngle *q = (LineStyleColorModifier_CreaseAngle *)new_m;
+ q->color_ramp = MEM_dupallocN(p->color_ramp);
+ q->min_angle = p->min_angle;
+ q->max_angle = p->max_angle;
+ break;
+ }
+ case LS_MODIFIER_CURVATURE_3D:
+ {
+ LineStyleColorModifier_Curvature_3D *p = (LineStyleColorModifier_Curvature_3D *)m;
+ LineStyleColorModifier_Curvature_3D *q = (LineStyleColorModifier_Curvature_3D *)new_m;
+ q->color_ramp = MEM_dupallocN(p->color_ramp);
+ q->min_curvature = p->min_curvature;
+ q->max_curvature = p->max_curvature;
+ break;
+ }
default:
return NULL; /* unknown modifier type */
}
@@ -387,6 +458,18 @@ int BKE_linestyle_color_modifier_remove(FreestyleLineStyle *linestyle, LineStyle
case LS_MODIFIER_MATERIAL:
MEM_freeN(((LineStyleColorModifier_Material *)m)->color_ramp);
break;
+ case LS_MODIFIER_TANGENT:
+ MEM_freeN(((LineStyleColorModifier_Tangent *)m)->color_ramp);
+ break;
+ case LS_MODIFIER_NOISE:
+ MEM_freeN(((LineStyleColorModifier_Noise *)m)->color_ramp);
+ break;
+ case LS_MODIFIER_CREASE_ANGLE:
+ MEM_freeN(((LineStyleColorModifier_CreaseAngle *)m)->color_ramp);
+ break;
+ case LS_MODIFIER_CURVATURE_3D:
+ MEM_freeN(((LineStyleColorModifier_Curvature_3D *)m)->color_ramp);
+ break;
}
BLI_freelinkN(&linestyle->color_modifiers, m);
return 0;
@@ -409,6 +492,18 @@ static LineStyleModifier *alloc_alpha_modifier(const char *name, int type)
case LS_MODIFIER_MATERIAL:
size = sizeof(LineStyleAlphaModifier_Material);
break;
+ case LS_MODIFIER_TANGENT:
+ size = sizeof(LineStyleAlphaModifier_Tangent);
+ break;
+ case LS_MODIFIER_NOISE:
+ size = sizeof(LineStyleAlphaModifier_Noise);
+ break;
+ case LS_MODIFIER_CREASE_ANGLE:
+ size = sizeof(LineStyleAlphaModifier_CreaseAngle);
+ break;
+ case LS_MODIFIER_CURVATURE_3D:
+ size = sizeof(LineStyleAlphaModifier_Curvature_3D);
+ break;
default:
return NULL; /* unknown modifier type */
}
@@ -453,6 +548,37 @@ LineStyleModifier *BKE_linestyle_alpha_modifier_add(FreestyleLineStyle *linestyl
p->mat_attr = LS_MODIFIER_MATERIAL_LINE_A;
break;
}
+ case LS_MODIFIER_TANGENT:
+ {
+ LineStyleAlphaModifier_Tangent *p = (LineStyleAlphaModifier_Tangent *)m;
+ p->curve = curvemapping_add(1, 0.0f, 0.0f, 1.0f, 1.0f);
+ break;
+ }
+ case LS_MODIFIER_NOISE:
+ {
+ LineStyleAlphaModifier_Noise *p = (LineStyleAlphaModifier_Noise *)m;
+ p->curve = curvemapping_add(1, 0.0f, 0.0f, 1.0f, 1.0f);
+ ((LineStyleAlphaModifier_Noise *)m)->amplitude = 10.0f;
+ ((LineStyleAlphaModifier_Noise *)m)->period = 10.0f;
+ ((LineStyleAlphaModifier_Noise *)m)->seed = 512;
+ break;
+ }
+ case LS_MODIFIER_CREASE_ANGLE:
+ {
+ LineStyleAlphaModifier_CreaseAngle *p = (LineStyleAlphaModifier_CreaseAngle *)m;
+ p->curve = curvemapping_add(1, 0.0f, 0.0f, 1.0f, 1.0f);
+ ((LineStyleAlphaModifier_CreaseAngle *)m)->min_angle = 0.0f;
+ ((LineStyleAlphaModifier_CreaseAngle *)m)->max_angle = DEG2RADF(180.0f);
+ break;
+ }
+ case LS_MODIFIER_CURVATURE_3D:
+ {
+ LineStyleAlphaModifier_Curvature_3D *p = (LineStyleAlphaModifier_Curvature_3D *)m;
+ p->curve = curvemapping_add(1, 0.0f, 0.0f, 1.0f, 1.0f);
+ ((LineStyleAlphaModifier_Curvature_3D *)m)->min_curvature = 0.0f;
+ ((LineStyleAlphaModifier_Curvature_3D *)m)->max_curvature = 0.5f;
+ break;
+ }
default:
return NULL; /* unknown modifier type */
}
@@ -511,6 +637,45 @@ LineStyleModifier *BKE_linestyle_alpha_modifier_copy(FreestyleLineStyle *linesty
q->mat_attr = p->mat_attr;
break;
}
+ case LS_MODIFIER_TANGENT:
+ {
+ LineStyleAlphaModifier_Tangent *p = (LineStyleAlphaModifier_Tangent *)m;
+ LineStyleAlphaModifier_Tangent *q = (LineStyleAlphaModifier_Tangent *)new_m;
+ q->curve = curvemapping_copy(p->curve);
+ q->flags = p->flags;
+ break;
+ }
+ case LS_MODIFIER_NOISE:
+ {
+ LineStyleAlphaModifier_Noise *p = (LineStyleAlphaModifier_Noise *)m;
+ LineStyleAlphaModifier_Noise *q = (LineStyleAlphaModifier_Noise *)new_m;
+ q->curve = curvemapping_copy(p->curve);
+ q->flags = p->flags;
+ q->amplitude = p->amplitude;
+ q->period = p->period;
+ q->seed = p->seed;
+ break;
+ }
+ case LS_MODIFIER_CREASE_ANGLE:
+ {
+ LineStyleAlphaModifier_CreaseAngle *p = (LineStyleAlphaModifier_CreaseAngle *)m;
+ LineStyleAlphaModifier_CreaseAngle *q = (LineStyleAlphaModifier_CreaseAngle *)new_m;
+ q->curve = curvemapping_copy(p->curve);
+ q->flags = p->flags;
+ q->min_angle = p->min_angle;
+ q->max_angle = p->max_angle;
+ break;
+ }
+ case LS_MODIFIER_CURVATURE_3D:
+ {
+ LineStyleAlphaModifier_Curvature_3D *p = (LineStyleAlphaModifier_Curvature_3D *)m;
+ LineStyleAlphaModifier_Curvature_3D *q = (LineStyleAlphaModifier_Curvature_3D *)new_m;
+ q->curve = curvemapping_copy(p->curve);
+ q->flags = p->flags;
+ q->min_curvature = p->min_curvature;
+ q->max_curvature = p->max_curvature;
+ break;
+ }
default:
return NULL; /* unknown modifier type */
}
@@ -536,6 +701,18 @@ int BKE_linestyle_alpha_modifier_remove(FreestyleLineStyle *linestyle, LineStyle
case LS_MODIFIER_MATERIAL:
curvemapping_free(((LineStyleAlphaModifier_Material *)m)->curve);
break;
+ case LS_MODIFIER_TANGENT:
+ curvemapping_free(((LineStyleAlphaModifier_Tangent *)m)->curve);
+ break;
+ case LS_MODIFIER_NOISE:
+ curvemapping_free(((LineStyleAlphaModifier_Noise *)m)->curve);
+ break;
+ case LS_MODIFIER_CREASE_ANGLE:
+ curvemapping_free(((LineStyleAlphaModifier_CreaseAngle *)m)->curve);
+ break;
+ case LS_MODIFIER_CURVATURE_3D:
+ curvemapping_free(((LineStyleAlphaModifier_Curvature_3D *)m)->curve);
+ break;
}
BLI_freelinkN(&linestyle->alpha_modifiers, m);
return 0;
@@ -561,6 +738,18 @@ static LineStyleModifier *alloc_thickness_modifier(const char *name, int type)
case LS_MODIFIER_CALLIGRAPHY:
size = sizeof(LineStyleThicknessModifier_Calligraphy);
break;
+ case LS_MODIFIER_TANGENT:
+ size = sizeof(LineStyleThicknessModifier_Tangent);
+ break;
+ case LS_MODIFIER_NOISE:
+ size = sizeof(LineStyleThicknessModifier_Noise);
+ break;
+ case LS_MODIFIER_CREASE_ANGLE:
+ size = sizeof(LineStyleThicknessModifier_CreaseAngle);
+ break;
+ case LS_MODIFIER_CURVATURE_3D:
+ size = sizeof(LineStyleThicknessModifier_Curvature_3D);
+ break;
default:
return NULL; /* unknown modifier type */
}
@@ -622,6 +811,43 @@ LineStyleModifier *BKE_linestyle_thickness_modifier_add(FreestyleLineStyle *line
p->orientation = DEG2RADF(60.0f);
break;
}
+ case LS_MODIFIER_TANGENT:
+ {
+ LineStyleThicknessModifier_Tangent *p = (LineStyleThicknessModifier_Tangent *)m;
+ p->curve = curvemapping_add(1, 0.0f, 0.0f, 1.0f, 1.0f);
+ p->min_thickness = 1.0f;
+ p->max_thickness = 10.0f;
+ break;
+ }
+ case LS_MODIFIER_NOISE:
+ {
+ LineStyleThicknessModifier_Noise *p = (LineStyleThicknessModifier_Noise *)m;
+ p->period = 10.0f;
+ p->amplitude = 10.0f;
+ p->seed = 512;
+ p->flags = LS_THICKNESS_ASYMMETRIC;
+ break;
+ }
+ case LS_MODIFIER_CREASE_ANGLE:
+ {
+ LineStyleThicknessModifier_CreaseAngle *p = (LineStyleThicknessModifier_CreaseAngle *)m;
+ p->curve = curvemapping_add(1, 0.0f, 0.0f, 1.0f, 1.0f);
+ p->min_angle = 0.0f;
+ p->max_angle = DEG2RADF(180.0f);
+ p->min_thickness = 1.0f;
+ p->max_thickness = 10.0f;
+ break;
+ }
+ case LS_MODIFIER_CURVATURE_3D:
+ {
+ LineStyleThicknessModifier_Curvature_3D *p = (LineStyleThicknessModifier_Curvature_3D *)m;
+ p->curve = curvemapping_add(1, 0.0f, 0.0f, 1.0f, 1.0f);
+ p->min_curvature = 0.0f;
+ p->max_curvature = 0.5f;
+ p->min_thickness = 1.0f;
+ p->max_thickness = 10.0f;
+ break;
+ }
default:
return NULL; /* unknown modifier type */
}
@@ -699,6 +925,50 @@ LineStyleModifier *BKE_linestyle_thickness_modifier_copy(FreestyleLineStyle *lin
q->orientation = p->orientation;
break;
}
+ case LS_MODIFIER_TANGENT:
+ {
+ LineStyleThicknessModifier_Tangent *p = (LineStyleThicknessModifier_Tangent *)m;
+ LineStyleThicknessModifier_Tangent *q = (LineStyleThicknessModifier_Tangent *)new_m;
+ q->curve = curvemapping_copy(p->curve);
+ q->flags = p->flags;
+ q->min_thickness = p->min_thickness;
+ q->max_thickness = p->max_thickness;
+ break;
+ }
+ case LS_MODIFIER_NOISE:
+ {
+ LineStyleThicknessModifier_Noise *p = (LineStyleThicknessModifier_Noise *)m;
+ LineStyleThicknessModifier_Noise *q = (LineStyleThicknessModifier_Noise *)new_m;
+ q->amplitude = p->amplitude;
+ q->period = p->period;
+ q->seed = p->seed;
+ q->flags = p->flags;
+ break;
+ }
+ case LS_MODIFIER_CURVATURE_3D:
+ {
+ LineStyleThicknessModifier_Curvature_3D *p = (LineStyleThicknessModifier_Curvature_3D *)m;
+ LineStyleThicknessModifier_Curvature_3D *q = (LineStyleThicknessModifier_Curvature_3D *)new_m;
+ q->curve = curvemapping_copy(p->curve);
+ q->flags = p->flags;
+ q->min_curvature = p->min_curvature;
+ q->max_curvature = p->max_curvature;
+ q->min_thickness = p->min_thickness;
+ q->max_thickness = p->max_thickness;
+ break;
+ }
+ case LS_MODIFIER_CREASE_ANGLE:
+ {
+ LineStyleThicknessModifier_CreaseAngle *p = (LineStyleThicknessModifier_CreaseAngle *)m;
+ LineStyleThicknessModifier_CreaseAngle *q = (LineStyleThicknessModifier_CreaseAngle *)new_m;
+ q->curve = curvemapping_copy(p->curve);
+ q->flags = p->flags;
+ q->min_angle = p->min_angle;
+ q->max_angle = p->max_angle;
+ q->min_thickness = p->min_thickness;
+ q->max_thickness = p->max_thickness;
+ break;
+ }
default:
return NULL; /* unknown modifier type */
}
@@ -726,6 +996,15 @@ int BKE_linestyle_thickness_modifier_remove(FreestyleLineStyle *linestyle, LineS
break;
case LS_MODIFIER_CALLIGRAPHY:
break;
+ case LS_MODIFIER_TANGENT:
+ curvemapping_free(((LineStyleThicknessModifier_Tangent *)m)->curve);
+ break;
+ case LS_MODIFIER_NOISE:
+ break;
+ case LS_MODIFIER_CREASE_ANGLE:
+ break;
+ case LS_MODIFIER_CURVATURE_3D:
+ break;
}
BLI_freelinkN(&linestyle->thickness_modifiers, m);
return 0;
@@ -775,6 +1054,9 @@ static LineStyleModifier *alloc_geometry_modifier(const char *name, int type)
case LS_MODIFIER_2D_TRANSFORM:
size = sizeof(LineStyleGeometryModifier_2DTransform);
break;
+ case LS_MODIFIER_SIMPLIFICATION:
+ size = sizeof(LineStyleGeometryModifier_Simplification);
+ break;
default:
return NULL; /* unknown modifier type */
}
@@ -892,6 +1174,12 @@ LineStyleModifier *BKE_linestyle_geometry_modifier_add(FreestyleLineStyle *lines
p->pivot_y = 0.0f;
break;
}
+ case LS_MODIFIER_SIMPLIFICATION:
+ {
+ LineStyleGeometryModifier_Simplification *p = (LineStyleGeometryModifier_Simplification *)m;
+ p->tolerance = 0.1f;
+ break;
+ }
default:
return NULL; /* unknown modifier type */
}
@@ -1026,6 +1314,13 @@ LineStyleModifier *BKE_linestyle_geometry_modifier_copy(FreestyleLineStyle *line
q->pivot_y = p->pivot_y;
break;
}
+ case LS_MODIFIER_SIMPLIFICATION:
+ {
+ LineStyleGeometryModifier_Simplification *p = (LineStyleGeometryModifier_Simplification *)m;
+ LineStyleGeometryModifier_Simplification *q = (LineStyleGeometryModifier_Simplification *)new_m;
+ q->tolerance = p->tolerance;
+ break;
+ }
default:
return NULL; /* unknown modifier type */
}
@@ -1125,6 +1420,22 @@ char *BKE_linestyle_path_to_color_ramp(FreestyleLineStyle *linestyle, ColorBand
if (color_ramp == ((LineStyleColorModifier_Material *)m)->color_ramp)
found = true;
break;
+ case LS_MODIFIER_TANGENT:
+ if (color_ramp == ((LineStyleColorModifier_Tangent *)m)->color_ramp)
+ found = true;
+ break;
+ case LS_MODIFIER_NOISE:
+ if (color_ramp == ((LineStyleColorModifier_Noise *)m)->color_ramp)
+ found = true;
+ break;
+ case LS_MODIFIER_CREASE_ANGLE:
+ if (color_ramp == ((LineStyleColorModifier_CreaseAngle*)m)->color_ramp)
+ found = true;
+ break;
+ case LS_MODIFIER_CURVATURE_3D:
+ if (color_ramp == ((LineStyleColorModifier_Curvature_3D *)m)->color_ramp)
+ found = true;
+ break;
}
if (found) {
diff --git a/source/blender/blenloader/intern/readfile.c b/source/blender/blenloader/intern/readfile.c
index 9976594ad0b..2eba2b274b3 100644
--- a/source/blender/blenloader/intern/readfile.c
+++ b/source/blender/blenloader/intern/readfile.c
@@ -7371,6 +7371,30 @@ static void direct_link_linestyle_color_modifier(FileData *fd, LineStyleModifier
m->color_ramp = newdataadr(fd, m->color_ramp);
}
break;
+ case LS_MODIFIER_TANGENT:
+ {
+ LineStyleColorModifier_Tangent *m = (LineStyleColorModifier_Tangent *)modifier;
+ m->color_ramp = newdataadr(fd, m->color_ramp);
+ }
+ break;
+ case LS_MODIFIER_NOISE:
+ {
+ LineStyleColorModifier_Noise *m = (LineStyleColorModifier_Noise *)modifier;
+ m->color_ramp = newdataadr(fd, m->color_ramp);
+ }
+ break;
+ case LS_MODIFIER_CREASE_ANGLE:
+ {
+ LineStyleColorModifier_CreaseAngle *m = (LineStyleColorModifier_CreaseAngle *)modifier;
+ m->color_ramp = newdataadr(fd, m->color_ramp);
+ }
+ break;
+ case LS_MODIFIER_CURVATURE_3D:
+ {
+ LineStyleColorModifier_Curvature_3D *m = (LineStyleColorModifier_Curvature_3D *)modifier;
+ m->color_ramp = newdataadr(fd, m->color_ramp);
+ }
+ break;
}
}
@@ -7405,6 +7429,34 @@ static void direct_link_linestyle_alpha_modifier(FileData *fd, LineStyleModifier
direct_link_curvemapping(fd, m->curve);
}
break;
+ case LS_MODIFIER_TANGENT:
+ {
+ LineStyleAlphaModifier_Tangent *m = (LineStyleAlphaModifier_Tangent *)modifier;
+ m->curve = newdataadr(fd, m->curve);
+ direct_link_curvemapping(fd, m->curve);
+ }
+ break;
+ case LS_MODIFIER_NOISE:
+ {
+ LineStyleAlphaModifier_Noise *m = (LineStyleAlphaModifier_Noise *)modifier;
+ m->curve = newdataadr(fd, m->curve);
+ direct_link_curvemapping(fd, m->curve);
+ }
+ break;
+ case LS_MODIFIER_CREASE_ANGLE:
+ {
+ LineStyleAlphaModifier_CreaseAngle *m = (LineStyleAlphaModifier_CreaseAngle *)modifier;
+ m->curve = newdataadr(fd, m->curve);
+ direct_link_curvemapping(fd, m->curve);
+ }
+ break;
+ case LS_MODIFIER_CURVATURE_3D:
+ {
+ LineStyleAlphaModifier_Curvature_3D *m = (LineStyleAlphaModifier_Curvature_3D *)modifier;
+ m->curve = newdataadr(fd, m->curve);
+ direct_link_curvemapping(fd, m->curve);
+ }
+ break;
}
}
@@ -7439,6 +7491,27 @@ static void direct_link_linestyle_thickness_modifier(FileData *fd, LineStyleModi
direct_link_curvemapping(fd, m->curve);
}
break;
+ case LS_MODIFIER_TANGENT:
+ {
+ LineStyleThicknessModifier_Tangent *m = (LineStyleThicknessModifier_Tangent *)modifier;
+ m->curve = newdataadr(fd, m->curve);
+ direct_link_curvemapping(fd, m->curve);
+ }
+ break;
+ case LS_MODIFIER_CREASE_ANGLE:
+ {
+ LineStyleThicknessModifier_CreaseAngle *m = (LineStyleThicknessModifier_CreaseAngle *)modifier;
+ m->curve = newdataadr(fd, m->curve);
+ direct_link_curvemapping(fd, m->curve);
+ }
+ break;
+ case LS_MODIFIER_CURVATURE_3D:
+ {
+ LineStyleThicknessModifier_Curvature_3D *m = (LineStyleThicknessModifier_Curvature_3D *)modifier;
+ m->curve = newdataadr(fd, m->curve);
+ direct_link_curvemapping(fd, m->curve);
+ }
+ break;
}
}
diff --git a/source/blender/blenloader/intern/writefile.c b/source/blender/blenloader/intern/writefile.c
index aa44b484f03..25d3f4f0dfb 100644
--- a/source/blender/blenloader/intern/writefile.c
+++ b/source/blender/blenloader/intern/writefile.c
@@ -3354,6 +3354,18 @@ static void write_linestyle_color_modifiers(WriteData *wd, ListBase *modifiers)
case LS_MODIFIER_MATERIAL:
struct_name = "LineStyleColorModifier_Material";
break;
+ case LS_MODIFIER_TANGENT:
+ struct_name = "LineStyleColorModifier_Tangent";
+ break;
+ case LS_MODIFIER_NOISE:
+ struct_name = "LineStyleColorModifier_Noise";
+ break;
+ case LS_MODIFIER_CREASE_ANGLE:
+ struct_name = "LineStyleColorModifier_CreaseAngle";
+ break;
+ case LS_MODIFIER_CURVATURE_3D:
+ struct_name = "LineStyleColorModifier_Curvature_3D";
+ break;
default:
struct_name = "LineStyleColorModifier"; /* this should not happen */
}
@@ -3373,6 +3385,18 @@ static void write_linestyle_color_modifiers(WriteData *wd, ListBase *modifiers)
case LS_MODIFIER_MATERIAL:
writestruct(wd, DATA, "ColorBand", 1, ((LineStyleColorModifier_Material *)m)->color_ramp);
break;
+ case LS_MODIFIER_TANGENT:
+ writestruct(wd, DATA, "ColorBand", 1, ((LineStyleColorModifier_Tangent *)m)->color_ramp);
+ break;
+ case LS_MODIFIER_NOISE:
+ writestruct(wd, DATA, "ColorBand", 1, ((LineStyleColorModifier_Noise *)m)->color_ramp);
+ break;
+ case LS_MODIFIER_CREASE_ANGLE:
+ writestruct(wd, DATA, "ColorBand", 1, ((LineStyleColorModifier_CreaseAngle *)m)->color_ramp);
+ break;
+ case LS_MODIFIER_CURVATURE_3D:
+ writestruct(wd, DATA, "ColorBand", 1, ((LineStyleColorModifier_Curvature_3D *)m)->color_ramp);
+ break;
}
}
}
@@ -3396,6 +3420,18 @@ static void write_linestyle_alpha_modifiers(WriteData *wd, ListBase *modifiers)
case LS_MODIFIER_MATERIAL:
struct_name = "LineStyleAlphaModifier_Material";
break;
+ case LS_MODIFIER_TANGENT:
+ struct_name = "LineStyleAlphaModifier_Tangent";
+ break;
+ case LS_MODIFIER_NOISE:
+ struct_name = "LineStyleAlphaModifier_Noise";
+ break;
+ case LS_MODIFIER_CREASE_ANGLE:
+ struct_name = "LineStyleAlphaModifier_CreaseAngle";
+ break;
+ case LS_MODIFIER_CURVATURE_3D:
+ struct_name = "LineStyleAlphaModifier_Curvature_3D";
+ break;
default:
struct_name = "LineStyleAlphaModifier"; /* this should not happen */
}
@@ -3415,6 +3451,18 @@ static void write_linestyle_alpha_modifiers(WriteData *wd, ListBase *modifiers)
case LS_MODIFIER_MATERIAL:
write_curvemapping(wd, ((LineStyleAlphaModifier_Material *)m)->curve);
break;
+ case LS_MODIFIER_TANGENT:
+ write_curvemapping(wd, ((LineStyleAlphaModifier_Tangent *)m)->curve);
+ break;
+ case LS_MODIFIER_NOISE:
+ write_curvemapping(wd, ((LineStyleAlphaModifier_Noise *)m)->curve);
+ break;
+ case LS_MODIFIER_CREASE_ANGLE:
+ write_curvemapping(wd, ((LineStyleAlphaModifier_CreaseAngle *)m)->curve);
+ break;
+ case LS_MODIFIER_CURVATURE_3D:
+ write_curvemapping(wd, ((LineStyleAlphaModifier_Curvature_3D *)m)->curve);
+ break;
}
}
}
@@ -3441,6 +3489,18 @@ static void write_linestyle_thickness_modifiers(WriteData *wd, ListBase *modifie
case LS_MODIFIER_CALLIGRAPHY:
struct_name = "LineStyleThicknessModifier_Calligraphy";
break;
+ case LS_MODIFIER_TANGENT:
+ struct_name = "LineStyleThicknessModifier_Tangent";
+ break;
+ case LS_MODIFIER_NOISE:
+ struct_name = "LineStyleThicknessModifier_Noise";
+ break;
+ case LS_MODIFIER_CREASE_ANGLE:
+ struct_name = "LineStyleThicknessModifier_CreaseAngle";
+ break;
+ case LS_MODIFIER_CURVATURE_3D:
+ struct_name = "LineStyleThicknessModifier_Curvature_3D";
+ break;
default:
struct_name = "LineStyleThicknessModifier"; /* this should not happen */
}
@@ -3460,6 +3520,15 @@ static void write_linestyle_thickness_modifiers(WriteData *wd, ListBase *modifie
case LS_MODIFIER_MATERIAL:
write_curvemapping(wd, ((LineStyleThicknessModifier_Material *)m)->curve);
break;
+ case LS_MODIFIER_TANGENT:
+ write_curvemapping(wd, ((LineStyleThicknessModifier_Tangent *)m)->curve);
+ break;
+ case LS_MODIFIER_CREASE_ANGLE:
+ write_curvemapping(wd, ((LineStyleThicknessModifier_CreaseAngle *)m)->curve);
+ break;
+ case LS_MODIFIER_CURVATURE_3D:
+ write_curvemapping(wd, ((LineStyleThicknessModifier_Curvature_3D *)m)->curve);
+ break;
}
}
}
@@ -3510,6 +3579,9 @@ static void write_linestyle_geometry_modifiers(WriteData *wd, ListBase *modifier
case LS_MODIFIER_2D_TRANSFORM:
struct_name = "LineStyleGeometryModifier_2DTransform";
break;
+ case LS_MODIFIER_SIMPLIFICATION:
+ struct_name = "LineStyleGeometryModifier_Simplification";
+ break;
default:
struct_name = "LineStyleGeometryModifier"; /* this should not happen */
}
diff --git a/source/blender/freestyle/intern/python/BPy_FrsNoise.cpp b/source/blender/freestyle/intern/python/BPy_FrsNoise.cpp
index 39e4aed7cc0..21a5ceaa3b2 100644
--- a/source/blender/freestyle/intern/python/BPy_FrsNoise.cpp
+++ b/source/blender/freestyle/intern/python/BPy_FrsNoise.cpp
@@ -25,6 +25,8 @@
#include "BPy_FrsNoise.h"
#include "BPy_Convert.h"
+#include "../system/RandGen.h"
+
#include <sstream>
#ifdef __cplusplus
@@ -69,12 +71,14 @@ static int FrsNoise_init(BPy_FrsNoise *self, PyObject *args, PyObject *kwds)
if (!PyArg_ParseTupleAndKeywords(args, kwds, "|l", (char **)kwlist, &seed))
return -1;
self->n = new Noise(seed);
+ self->pn = new PseudoNoise();
return 0;
}
static void FrsNoise_dealloc(BPy_FrsNoise *self)
{
delete self->n;
+ delete self->pn;
Py_TYPE(self)->tp_free((PyObject *)self);
}
@@ -99,6 +103,32 @@ PyDoc_STRVAR(FrsNoise_turbulence1_doc,
" :return: A noise value.\n"
" :rtype: float");
+static PyObject *FrsNoise_drand(BPy_FrsNoise *self, PyObject *args, PyObject *kwds)
+{
+ static const char *kwlist[] = {"seed", NULL};
+ long seed = 0;
+ if (!PyArg_ParseTupleAndKeywords(args, kwds, "|I", (char **)kwlist, &seed)) {
+ PyErr_SetString(PyExc_TypeError, "optional argument 1 must be of type int");
+ return NULL;
+ }
+ if (seed){
+ RandGen::srand48(seed);
+ }
+ return PyFloat_FromDouble(RandGen::drand48());
+}
+
+static PyObject *FrsNoise_turbulence_smooth(BPy_FrsNoise *self, PyObject *args, PyObject *kwds)
+{
+ static const char *kwlist[] = {"v", "oct", NULL};
+
+ double x; // note: this has to be a double (not float)
+ unsigned nbOctaves = 8;
+
+ if (!PyArg_ParseTupleAndKeywords(args, kwds, "d|I", (char **)kwlist, &x, &nbOctaves))
+ return NULL;
+ return PyFloat_FromDouble(self->pn->turbulenceSmooth(x, nbOctaves));
+}
+
static PyObject *FrsNoise_turbulence1(BPy_FrsNoise *self, PyObject *args, PyObject *kwds)
{
static const char *kwlist[] = {"v", "freq", "amp", "oct", NULL};
@@ -257,6 +287,8 @@ static PyMethodDef BPy_FrsNoise_methods[] = {
{"smoothNoise1", (PyCFunction)FrsNoise_smoothNoise1, METH_VARARGS | METH_KEYWORDS, FrsNoise_smoothNoise1_doc},
{"smoothNoise2", (PyCFunction)FrsNoise_smoothNoise2, METH_VARARGS | METH_KEYWORDS, FrsNoise_smoothNoise2_doc},
{"smoothNoise3", (PyCFunction)FrsNoise_smoothNoise3, METH_VARARGS | METH_KEYWORDS, FrsNoise_smoothNoise3_doc},
+ {"rand", (PyCFunction)FrsNoise_drand, METH_VARARGS | METH_KEYWORDS, NULL},
+ {"turbulence_smooth", (PyCFunction)FrsNoise_turbulence_smooth, METH_VARARGS | METH_KEYWORDS, NULL},
{NULL, NULL, 0, NULL}
};
diff --git a/source/blender/freestyle/intern/python/BPy_FrsNoise.h b/source/blender/freestyle/intern/python/BPy_FrsNoise.h
index 19788e30a43..a5a1064ea8d 100644
--- a/source/blender/freestyle/intern/python/BPy_FrsNoise.h
+++ b/source/blender/freestyle/intern/python/BPy_FrsNoise.h
@@ -30,6 +30,7 @@ extern "C" {
}
#include "../geometry/Noise.h"
+#include "../system/PseudoNoise.h"
using namespace Freestyle;
@@ -47,6 +48,7 @@ extern PyTypeObject FrsNoise_Type;
typedef struct {
PyObject_HEAD
Noise *n;
+ PseudoNoise *pn;
} BPy_FrsNoise;
/*---------------------------Python BPy_FrsNoise visible prototypes-----------*/
diff --git a/source/blender/freestyle/intern/stroke/BasicStrokeShaders.cpp b/source/blender/freestyle/intern/stroke/BasicStrokeShaders.cpp
index 11b7df7ecec..eed90a53d77 100644
--- a/source/blender/freestyle/intern/stroke/BasicStrokeShaders.cpp
+++ b/source/blender/freestyle/intern/stroke/BasicStrokeShaders.cpp
@@ -185,7 +185,7 @@ int ThicknessNoiseShader::shade(Stroke& stroke) const
real bruit, bruit2;
PseudoNoise mynoise, mynoise2;
for (vend = stroke.strokeVerticesEnd(); v != vend; ++v) {
- bruit = mynoise.turbulenceSmooth(_scale * v->curvilinearAbscissa() + initU1, 2); // 2 : nbOctaves
+ bruit = mynoise.turbulenceSmooth(_scale * v->curvilinearAbscissa() + initU1, 2); // 2 : nbOctaves
bruit2 = mynoise2.turbulenceSmooth(_scale * v->curvilinearAbscissa() + initU2, 2); // 2 : nbOctaves
const float *originalThickness = v->attribute().getThickness();
float r = bruit * _amplitude + originalThickness[0];
diff --git a/source/blender/makesdna/DNA_linestyle_types.h b/source/blender/makesdna/DNA_linestyle_types.h
index ac848600c2d..c613dd3d856 100644
--- a/source/blender/makesdna/DNA_linestyle_types.h
+++ b/source/blender/makesdna/DNA_linestyle_types.h
@@ -79,7 +79,12 @@ typedef struct LineStyleModifier {
#define LS_MODIFIER_BLUEPRINT 16
#define LS_MODIFIER_2D_OFFSET 17
#define LS_MODIFIER_2D_TRANSFORM 18
-#define LS_MODIFIER_NUM 19
+#define LS_MODIFIER_TANGENT 19
+#define LS_MODIFIER_NOISE 20
+#define LS_MODIFIER_CREASE_ANGLE 21
+#define LS_MODIFIER_SIMPLIFICATION 22
+#define LS_MODIFIER_CURVATURE_3D 23
+#define LS_MODIFIER_NUM 24
/* LineStyleModifier::flags */
#define LS_MODIFIER_ENABLED 1
@@ -92,6 +97,9 @@ typedef struct LineStyleModifier {
#define LS_MODIFIER_USE_CURVE 1
#define LS_MODIFIER_INVERT 2
+/* flags (for asymmetric thickness application) */
+#define LS_THICKNESS_ASYMMETRIC 1
+
/* blend (for alpha & thickness) */
#define LS_VALUE_BLEND 0
#define LS_VALUE_ADD 1
@@ -186,6 +194,117 @@ typedef struct LineStyleThicknessModifier_DistanceFromObject {
int pad;
} LineStyleThicknessModifier_DistanceFromObject;
+/* 3D curvature modifiers */
+
+typedef struct LineStyleColorModifier_Curvature_3D {
+ struct LineStyleModifier modifier;
+
+ float min_curvature, max_curvature;
+
+ struct ColorBand *color_ramp;
+ float range_min, range_max;
+}LineStyleColorModifier_Curvature_3D;
+
+typedef struct LineStyleAlphaModifier_Curvature_3D {
+ struct LineStyleModifier modifier;
+
+ struct CurveMapping *curve;
+ int flags;
+ float min_curvature, max_curvature;
+ int pad;
+}LineStyleAlphaModifier_Curvature_3D;
+
+typedef struct LineStyleThicknessModifier_Curvature_3D {
+ struct LineStyleModifier modifier;
+
+ struct CurveMapping *curve;
+ int flags, pad;
+
+ float min_curvature, max_curvature;
+ float min_thickness, max_thickness;
+}LineStyleThicknessModifier_Curvature_3D;
+
+/* Noise modifiers (for color, alpha and thickness) */
+
+typedef struct LineStyleColorModifier_Noise {
+ struct LineStyleModifier modifier;
+
+ struct ColorBand *color_ramp;
+ float period, amplitude;
+ int seed, pad;
+} LineStyleColorModifier_Noise;
+
+typedef struct LineStyleAlphaModifier_Noise {
+ struct LineStyleModifier modifier;
+
+ struct CurveMapping *curve;
+ int flags;
+ float period, amplitude;
+ int seed;
+} LineStyleAlphaModifier_Noise;
+
+typedef struct LineStyleThicknessModifier_Noise {
+ struct LineStyleModifier modifier;
+
+ float period, amplitude;
+ int flags;
+ int seed;
+
+} LineStyleThicknessModifier_Noise;
+
+/* Crease Angle modifiers */
+
+typedef struct LineStyleColorModifier_CreaseAngle {
+ struct LineStyleModifier modifier;
+
+ struct ColorBand *color_ramp;
+ float min_angle, max_angle;
+} LineStyleColorModifier_CreaseAngle;
+
+typedef struct LineStyleAlphaModifier_CreaseAngle {
+ struct LineStyleModifier modifier;
+
+ struct CurveMapping *curve;
+ int flags;
+ float min_angle, max_angle;
+ int pad;
+} LineStyleAlphaModifier_CreaseAngle;
+
+typedef struct LineStyleThicknessModifier_CreaseAngle {
+ struct LineStyleModifier modifier;
+
+ struct CurveMapping *curve;
+ int flags, pad;
+
+ float min_angle, max_angle;
+ float min_thickness, max_thickness;
+} LineStyleThicknessModifier_CreaseAngle;
+
+/* Tangent modifiers */
+
+typedef struct LineStyleColorModifier_Tangent {
+ struct LineStyleModifier modifier;
+
+ struct ColorBand *color_ramp;
+} LineStyleColorModifier_Tangent;
+
+typedef struct LineStyleAlphaModifier_Tangent {
+ struct LineStyleModifier modifier;
+
+ struct CurveMapping *curve;
+ int flags;
+ int pad;
+} LineStyleAlphaModifier_Tangent;
+
+typedef struct LineStyleThicknessModifier_Tangent {
+ struct LineStyleModifier modifier;
+
+ struct CurveMapping *curve;
+ int flags;
+ float min_thickness, max_thickness;
+ int pad;
+} LineStyleThicknessModifier_Tangent;
+
/* Material modifiers */
/* mat_attr */
@@ -354,6 +473,13 @@ typedef struct LineStyleGeometryModifier_2DTransform {
int pad;
} LineStyleGeometryModifier_2DTransform;
+typedef struct LineStyleGeometryModifier_Simplification {
+ struct LineStyleModifier modifier;
+
+ float tolerance;
+ int pad;
+}LineStyleGeometryModifier_Simplification;
+
/* Calligraphic thickness modifier */
typedef struct LineStyleThicknessModifier_Calligraphy {
diff --git a/source/blender/makesrna/RNA_access.h b/source/blender/makesrna/RNA_access.h
index 6b056422404..406bab011aa 100644
--- a/source/blender/makesrna/RNA_access.h
+++ b/source/blender/makesrna/RNA_access.h
@@ -316,14 +316,22 @@ extern StructRNA RNA_LimitRotationConstraint;
extern StructRNA RNA_LimitScaleConstraint;
extern StructRNA RNA_LineStyleAlphaModifier;
extern StructRNA RNA_LineStyleAlphaModifier_AlongStroke;
+extern StructRNA RNA_LineStyleAlphaModifier_CreaseAngle;
+extern StructRNA RNA_LineStyleAlphaModifier_Curvature_3D;
extern StructRNA RNA_LineStyleAlphaModifier_DistanceFromCamera;
extern StructRNA RNA_LineStyleAlphaModifier_DistanceFromObject;
extern StructRNA RNA_LineStyleAlphaModifier_Material;
+extern StructRNA RNA_LineStyleAlphaModifier_Noise;
+extern StructRNA RNA_LineStyleAlphaModifier_Tangent;
extern StructRNA RNA_LineStyleColorModifier;
extern StructRNA RNA_LineStyleColorModifier_AlongStroke;
+extern StructRNA RNA_LineStyleColorModifier_CreaseAngle;
+extern StructRNA RNA_LineStyleColorModifier_Curvature_3D;
extern StructRNA RNA_LineStyleColorModifier_DistanceFromCamera;
extern StructRNA RNA_LineStyleColorModifier_DistanceFromObject;
extern StructRNA RNA_LineStyleColorModifier_Material;
+extern StructRNA RNA_LineStyleColorModifier_Noise;
+extern StructRNA RNA_LineStyleColorModifier_Tangent;
extern StructRNA RNA_LineStyleGeometryModifier;
extern StructRNA RNA_LineStyleGeometryModifier_2DOffset;
extern StructRNA RNA_LineStyleGeometryModifier_2DTransform;
@@ -335,6 +343,7 @@ extern StructRNA RNA_LineStyleGeometryModifier_PerlinNoise1D;
extern StructRNA RNA_LineStyleGeometryModifier_PerlinNoise2D;
extern StructRNA RNA_LineStyleGeometryModifier_Polygonalization;
extern StructRNA RNA_LineStyleGeometryModifier_Sampling;
+extern StructRNA RNA_LineStyleGeometryModifier_Simplification;
extern StructRNA RNA_LineStyleGeometryModifier_SinusDisplacement;
extern StructRNA RNA_LineStyleGeometryModifier_SpatialNoise;
extern StructRNA RNA_LineStyleGeometryModifier_TipRemover;
@@ -343,9 +352,13 @@ extern StructRNA RNA_LineStyleTextureSlot;
extern StructRNA RNA_LineStyleThicknessModifier;
extern StructRNA RNA_LineStyleThicknessModifier_AlongStroke;
extern StructRNA RNA_LineStyleThicknessModifier_Calligraphy;
+extern StructRNA RNA_LineStyleThicknessModifier_CreaseAngle;
+extern StructRNA RNA_LineStyleThicknessModifier_Curvature_3D;
extern StructRNA RNA_LineStyleThicknessModifier_DistanceFromCamera;
extern StructRNA RNA_LineStyleThicknessModifier_DistanceFromObject;
extern StructRNA RNA_LineStyleThicknessModifier_Material;
+extern StructRNA RNA_LineStyleThicknessModifier_Noise;
+extern StructRNA RNA_LineStyleThicknessModifier_Tangent;
extern StructRNA RNA_LockedTrackConstraint;
extern StructRNA RNA_Macro;
extern StructRNA RNA_MagicTexture;
diff --git a/source/blender/makesrna/intern/rna_linestyle.c b/source/blender/makesrna/intern/rna_linestyle.c
index 638bc7a17ea..81f3e149a71 100644
--- a/source/blender/makesrna/intern/rna_linestyle.c
+++ b/source/blender/makesrna/intern/rna_linestyle.c
@@ -41,26 +41,38 @@
EnumPropertyItem linestyle_color_modifier_type_items[] = {
{LS_MODIFIER_ALONG_STROKE, "ALONG_STROKE", ICON_MODIFIER, "Along Stroke", ""},
+ {LS_MODIFIER_CREASE_ANGLE, "CREASE_ANGLE", ICON_MODIFIER, "Crease Angle", ""},
+ {LS_MODIFIER_CURVATURE_3D, "CURVATURE_3D", ICON_MODIFIER, "Curvature 3D", ""},
{LS_MODIFIER_DISTANCE_FROM_CAMERA, "DISTANCE_FROM_CAMERA", ICON_MODIFIER, "Distance from Camera", ""},
{LS_MODIFIER_DISTANCE_FROM_OBJECT, "DISTANCE_FROM_OBJECT", ICON_MODIFIER, "Distance from Object", ""},
{LS_MODIFIER_MATERIAL, "MATERIAL", ICON_MODIFIER, "Material", ""},
+ {LS_MODIFIER_NOISE, "NOISE", ICON_MODIFIER, "Noise", ""},
+ {LS_MODIFIER_TANGENT, "TANGENT", ICON_MODIFIER, "Tangent", ""},
{0, NULL, 0, NULL, NULL}
};
EnumPropertyItem linestyle_alpha_modifier_type_items[] = {
{LS_MODIFIER_ALONG_STROKE, "ALONG_STROKE", ICON_MODIFIER, "Along Stroke", ""},
+ {LS_MODIFIER_CREASE_ANGLE, "CREASE_ANGLE", ICON_MODIFIER, "Crease Angle", ""},
+ {LS_MODIFIER_CURVATURE_3D, "CURVATURE_3D", ICON_MODIFIER, "Curvature 3D", ""},
{LS_MODIFIER_DISTANCE_FROM_CAMERA, "DISTANCE_FROM_CAMERA", ICON_MODIFIER, "Distance from Camera", ""},
{LS_MODIFIER_DISTANCE_FROM_OBJECT, "DISTANCE_FROM_OBJECT", ICON_MODIFIER, "Distance from Object", ""},
{LS_MODIFIER_MATERIAL, "MATERIAL", ICON_MODIFIER, "Material", ""},
+ {LS_MODIFIER_NOISE, "NOISE", ICON_MODIFIER, "Noise", ""},
+ {LS_MODIFIER_TANGENT, "TANGENT", ICON_MODIFIER, "Tangent", ""},
{0, NULL, 0, NULL, NULL}
};
EnumPropertyItem linestyle_thickness_modifier_type_items[] = {
{LS_MODIFIER_ALONG_STROKE, "ALONG_STROKE", ICON_MODIFIER, "Along Stroke", ""},
{LS_MODIFIER_CALLIGRAPHY, "CALLIGRAPHY", ICON_MODIFIER, "Calligraphy", ""},
+ {LS_MODIFIER_CREASE_ANGLE, "CREASE_ANGLE", ICON_MODIFIER, "Crease Angle", ""},
+ {LS_MODIFIER_CURVATURE_3D, "CURVATURE_3D", ICON_MODIFIER, "Curvature 3D", ""},
{LS_MODIFIER_DISTANCE_FROM_CAMERA, "DISTANCE_FROM_CAMERA", ICON_MODIFIER, "Distance from Camera", ""},
{LS_MODIFIER_DISTANCE_FROM_OBJECT, "DISTANCE_FROM_OBJECT", ICON_MODIFIER, "Distance from Object", ""},
{LS_MODIFIER_MATERIAL, "MATERIAL", ICON_MODIFIER, "Material", ""},
+ {LS_MODIFIER_NOISE, "NOISE", ICON_MODIFIER, "Noise", ""},
+ {LS_MODIFIER_TANGENT, "TANGENT", ICON_MODIFIER, "Tangent", ""},
{0, NULL, 0, NULL, NULL}
};
@@ -75,6 +87,7 @@ EnumPropertyItem linestyle_geometry_modifier_type_items[] = {
{LS_MODIFIER_PERLIN_NOISE_2D, "PERLIN_NOISE_2D", ICON_MODIFIER, "Perlin Noise 2D", ""},
{LS_MODIFIER_POLYGONIZATION, "POLYGONIZATION", ICON_MODIFIER, "Polygonization", ""},
{LS_MODIFIER_SAMPLING, "SAMPLING", ICON_MODIFIER, "Sampling", ""},
+ {LS_MODIFIER_SIMPLIFICATION, "SIMPLIFICATION", ICON_MODIFIER, "Simplification", ""},
{LS_MODIFIER_SINUS_DISPLACEMENT, "SINUS_DISPLACEMENT", ICON_MODIFIER, "Sinus Displacement", ""},
{LS_MODIFIER_SPATIAL_NOISE, "SPATIAL_NOISE", ICON_MODIFIER, "Spatial Noise", ""},
{LS_MODIFIER_TIP_REMOVER, "TIP_REMOVER", ICON_MODIFIER, "Tip Remover", ""},
@@ -104,6 +117,14 @@ static StructRNA *rna_LineStyle_color_modifier_refine(struct PointerRNA *ptr)
return &RNA_LineStyleColorModifier_DistanceFromObject;
case LS_MODIFIER_MATERIAL:
return &RNA_LineStyleColorModifier_Material;
+ case LS_MODIFIER_TANGENT:
+ return &RNA_LineStyleColorModifier_Tangent;
+ case LS_MODIFIER_NOISE:
+ return &RNA_LineStyleColorModifier_Noise;
+ case LS_MODIFIER_CREASE_ANGLE:
+ return &RNA_LineStyleColorModifier_CreaseAngle;
+ case LS_MODIFIER_CURVATURE_3D:
+ return &RNA_LineStyleColorModifier_Curvature_3D;
default:
return &RNA_LineStyleColorModifier;
}
@@ -122,6 +143,14 @@ static StructRNA *rna_LineStyle_alpha_modifier_refine(struct PointerRNA *ptr)
return &RNA_LineStyleAlphaModifier_DistanceFromObject;
case LS_MODIFIER_MATERIAL:
return &RNA_LineStyleAlphaModifier_Material;
+ case LS_MODIFIER_TANGENT:
+ return &RNA_LineStyleAlphaModifier_Tangent;
+ case LS_MODIFIER_NOISE:
+ return &RNA_LineStyleAlphaModifier_Noise;
+ case LS_MODIFIER_CREASE_ANGLE:
+ return &RNA_LineStyleAlphaModifier_CreaseAngle;
+ case LS_MODIFIER_CURVATURE_3D:
+ return &RNA_LineStyleAlphaModifier_Curvature_3D;
default:
return &RNA_LineStyleAlphaModifier;
}
@@ -142,6 +171,14 @@ static StructRNA *rna_LineStyle_thickness_modifier_refine(struct PointerRNA *ptr
return &RNA_LineStyleThicknessModifier_Material;
case LS_MODIFIER_CALLIGRAPHY:
return &RNA_LineStyleThicknessModifier_Calligraphy;
+ case LS_MODIFIER_TANGENT:
+ return &RNA_LineStyleThicknessModifier_Tangent;
+ case LS_MODIFIER_NOISE:
+ return &RNA_LineStyleThicknessModifier_Noise;
+ case LS_MODIFIER_CREASE_ANGLE:
+ return &RNA_LineStyleThicknessModifier_CreaseAngle;
+ case LS_MODIFIER_CURVATURE_3D:
+ return &RNA_LineStyleThicknessModifier_Curvature_3D;
default:
return &RNA_LineStyleThicknessModifier;
}
@@ -178,6 +215,8 @@ static StructRNA *rna_LineStyle_geometry_modifier_refine(struct PointerRNA *ptr)
return &RNA_LineStyleGeometryModifier_2DOffset;
case LS_MODIFIER_2D_TRANSFORM:
return &RNA_LineStyleGeometryModifier_2DTransform;
+ case LS_MODIFIER_SIMPLIFICATION:
+ return &RNA_LineStyleGeometryModifier_Simplification;
default:
return &RNA_LineStyleGeometryModifier;
}
@@ -785,6 +824,62 @@ static void rna_def_linestyle_modifiers(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Ramp", "Use color ramp to map the BW average into an RGB color");
RNA_def_property_update(prop, NC_LINESTYLE, "rna_LineStyle_update");
+ srna = RNA_def_struct(brna, "LineStyleColorModifier_Tangent", "LineStyleColorModifier");
+ RNA_def_struct_ui_text(srna, "Tangent", "Change line color based on the direction of a stroke");
+ rna_def_color_modifier(srna);
+ rna_def_modifier_color_ramp_common(srna, false);
+
+ srna = RNA_def_struct(brna, "LineStyleColorModifier_Noise", "LineStyleColorModifier");
+ RNA_def_struct_ui_text(srna, "Noise", "Change line color based on random noise");
+ rna_def_color_modifier(srna);
+ rna_def_modifier_color_ramp_common(srna, false);
+
+ prop = RNA_def_property(srna, "amplitude", PROP_FLOAT, PROP_NONE);
+ RNA_def_property_float_sdna(prop, NULL, "amplitude");
+ RNA_def_property_ui_text(prop, "Amplitude", "Amplitude of the noise");
+ RNA_def_property_update(prop, NC_LINESTYLE, "rna_LineStyle_update");
+
+ prop = RNA_def_property(srna, "period", PROP_FLOAT, PROP_NONE);
+ RNA_def_property_float_sdna(prop, NULL, "period");
+ RNA_def_property_ui_text(prop, "Period", "Period of the noise");
+ RNA_def_property_update(prop, NC_LINESTYLE, "rna_LineStyle_update");
+
+ prop = RNA_def_property(srna, "seed", PROP_INT, PROP_NONE);
+ RNA_def_property_int_sdna(prop, NULL, "seed");
+ RNA_def_property_ui_text(prop, "Seed", "Seed for the noise generation");
+ RNA_def_property_update(prop, NC_LINESTYLE, "rna_LineStyle_update");
+
+ srna = RNA_def_struct(brna, "LineStyleColorModifier_CreaseAngle", "LineStyleColorModifier");
+ RNA_def_struct_ui_text(srna, "Crease Angle", "Change line color based on the underlying crease angle");
+ rna_def_color_modifier(srna);
+ rna_def_modifier_color_ramp_common(srna, false);
+
+ prop = RNA_def_property(srna, "angle_min", PROP_FLOAT, PROP_ANGLE);
+ RNA_def_property_float_sdna(prop, NULL, "min_angle");
+ RNA_def_property_ui_text(prop, "Min Angle", "Minimum angle to modify thickness");
+ RNA_def_property_update(prop, NC_LINESTYLE, "rna_LineStyle_update");
+
+ prop = RNA_def_property(srna, "angle_max", PROP_FLOAT, PROP_ANGLE);
+ RNA_def_property_float_sdna(prop, NULL, "max_angle");
+ RNA_def_property_ui_text(prop, "Max Angle", "Maximum angle to modify thickness");
+ RNA_def_property_update(prop, NC_LINESTYLE, "rna_LineStyle_update");
+
+ srna = RNA_def_struct(brna, "LineStyleColorModifier_Curvature_3D", "LineStyleColorModifier");
+ RNA_def_struct_ui_text(srna, "Curvature 3D",
+ "Change line color based on the radial curvature of 3D mesh surfaces");
+ rna_def_color_modifier(srna);
+ rna_def_modifier_color_ramp_common(srna, false);
+
+ prop = RNA_def_property(srna, "curvature_min", PROP_FLOAT, PROP_NONE);
+ RNA_def_property_float_sdna(prop, NULL, "min_curvature");
+ RNA_def_property_ui_text(prop, "Min Curvature", "Minimum Curvature");
+ RNA_def_property_update(prop, NC_LINESTYLE, "rna_LineStyle_update");
+
+ prop = RNA_def_property(srna, "curvature_max", PROP_FLOAT, PROP_NONE);
+ RNA_def_property_float_sdna(prop, NULL, "max_curvature");
+ RNA_def_property_ui_text(prop, "Max Curvature", "Maximum Curvature");
+ RNA_def_property_update(prop, NC_LINESTYLE, "rna_LineStyle_update");
+
/* alpha transparency modifiers */
srna = RNA_def_struct(brna, "LineStyleAlphaModifier", "LineStyleModifier");
@@ -823,14 +918,90 @@ static void rna_def_linestyle_modifiers(BlenderRNA *brna)
rna_def_modifier_material_common(srna);
rna_def_modifier_curve_common(srna, false, false);
- /* line thickness modifiers */
+ srna = RNA_def_struct(brna, "LineStyleAlphaModifier_Tangent", "LineStyleAlphaModifier");
+ RNA_def_struct_ui_text(srna, "Tangent", "Alpha transparency based on the direction of the stroke");
+ rna_def_alpha_modifier(srna);
+ rna_def_modifier_curve_common(srna, false, false);
+
+ srna = RNA_def_struct(brna, "LineStyleAlphaModifier_Noise", "LineStyleAlphaModifier");
+ RNA_def_struct_ui_text(srna, "Noise", "Alpha transparency based on random noise");
+ rna_def_alpha_modifier(srna);
+ rna_def_modifier_curve_common(srna, false, false);
+
+ prop = RNA_def_property(srna, "amplitude", PROP_FLOAT, PROP_NONE);
+ RNA_def_property_float_sdna(prop, NULL, "amplitude");
+ RNA_def_property_ui_text(prop, "Amplitude", "Amplitude of the noise");
+ RNA_def_property_update(prop, NC_LINESTYLE, "rna_LineStyle_update");
+
+ prop = RNA_def_property(srna, "period", PROP_FLOAT, PROP_NONE);
+ RNA_def_property_float_sdna(prop, NULL, "period");
+ RNA_def_property_ui_text(prop, "Period", "Period of the noise");
+ RNA_def_property_update(prop, NC_LINESTYLE, "rna_LineStyle_update");
+
+ prop = RNA_def_property(srna, "seed", PROP_INT, PROP_NONE);
+ RNA_def_property_int_sdna(prop, NULL, "seed");
+ RNA_def_property_ui_text(prop, "Seed", "Seed for the noise generation");
+ RNA_def_property_update(prop, NC_LINESTYLE, "rna_LineStyle_update");
+
+ srna = RNA_def_struct(brna, "LineStyleAlphaModifier_CreaseAngle", "LineStyleAlphaModifier");
+ RNA_def_struct_ui_text(srna, "Crease Angle",
+ "Alpha transparency based on the angle between two adjacent faces");
+ rna_def_alpha_modifier(srna);
+ rna_def_modifier_curve_common(srna, false, false);
+
+ prop = RNA_def_property(srna, "angle_min", PROP_FLOAT, PROP_ANGLE);
+ RNA_def_property_float_sdna(prop, NULL, "min_angle");
+ RNA_def_property_ui_text(prop, "Min Angle", "Minimum angle to modify thickness");
+ RNA_def_property_update(prop, NC_LINESTYLE, "rna_LineStyle_update");
+
+ prop = RNA_def_property(srna, "angle_max", PROP_FLOAT, PROP_ANGLE);
+ RNA_def_property_float_sdna(prop, NULL, "max_angle");
+ RNA_def_property_ui_text(prop, "Max Angle", "Maximum angle to modify thickness");
+ RNA_def_property_update(prop, NC_LINESTYLE, "rna_LineStyle_update");
+
+ srna = RNA_def_struct(brna, "LineStyleAlphaModifier_Curvature_3D", "LineStyleAlphaModifier");
+ RNA_def_struct_ui_text(srna, "Curvature 3D",
+ "Alpha transparency based on the radial curvature of 3D mesh surfaces");
+ rna_def_alpha_modifier(srna);
+ rna_def_modifier_curve_common(srna, false, false);
+ prop = RNA_def_property(srna, "curvature_min", PROP_FLOAT, PROP_NONE);
+ RNA_def_property_float_sdna(prop, NULL, "min_curvature");
+ RNA_def_property_range(prop, 0.0f, 10000.0f);
+ RNA_def_property_ui_text(prop, "Min Curvature", "Minimum Curvature");
+ RNA_def_property_update(prop, NC_LINESTYLE, "rna_LineStyle_update");
+
+ prop = RNA_def_property(srna, "curvature_max", PROP_FLOAT, PROP_NONE);
+ RNA_def_property_float_sdna(prop, NULL, "max_curvature");
+ RNA_def_property_range(prop, 0.0f, 10000.0f);
+ RNA_def_property_ui_text(prop, "Max Curvature", "Maximum Curvature");
+ RNA_def_property_update(prop, NC_LINESTYLE, "rna_LineStyle_update");
+
+ /* line thickness modifiers */
srna = RNA_def_struct(brna, "LineStyleThicknessModifier", "LineStyleModifier");
RNA_def_struct_sdna(srna, "LineStyleModifier");
RNA_def_struct_refine_func(srna, "rna_LineStyle_thickness_modifier_refine");
RNA_def_struct_path_func(srna, "rna_LineStyle_thickness_modifier_path");
RNA_def_struct_ui_text(srna, "Line Style Thickness Modifier", "Base type to define line thickness modifiers");
+ srna = RNA_def_struct(brna, "LineStyleThicknessModifier_Tangent", "LineStyleThicknessModifier");
+ RNA_def_struct_ui_text(srna, "Tangent", "Thickness based on the direction of the stroke");
+ rna_def_thickness_modifier(srna);
+ rna_def_modifier_curve_common(srna, false, false);
+
+ prop = RNA_def_property(srna, "thickness_min", PROP_FLOAT, PROP_NONE);
+ RNA_def_property_float_sdna(prop, NULL, "min_thickness");
+ RNA_def_property_range(prop, 0.0f, 10000.0f);
+ RNA_def_property_ui_text(prop, "Min Thickness",
+ "Minimum thickness");
+ RNA_def_property_update(prop, NC_LINESTYLE, "rna_LineStyle_update");
+
+ prop = RNA_def_property(srna, "thickness_max", PROP_FLOAT, PROP_NONE);
+ RNA_def_property_float_sdna(prop, NULL, "max_thickness");
+ RNA_def_property_range(prop, 0.0f, 10000.0f);
+ RNA_def_property_ui_text(prop, "Max Thickness", "Maximum thickness");
+ RNA_def_property_update(prop, NC_LINESTYLE, "rna_LineStyle_update");
+
srna = RNA_def_struct(brna, "LineStyleThicknessModifier_AlongStroke", "LineStyleThicknessModifier");
RNA_def_struct_ui_text(srna, "Along Stroke", "Change line thickness along stroke");
rna_def_thickness_modifier(srna);
@@ -882,6 +1053,88 @@ static void rna_def_linestyle_modifiers(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Max Thickness", "Maximum thickness in the main direction");
RNA_def_property_update(prop, NC_LINESTYLE, "rna_LineStyle_update");
+ srna = RNA_def_struct(brna, "LineStyleThicknessModifier_Noise", "LineStyleThicknessModifier");
+ RNA_def_struct_ui_text(srna, "Noise", "Line thickness based on random noise");
+ rna_def_thickness_modifier(srna);
+
+ prop = RNA_def_property(srna, "amplitude", PROP_FLOAT, PROP_NONE);
+ RNA_def_property_float_sdna(prop, NULL, "amplitude");
+ RNA_def_property_ui_text(prop, "Amplitude", "Amplitude of the noise");
+ RNA_def_property_update(prop, NC_LINESTYLE, "rna_LineStyle_update");
+
+ prop = RNA_def_property(srna, "period", PROP_FLOAT, PROP_NONE);
+ RNA_def_property_float_sdna(prop, NULL, "period");
+ RNA_def_property_ui_text(prop, "Period", "Period of the noise");
+ RNA_def_property_update(prop, NC_LINESTYLE, "rna_LineStyle_update");
+
+ prop = RNA_def_property(srna, "seed", PROP_INT, PROP_NONE);
+ RNA_def_property_int_sdna(prop, NULL, "seed");
+ RNA_def_property_ui_text(prop, "Seed", "Seed for the noise generation");
+ RNA_def_property_update(prop, NC_LINESTYLE, "rna_LineStyle_update");
+
+ prop = RNA_def_property(srna, "use_asymmetric", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_sdna(prop, NULL, "flags", LS_THICKNESS_ASYMMETRIC);
+ RNA_def_property_ui_text(prop, "Asymmetric", "Allow thickness to be assigned asymmetrically");
+ RNA_def_property_update(prop, NC_LINESTYLE, "rna_LineStyle_update");
+
+ srna = RNA_def_struct(brna, "LineStyleThicknessModifier_Curvature_3D", "LineStyleThicknessModifier");
+ RNA_def_struct_ui_text(srna, "Curvature 3D",
+ "Line thickness based on the radial curvature of 3D mesh surfaces");
+ rna_def_thickness_modifier(srna);
+ rna_def_modifier_curve_common(srna, false, false);
+
+ prop = RNA_def_property(srna, "thickness_min", PROP_FLOAT, PROP_NONE);
+ RNA_def_property_float_sdna(prop, NULL, "min_thickness");
+ RNA_def_property_range(prop, 0.0f, 10000.0f);
+ RNA_def_property_ui_text(prop, "Min Thickness", "Minimum thickness");
+ RNA_def_property_update(prop, NC_LINESTYLE, "rna_LineStyle_update");
+
+ prop = RNA_def_property(srna, "thickness_max", PROP_FLOAT, PROP_NONE);
+ RNA_def_property_float_sdna(prop, NULL, "max_thickness");
+ RNA_def_property_range(prop, 0.0f, 10000.0f);
+ RNA_def_property_ui_text(prop, "Max Thickness", "Maximum thickness");
+ RNA_def_property_update(prop, NC_LINESTYLE, "rna_LineStyle_update");
+
+ prop = RNA_def_property(srna, "curvature_min", PROP_FLOAT, PROP_NONE);
+ RNA_def_property_float_sdna(prop, NULL, "min_curvature");
+ RNA_def_property_range(prop, 0.0f, 10000.0f);
+ RNA_def_property_ui_text(prop, "Min Curvature", "Minimum Curvature");
+ RNA_def_property_update(prop, NC_LINESTYLE, "rna_LineStyle_update");
+
+ prop = RNA_def_property(srna, "curvature_max", PROP_FLOAT, PROP_NONE);
+ RNA_def_property_float_sdna(prop, NULL, "max_curvature");
+ RNA_def_property_range(prop, 0.0f, 10000.0f);
+ RNA_def_property_ui_text(prop, "Max Curvature", "Maximum Curvature");
+ RNA_def_property_update(prop, NC_LINESTYLE, "rna_LineStyle_update");
+
+ srna = RNA_def_struct(brna, "LineStyleThicknessModifier_CreaseAngle", "LineStyleThicknessModifier");
+ RNA_def_struct_ui_text(srna, "Crease Angle",
+ "Line thickness based on the angle between two adjacent faces");
+ rna_def_thickness_modifier(srna);
+ rna_def_modifier_curve_common(srna, false, false);
+
+ prop = RNA_def_property(srna, "angle_min", PROP_FLOAT, PROP_ANGLE);
+ RNA_def_property_float_sdna(prop, NULL, "min_angle");
+ RNA_def_property_ui_text(prop, "Min Angle", "Minimum angle to modify thickness");
+ RNA_def_property_update(prop, NC_LINESTYLE, "rna_LineStyle_update");
+
+ prop = RNA_def_property(srna, "angle_max", PROP_FLOAT, PROP_ANGLE);
+ RNA_def_property_float_sdna(prop, NULL, "max_angle");
+ RNA_def_property_ui_text(prop, "Max Angle", "Maximum angle to modify thickness");
+ RNA_def_property_update(prop, NC_LINESTYLE, "rna_LineStyle_update");
+
+ prop = RNA_def_property(srna, "thickness_min", PROP_FLOAT, PROP_NONE);
+ RNA_def_property_float_sdna(prop, NULL, "min_thickness");
+ RNA_def_property_range(prop, 0.0f, 10000.0f);
+ RNA_def_property_ui_text(prop, "Min Thickness", "Minimum thickness");
+ RNA_def_property_update(prop, NC_LINESTYLE, "rna_LineStyle_update");
+
+ prop = RNA_def_property(srna, "thickness_max", PROP_FLOAT, PROP_NONE);
+ RNA_def_property_float_sdna(prop, NULL, "max_thickness");
+ RNA_def_property_range(prop, 0.0f, 10000.0f);
+ RNA_def_property_ui_text(prop, "Max Thickness", "Maximum thickness");
+ RNA_def_property_update(prop, NC_LINESTYLE, "rna_LineStyle_update");
+
/* geometry modifiers */
srna = RNA_def_struct(brna, "LineStyleGeometryModifier", "LineStyleModifier");
@@ -1167,6 +1420,15 @@ static void rna_def_linestyle_modifiers(BlenderRNA *brna)
RNA_def_property_float_sdna(prop, NULL, "pivot_y");
RNA_def_property_ui_text(prop, "Pivot Y", "2D Y coordinate of the absolute pivot");
RNA_def_property_update(prop, NC_LINESTYLE, "rna_LineStyle_update");
+
+ srna = RNA_def_struct(brna, "LineStyleGeometryModifier_Simplification", "LineStyleGeometryModifier");
+ RNA_def_struct_ui_text(srna, "Simplification", "Simplify the stroke set");
+ rna_def_geometry_modifier(srna);
+
+ prop = RNA_def_property(srna, "tolerance", PROP_FLOAT, PROP_NONE);
+ RNA_def_property_float_sdna(prop, NULL, "tolerance");
+ RNA_def_property_ui_text(prop, "Tolerance", "Distance below which segments will be merged");
+ RNA_def_property_update(prop, NC_LINESTYLE, "rna_LineStyle_update");
}
static void rna_def_freestyle_color_modifiers(BlenderRNA *brna, PropertyRNA *cprop)