[Bf-blender-cvs] [e2a26260b59] greasepencil-object: Support several palettes in Tint modifier

Antonio Vazquez noreply at git.blender.org
Tue Jul 18 10:51:07 CEST 2017


Commit: e2a26260b5994ab1500e3463c3a28ee0ac7a402b
Author: Antonio Vazquez
Date:   Tue Jul 18 10:50:50 2017 +0200
Branches: greasepencil-object
https://developer.blender.org/rBe2a26260b5994ab1500e3463c3a28ee0ac7a402b

Support several palettes in Tint modifier

When create a new set of color, support to have several colors with the same name in different palettes

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

M	source/blender/modifiers/intern/MOD_gpenciltint.c

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

diff --git a/source/blender/modifiers/intern/MOD_gpenciltint.c b/source/blender/modifiers/intern/MOD_gpenciltint.c
index 1fee9bea756..0a0a28c629b 100644
--- a/source/blender/modifiers/intern/MOD_gpenciltint.c
+++ b/source/blender/modifiers/intern/MOD_gpenciltint.c
@@ -72,16 +72,27 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob,
 		return NULL;
 	}
 	gpd = ob->gpd;
-	GHash *gh = BLI_ghash_str_new("GP_Tint modifier");
+	GHash *gh_layer = BLI_ghash_str_new("GP_Tint Layer modifier");
+	GHash *gh_color;
+
 	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) {
-					/* TODO: add support for same name in two palettes */
-					PaletteColor *newpalcolor = BLI_ghash_lookup(gh, gps->palcolor->info);
+					
+					/* 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) {
 						newpalcolor = BKE_palette_color_copy(gps->palette, gps->palcolor);
-						BLI_ghash_insert(gh, gps->palcolor->info, newpalcolor);
+						BLI_ghash_insert(gh_color, gps->palcolor->info, newpalcolor);
 					}
 
 					if (newpalcolor) {
@@ -94,10 +105,21 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob,
 			}
 		}
 	}
-	/* free hash buffer */
-	if (gh) {
-		BLI_ghash_free(gh, NULL, NULL);
-		gh = NULL;
+	/* free hash buffers */
+	GHashIterator *ihash = BLI_ghashIterator_new(gh_layer);
+	while (!BLI_ghashIterator_done(ihash)) {
+		GHash *gh = BLI_ghashIterator_getValue(ihash);
+		if (gh) {
+			BLI_ghash_free(gh, NULL, NULL);
+			gh = NULL;
+		}
+		BLI_ghashIterator_step(ihash);
+	}
+	BLI_ghashIterator_free(ihash);
+
+	if (gh_layer) {
+		BLI_ghash_free(gh_layer, NULL, NULL);
+		gh_layer = NULL;
 	}
 
 	return NULL;




More information about the Bf-blender-cvs mailing list