diff options
author | Folkert de Vries <flokkievids@gmail.com> | 2015-07-10 15:57:23 +0300 |
---|---|---|
committer | Tamito Kajiyama <rd6t-kjym@asahi-net.or.jp> | 2015-07-10 17:15:56 +0300 |
commit | eeeb845d33e81afbc8ed127e6ab4ae7b18472a54 (patch) | |
tree | 78f8f3ecf9c4dd3bf4383ccc73520bcd2c6b2c7b /source/blender/blenkernel/intern/linestyle.c | |
parent | 7837f0e8332f3726e0322b0c48b0da4d7c2d5813 (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/blender/blenkernel/intern/linestyle.c')
-rw-r--r-- | source/blender/blenkernel/intern/linestyle.c | 311 |
1 files changed, 311 insertions, 0 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) { |