[Bf-blender-cvs] [1566beb4b23] greasepencil-object: Fix error when apply color related modifiers

Antonio Vazquez noreply at git.blender.org
Mon Jul 24 20:24:59 CEST 2017


Commit: 1566beb4b2326fedfa974414d831b5d135a37415
Author: Antonio Vazquez
Date:   Mon Jul 24 16:46:03 2017 +0200
Branches: greasepencil-object
https://developer.blender.org/rB1566beb4b2326fedfa974414d831b5d135a37415

Fix error when apply color related modifiers

The effect was duplicated for each stroke and the result was wrong

===================================================================

M	source/blender/blenkernel/intern/gpencil.c
M	source/blender/modifiers/intern/MOD_gpencilcolor.c
M	source/blender/modifiers/intern/MOD_gpenciltint.c

===================================================================

diff --git a/source/blender/blenkernel/intern/gpencil.c b/source/blender/blenkernel/intern/gpencil.c
index 2c905b44acc..65440523679 100644
--- a/source/blender/blenkernel/intern/gpencil.c
+++ b/source/blender/blenkernel/intern/gpencil.c
@@ -1894,7 +1894,7 @@ void ED_gpencil_subdiv_modifier(int UNUSED(id), GpencilSubdivModifierData *mmd,
 /* change stroke thickness */
 void ED_gpencil_thick_modifier(int UNUSED(id), GpencilThickModifierData *mmd, bGPDlayer *gpl, bGPDstroke *gps)
 {
-	if (!is_stroke_affected_by_modifier(mmd->layername, mmd->passindex, 3, gpl, gps,
+	if (!is_stroke_affected_by_modifier(mmd->layername, mmd->passindex, 1, gpl, gps,
 		(int)mmd->flag & GP_THICK_INVERSE_LAYER, (int)mmd->flag & GP_THICK_INVERSE_PASS)) {
 		return;
 	}
@@ -1905,7 +1905,7 @@ void ED_gpencil_thick_modifier(int UNUSED(id), GpencilThickModifierData *mmd, bG
 /* tint strokes */
 void ED_gpencil_tint_modifier(int UNUSED(id), GpencilTintModifierData *mmd, bGPDlayer *gpl, bGPDstroke *gps)
 {
-	if (!is_stroke_affected_by_modifier(mmd->layername, mmd->passindex, 3, gpl, gps,
+	if (!is_stroke_affected_by_modifier(mmd->layername, mmd->passindex, 1, gpl, gps,
 		(int)mmd->flag & GP_TINT_INVERSE_LAYER, (int)mmd->flag & GP_TINT_INVERSE_PASS)) {
 		return;
 	}
@@ -1920,22 +1920,25 @@ void ED_gpencil_tint_modifier(int UNUSED(id), GpencilTintModifierData *mmd, bGPD
 /* color correction strokes */
 void ED_gpencil_color_modifier(int UNUSED(id), GpencilColorModifierData *mmd, bGPDlayer *gpl, bGPDstroke *gps)
 {
+	PaletteColor *palcolor;
 	float hsv[3];
-	if (!is_stroke_affected_by_modifier(mmd->layername, mmd->passindex, 3, gpl, gps,
+	if (!is_stroke_affected_by_modifier(mmd->layername, mmd->passindex, 1, gpl, gps,
 		(int)mmd->flag & GP_COLOR_INVERSE_LAYER, (int)mmd->flag & GP_COLOR_INVERSE_PASS)) {
 		return;
 	}
 
-	rgb_to_hsv_v(gps->palcolor->rgb, hsv);
+	palcolor = gps->palcolor;
+
+	rgb_to_hsv_v(palcolor->rgb, hsv);
 	add_v3_v3(hsv, mmd->hsv);
-	hsv_to_rgb_v(hsv, gps->palcolor->rgb);
+	hsv_to_rgb_v(hsv, palcolor->rgb);
 
-	rgb_to_hsv_v(gps->palcolor->fill, hsv);
+	rgb_to_hsv_v(palcolor->fill, hsv);
 	add_v3_v3(hsv, mmd->hsv);
-	hsv_to_rgb_v(hsv, gps->palcolor->fill);
+	hsv_to_rgb_v(hsv, palcolor->fill);
 
-	CLAMP3(gps->palcolor->rgb, 0.0f, 1.0f);
-	CLAMP3(gps->palcolor->fill, 0.0f, 1.0f);
+	CLAMP3(palcolor->rgb, 0.0f, 1.0f);
+	CLAMP3(palcolor->fill, 0.0f, 1.0f);
 }
 
 /* opacity strokes */
@@ -1943,7 +1946,7 @@ void ED_gpencil_opacity_modifier(int UNUSED(id), GpencilOpacityModifierData *mmd
 {
 	bGPDspoint *pt;
 
-	if (!is_stroke_affected_by_modifier(mmd->layername, mmd->passindex, 3, gpl, gps,
+	if (!is_stroke_affected_by_modifier(mmd->layername, mmd->passindex, 1, gpl, gps,
 		(int)mmd->flag & GP_OPACITY_INVERSE_LAYER, (int)mmd->flag & GP_OPACITY_INVERSE_PASS)) {
 		return;
 	}
@@ -2001,7 +2004,7 @@ void ED_gpencil_dupli_modifier(int id, GpencilDupliModifierData *mmd, bGPDlayer
 	int idx = 0;
 	for (bGPDstroke *gps = gpf->strokes.first; gps; gps = gps->next) {
 		++stroke;
-		if (!is_stroke_affected_by_modifier(mmd->layername, mmd->passindex, 3, gpl, gps,
+		if (!is_stroke_affected_by_modifier(mmd->layername, mmd->passindex, 1, gpl, gps,
 			(int)mmd->flag & GP_DUPLI_INVERSE_LAYER, (int)mmd->flag & GP_DUPLI_INVERSE_PASS)) {
 			continue;
 		}
diff --git a/source/blender/modifiers/intern/MOD_gpencilcolor.c b/source/blender/modifiers/intern/MOD_gpencilcolor.c
index 4113c2eb45a..3e97930488e 100644
--- a/source/blender/modifiers/intern/MOD_gpencilcolor.c
+++ b/source/blender/modifiers/intern/MOD_gpencilcolor.c
@@ -81,33 +81,33 @@ static DerivedMesh *applyModifier(ModifierData *md, struct EvaluationContext *UN
 	for (bGPDlayer *gpl = gpd->layers.first; gpl; gpl = gpl->next) {
 		for (bGPDframe *gpf = gpl->frames.first; gpf; gpf = gpf->next) {
 			for (bGPDstroke *gps = gpf->strokes.first; gps; gps = gps->next) {
-				/* create a new set of colors */
-				if (mmd->flag & GP_COLOR_CREATE_COLORS) {
-					
-					/* look for palette */
-					gh_color = (GHash *)BLI_ghash_lookup(gh_layer, gps->palette->id.name);
-					if (gh_color == NULL) {
-						gh_color = BLI_ghash_str_new("GP_Color Correction modifier");
-						BLI_ghash_insert(gh_layer, gps->palette->id.name, gh_color);
-					}
+				/* look for palette */
+				gh_color = (GHash *)BLI_ghash_lookup(gh_layer, gps->palette->id.name);
+				if (gh_color == NULL) {
+					gh_color = BLI_ghash_str_new("GP_Color Correction modifier");
+					BLI_ghash_insert(gh_layer, gps->palette->id.name, gh_color);
+				}
 
-					/* look for color */
-					PaletteColor *newpalcolor = (PaletteColor *) BLI_ghash_lookup(gh_color, gps->palcolor->info);
-					if (newpalcolor == NULL) {
+				/* look for color */
+				PaletteColor *newpalcolor = (PaletteColor *)BLI_ghash_lookup(gh_color, gps->palcolor->info);
+				if (newpalcolor == NULL) {
+					if (mmd->flag & GP_COLOR_CREATE_COLORS) {
 						if (!newpalette) {
 							newpalette = BKE_palette_add(G.main, "Palette");
 						}
 						newpalcolor = BKE_palette_color_copy(newpalette, gps->palcolor);
-						BLI_ghash_insert(gh_color, gps->palcolor->info, newpalcolor);
-					}
-
-					if (newpalcolor) {
 						BLI_strncpy(gps->colorname, newpalcolor->info, sizeof(gps->colorname));
 						gps->palcolor = newpalcolor;
 					}
+					else {
+						newpalcolor = gps->palcolor;
+					}
+					BLI_ghash_insert(gh_color, gps->palcolor->info, newpalcolor);
+					ED_gpencil_color_modifier(-1, (GpencilColorModifierData *)md, gpl, gps);
+				}
+				else {
+					gps->palcolor = newpalcolor;
 				}
-
-				ED_gpencil_color_modifier(-1, (GpencilColorModifierData *)md, gpl, gps);
 			}
 		}
 	}
diff --git a/source/blender/modifiers/intern/MOD_gpenciltint.c b/source/blender/modifiers/intern/MOD_gpenciltint.c
index 39279896543..e5de233c3e3 100644
--- a/source/blender/modifiers/intern/MOD_gpenciltint.c
+++ b/source/blender/modifiers/intern/MOD_gpenciltint.c
@@ -81,33 +81,33 @@ static DerivedMesh *applyModifier(ModifierData *md, struct EvaluationContext *UN
 	for (bGPDlayer *gpl = gpd->layers.first; gpl; gpl = gpl->next) {
 		for (bGPDframe *gpf = gpl->frames.first; gpf; gpf = gpf->next) {
 			for (bGPDstroke *gps = gpf->strokes.first; gps; gps = gps->next) {
-				/* create a new set of colors */
-				if (mmd->flag & GP_TINT_CREATE_COLORS) {
-					
-					/* look for palette */
-					gh_color = (GHash *)BLI_ghash_lookup(gh_layer, gps->palette->id.name);
-					if (gh_color == NULL) {
-						gh_color = BLI_ghash_str_new("GP_Tint Color modifier");
-						BLI_ghash_insert(gh_layer, gps->palette->id.name, gh_color);
-					}
+				/* look for palette */
+				gh_color = (GHash *)BLI_ghash_lookup(gh_layer, gps->palette->id.name);
+				if (gh_color == NULL) {
+					gh_color = BLI_ghash_str_new("GP_Tint Color modifier");
+					BLI_ghash_insert(gh_layer, gps->palette->id.name, gh_color);
+				}
 
-					/* look for color */
-					PaletteColor *newpalcolor = (PaletteColor *) BLI_ghash_lookup(gh_color, gps->palcolor->info);
-					if (newpalcolor == NULL) {
+				/* look for color */
+				PaletteColor *newpalcolor = (PaletteColor *)BLI_ghash_lookup(gh_color, gps->palcolor->info);
+				if (newpalcolor == NULL) {
+					if (mmd->flag & GP_TINT_CREATE_COLORS) {
 						if (!newpalette) {
 							newpalette = BKE_palette_add(G.main, "Palette");
 						}
 						newpalcolor = BKE_palette_color_copy(newpalette, gps->palcolor);
-						BLI_ghash_insert(gh_color, gps->palcolor->info, newpalcolor);
-					}
-
-					if (newpalcolor) {
 						BLI_strncpy(gps->colorname, newpalcolor->info, sizeof(gps->colorname));
 						gps->palcolor = newpalcolor;
 					}
+					else {
+						newpalcolor = gps->palcolor;
+					}
+					BLI_ghash_insert(gh_color, gps->palcolor->info, newpalcolor);
+					ED_gpencil_tint_modifier(-1, (GpencilTintModifierData *)md, gpl, gps);
+				}
+				else {
+					gps->palcolor = newpalcolor;
 				}
-
-				ED_gpencil_tint_modifier(-1, (GpencilTintModifierData *)md, gpl, gps);
 			}
 		}
 	}




More information about the Bf-blender-cvs mailing list