From a31962287a543c0c41eb5289fa1c7dad0d5cca41 Mon Sep 17 00:00:00 2001 From: Tamito Kajiyama Date: Tue, 13 May 2014 09:15:12 +0900 Subject: Freestyle: Added .new() and .remove() methods to collection types of line style modifiers. --- source/blender/blenkernel/BKE_linestyle.h | 16 +++---- source/blender/blenkernel/intern/linestyle.c | 69 +++++++++++++++++----------- 2 files changed, 50 insertions(+), 35 deletions(-) (limited to 'source/blender/blenkernel') diff --git a/source/blender/blenkernel/BKE_linestyle.h b/source/blender/blenkernel/BKE_linestyle.h index 13d111cb93b..8bc8cc44d92 100644 --- a/source/blender/blenkernel/BKE_linestyle.h +++ b/source/blender/blenkernel/BKE_linestyle.h @@ -48,20 +48,20 @@ FreestyleLineStyle *BKE_new_linestyle(const char *name, struct Main *main); void BKE_free_linestyle(FreestyleLineStyle *linestyle); FreestyleLineStyle *BKE_copy_linestyle(FreestyleLineStyle *linestyle); -LineStyleModifier *BKE_add_linestyle_color_modifier(FreestyleLineStyle *linestyle, int type); -LineStyleModifier *BKE_add_linestyle_alpha_modifier(FreestyleLineStyle *linestyle, int type); -LineStyleModifier *BKE_add_linestyle_thickness_modifier(FreestyleLineStyle *linestyle, int type); -LineStyleModifier *BKE_add_linestyle_geometry_modifier(FreestyleLineStyle *linestyle, int type); +LineStyleModifier *BKE_add_linestyle_color_modifier(FreestyleLineStyle *linestyle, const char *name, int type); +LineStyleModifier *BKE_add_linestyle_alpha_modifier(FreestyleLineStyle *linestyle, const char *name, int type); +LineStyleModifier *BKE_add_linestyle_thickness_modifier(FreestyleLineStyle *linestyle, const char *name, int type); +LineStyleModifier *BKE_add_linestyle_geometry_modifier(FreestyleLineStyle *linestyle, const char *name, int type); LineStyleModifier *BKE_copy_linestyle_color_modifier(FreestyleLineStyle *linestyle, LineStyleModifier *m); LineStyleModifier *BKE_copy_linestyle_alpha_modifier(FreestyleLineStyle *linestyle, LineStyleModifier *m); LineStyleModifier *BKE_copy_linestyle_thickness_modifier(FreestyleLineStyle *linestyle, LineStyleModifier *m); LineStyleModifier *BKE_copy_linestyle_geometry_modifier(FreestyleLineStyle *linestyle, LineStyleModifier *m); -void BKE_remove_linestyle_color_modifier(FreestyleLineStyle *linestyle, LineStyleModifier *modifier); -void BKE_remove_linestyle_alpha_modifier(FreestyleLineStyle *linestyle, LineStyleModifier *modifier); -void BKE_remove_linestyle_thickness_modifier(FreestyleLineStyle *linestyle, LineStyleModifier *modifier); -void BKE_remove_linestyle_geometry_modifier(FreestyleLineStyle *linestyle, LineStyleModifier *modifier); +int BKE_remove_linestyle_color_modifier(FreestyleLineStyle *linestyle, LineStyleModifier *modifier); +int BKE_remove_linestyle_alpha_modifier(FreestyleLineStyle *linestyle, LineStyleModifier *modifier); +int BKE_remove_linestyle_thickness_modifier(FreestyleLineStyle *linestyle, LineStyleModifier *modifier); +int BKE_remove_linestyle_geometry_modifier(FreestyleLineStyle *linestyle, LineStyleModifier *modifier); void BKE_move_linestyle_color_modifier(FreestyleLineStyle *linestyle, LineStyleModifier *modifier, int direction); void BKE_move_linestyle_alpha_modifier(FreestyleLineStyle *linestyle, LineStyleModifier *modifier, int direction); diff --git a/source/blender/blenkernel/intern/linestyle.c b/source/blender/blenkernel/intern/linestyle.c index 8028bdbc327..8ef966a7288 100644 --- a/source/blender/blenkernel/intern/linestyle.c +++ b/source/blender/blenkernel/intern/linestyle.c @@ -99,7 +99,7 @@ static void default_linestyle_settings(FreestyleLineStyle *linestyle) BLI_listbase_clear(&linestyle->thickness_modifiers); BLI_listbase_clear(&linestyle->geometry_modifiers); - BKE_add_linestyle_geometry_modifier(linestyle, LS_MODIFIER_SAMPLING); + BKE_add_linestyle_geometry_modifier(linestyle, NULL, LS_MODIFIER_SAMPLING); linestyle->caps = LS_CAPS_BUTT; } @@ -209,13 +209,16 @@ FreestyleLineStyle *BKE_copy_linestyle(FreestyleLineStyle *linestyle) return new_linestyle; } -static LineStyleModifier *new_modifier(int type, size_t size) +static LineStyleModifier *new_modifier(const char *name, int type, size_t size) { LineStyleModifier *m; + if (!name) { + name = modifier_name[type]; + } m = (LineStyleModifier *)MEM_callocN(size, "line style modifier"); m->type = type; - BLI_strncpy(m->name, modifier_name[type], sizeof(m->name)); + BLI_strncpy(m->name, name, sizeof(m->name)); m->influence = 1.0f; m->flags = LS_MODIFIER_ENABLED | LS_MODIFIER_EXPANDED; @@ -228,7 +231,7 @@ static void add_to_modifier_list(ListBase *lb, LineStyleModifier *m) BLI_uniquename(lb, m, modifier_name[m->type], '.', offsetof(LineStyleModifier, name), sizeof(m->name)); } -static LineStyleModifier *alloc_color_modifier(int type) +static LineStyleModifier *alloc_color_modifier(const char *name, int type) { size_t size; @@ -249,14 +252,14 @@ static LineStyleModifier *alloc_color_modifier(int type) return NULL; /* unknown modifier type */ } - return new_modifier(type, size); + return new_modifier(name, type, size); } -LineStyleModifier *BKE_add_linestyle_color_modifier(FreestyleLineStyle *linestyle, int type) +LineStyleModifier *BKE_add_linestyle_color_modifier(FreestyleLineStyle *linestyle, const char *name, int type) { LineStyleModifier *m; - m = alloc_color_modifier(type); + m = alloc_color_modifier(name, type); m->blend = MA_RAMP_BLEND; switch (type) { @@ -290,7 +293,7 @@ LineStyleModifier *BKE_copy_linestyle_color_modifier(FreestyleLineStyle *linesty { LineStyleModifier *new_m; - new_m = alloc_color_modifier(m->type); + new_m = alloc_color_modifier(m->name, m->type); new_m->influence = m->influence; new_m->flags = m->flags; new_m->blend = m->blend; @@ -341,8 +344,10 @@ LineStyleModifier *BKE_copy_linestyle_color_modifier(FreestyleLineStyle *linesty return new_m; } -void BKE_remove_linestyle_color_modifier(FreestyleLineStyle *linestyle, LineStyleModifier *m) +int BKE_remove_linestyle_color_modifier(FreestyleLineStyle *linestyle, LineStyleModifier *m) { + if (BLI_findindex(&linestyle->color_modifiers, m) == -1) + return -1; switch (m->type) { case LS_MODIFIER_ALONG_STROKE: MEM_freeN(((LineStyleColorModifier_AlongStroke *)m)->color_ramp); @@ -358,9 +363,10 @@ void BKE_remove_linestyle_color_modifier(FreestyleLineStyle *linestyle, LineStyl break; } BLI_freelinkN(&linestyle->color_modifiers, m); + return 0; } -static LineStyleModifier *alloc_alpha_modifier(int type) +static LineStyleModifier *alloc_alpha_modifier(const char *name, int type) { size_t size; @@ -380,14 +386,14 @@ static LineStyleModifier *alloc_alpha_modifier(int type) default: return NULL; /* unknown modifier type */ } - return new_modifier(type, size); + return new_modifier(name, type, size); } -LineStyleModifier *BKE_add_linestyle_alpha_modifier(FreestyleLineStyle *linestyle, int type) +LineStyleModifier *BKE_add_linestyle_alpha_modifier(FreestyleLineStyle *linestyle, const char *name, int type) { LineStyleModifier *m; - m = alloc_alpha_modifier(type); + m = alloc_alpha_modifier(name, type); m->blend = LS_VALUE_BLEND; switch (type) { @@ -433,7 +439,7 @@ LineStyleModifier *BKE_copy_linestyle_alpha_modifier(FreestyleLineStyle *linesty { LineStyleModifier *new_m; - new_m = alloc_alpha_modifier(m->type); + new_m = alloc_alpha_modifier(m->name, m->type); new_m->influence = m->influence; new_m->flags = m->flags; new_m->blend = m->blend; @@ -487,8 +493,10 @@ LineStyleModifier *BKE_copy_linestyle_alpha_modifier(FreestyleLineStyle *linesty return new_m; } -void BKE_remove_linestyle_alpha_modifier(FreestyleLineStyle *linestyle, LineStyleModifier *m) +int BKE_remove_linestyle_alpha_modifier(FreestyleLineStyle *linestyle, LineStyleModifier *m) { + if (BLI_findindex(&linestyle->alpha_modifiers, m) == -1) + return -1; switch (m->type) { case LS_MODIFIER_ALONG_STROKE: curvemapping_free(((LineStyleAlphaModifier_AlongStroke *)m)->curve); @@ -504,9 +512,10 @@ void BKE_remove_linestyle_alpha_modifier(FreestyleLineStyle *linestyle, LineStyl break; } BLI_freelinkN(&linestyle->alpha_modifiers, m); + return 0; } -static LineStyleModifier *alloc_thickness_modifier(int type) +static LineStyleModifier *alloc_thickness_modifier(const char *name, int type) { size_t size; @@ -530,14 +539,14 @@ static LineStyleModifier *alloc_thickness_modifier(int type) return NULL; /* unknown modifier type */ } - return new_modifier(type, size); + return new_modifier(name, type, size); } -LineStyleModifier *BKE_add_linestyle_thickness_modifier(FreestyleLineStyle *linestyle, int type) +LineStyleModifier *BKE_add_linestyle_thickness_modifier(FreestyleLineStyle *linestyle, const char *name, int type) { LineStyleModifier *m; - m = alloc_thickness_modifier(type); + m = alloc_thickness_modifier(name, type); m->blend = LS_VALUE_BLEND; switch (type) { @@ -599,7 +608,7 @@ LineStyleModifier *BKE_copy_linestyle_thickness_modifier(FreestyleLineStyle *lin { LineStyleModifier *new_m; - new_m = alloc_thickness_modifier(m->type); + new_m = alloc_thickness_modifier(m->name, m->type); if (!new_m) return NULL; new_m->influence = m->influence; @@ -672,8 +681,10 @@ LineStyleModifier *BKE_copy_linestyle_thickness_modifier(FreestyleLineStyle *lin return new_m; } -void BKE_remove_linestyle_thickness_modifier(FreestyleLineStyle *linestyle, LineStyleModifier *m) +int BKE_remove_linestyle_thickness_modifier(FreestyleLineStyle *linestyle, LineStyleModifier *m) { + if (BLI_findindex(&linestyle->thickness_modifiers, m) == -1) + return -1; switch (m->type) { case LS_MODIFIER_ALONG_STROKE: curvemapping_free(((LineStyleThicknessModifier_AlongStroke *)m)->curve); @@ -691,9 +702,10 @@ void BKE_remove_linestyle_thickness_modifier(FreestyleLineStyle *linestyle, Line break; } BLI_freelinkN(&linestyle->thickness_modifiers, m); + return 0; } -static LineStyleModifier *alloc_geometry_modifier(int type) +static LineStyleModifier *alloc_geometry_modifier(const char *name, int type) { size_t size; @@ -741,14 +753,14 @@ static LineStyleModifier *alloc_geometry_modifier(int type) return NULL; /* unknown modifier type */ } - return new_modifier(type, size); + return new_modifier(name, type, size); } -LineStyleModifier *BKE_add_linestyle_geometry_modifier(FreestyleLineStyle *linestyle, int type) +LineStyleModifier *BKE_add_linestyle_geometry_modifier(FreestyleLineStyle *linestyle, const char *name, int type) { LineStyleModifier *m; - m = alloc_geometry_modifier(type); + m = alloc_geometry_modifier(name, type); switch (type) { case LS_MODIFIER_SAMPLING: @@ -866,7 +878,7 @@ LineStyleModifier *BKE_copy_linestyle_geometry_modifier(FreestyleLineStyle *line { LineStyleModifier *new_m; - new_m = alloc_geometry_modifier(m->type); + new_m = alloc_geometry_modifier(m->name, m->type); new_m->flags = m->flags; switch (m->type) { @@ -996,9 +1008,12 @@ LineStyleModifier *BKE_copy_linestyle_geometry_modifier(FreestyleLineStyle *line return new_m; } -void BKE_remove_linestyle_geometry_modifier(FreestyleLineStyle *linestyle, LineStyleModifier *m) +int BKE_remove_linestyle_geometry_modifier(FreestyleLineStyle *linestyle, LineStyleModifier *m) { + if (BLI_findindex(&linestyle->geometry_modifiers, m) == -1) + return -1; BLI_freelinkN(&linestyle->geometry_modifiers, m); + return 0; } static void move_modifier(ListBase *lb, LineStyleModifier *modifier, int direction) -- cgit v1.2.3