diff options
Diffstat (limited to 'source/blender')
-rw-r--r-- | source/blender/blenkernel/intern/linestyle.c | 311 | ||||
-rw-r--r-- | source/blender/blenloader/intern/readfile.c | 73 | ||||
-rw-r--r-- | source/blender/blenloader/intern/writefile.c | 72 | ||||
-rw-r--r-- | source/blender/freestyle/intern/python/BPy_FrsNoise.cpp | 32 | ||||
-rw-r--r-- | source/blender/freestyle/intern/python/BPy_FrsNoise.h | 2 | ||||
-rw-r--r-- | source/blender/freestyle/intern/stroke/BasicStrokeShaders.cpp | 2 | ||||
-rw-r--r-- | source/blender/makesdna/DNA_linestyle_types.h | 128 | ||||
-rw-r--r-- | source/blender/makesrna/RNA_access.h | 13 | ||||
-rw-r--r-- | source/blender/makesrna/intern/rna_linestyle.c | 264 |
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) |