[Bf-blender-cvs] [2e10c658f42] blender2.8: GP: Add option to select color affected in modifiers

Charlie Jolly noreply at git.blender.org
Thu Aug 9 13:46:22 CEST 2018


Commit: 2e10c658f42a842404f16a1b03ff4844e41d538c
Author: Charlie Jolly
Date:   Thu Aug 9 13:42:02 2018 +0200
Branches: blender2.8
https://developer.blender.org/rB2e10c658f42a842404f16a1b03ff4844e41d538c

GP: Add option to select color affected in modifiers

Now it's possible to define if the Tint, Hue and OPacity modifier affect the stroke color, fill color or both.

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

M	release/scripts/startup/bl_ui/properties_data_modifier.py
M	source/blender/gpencil_modifiers/intern/MOD_gpencilcolor.c
M	source/blender/gpencil_modifiers/intern/MOD_gpencilopacity.c
M	source/blender/gpencil_modifiers/intern/MOD_gpenciltint.c
M	source/blender/makesdna/DNA_gpencil_modifier_types.h
M	source/blender/makesrna/intern/rna_gpencil_modifier.c

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

diff --git a/release/scripts/startup/bl_ui/properties_data_modifier.py b/release/scripts/startup/bl_ui/properties_data_modifier.py
index 5b3d89c30a5..9acc7996bb9 100644
--- a/release/scripts/startup/bl_ui/properties_data_modifier.py
+++ b/release/scripts/startup/bl_ui/properties_data_modifier.py
@@ -1757,6 +1757,8 @@ class DATA_PT_gpencil_modifiers(ModifierButtonsPanel, Panel):
 
         row = layout.row()
         row.prop(md, "create_materials")
+        row.prop(md, "modify_color")
+        
 
     def GP_COLOR(self, layout, ob, md):
         gpd = ob.data
@@ -1779,6 +1781,7 @@ class DATA_PT_gpencil_modifiers(ModifierButtonsPanel, Panel):
 
         row = layout.row()
         row.prop(md, "create_materials")
+        row.prop(md, "modify_color")
 
     def GP_OPACITY(self, layout, ob, md):
         gpd = ob.data
@@ -1805,6 +1808,7 @@ class DATA_PT_gpencil_modifiers(ModifierButtonsPanel, Panel):
         
         row = layout.row()
         row.prop(md, "create_materials")
+        row.prop(md, "modify_color")
 
     def GP_INSTANCE(self, layout, ob, md):
         gpd = ob.data
diff --git a/source/blender/gpencil_modifiers/intern/MOD_gpencilcolor.c b/source/blender/gpencil_modifiers/intern/MOD_gpencilcolor.c
index 4c087577699..40ffe293d41 100644
--- a/source/blender/gpencil_modifiers/intern/MOD_gpencilcolor.c
+++ b/source/blender/gpencil_modifiers/intern/MOD_gpencilcolor.c
@@ -60,6 +60,7 @@ static void initData(GpencilModifierData *md)
 	ARRAY_SET_ITEMS(gpmd->hsv, 1.0f, 1.0f, 1.0f);
 	gpmd->layername[0] = '\0';
 	gpmd->flag |= GP_COLOR_CREATE_COLORS;
+	gpmd->modify_color = GP_MODIFY_COLOR_BOTH;
 }
 
 static void copyData(const GpencilModifierData *md, GpencilModifierData *target)
@@ -86,15 +87,19 @@ static void deformStroke(
 	copy_v3_v3(factor, mmd->hsv);
 	add_v3_fl(factor, -1.0f);
 
-	rgb_to_hsv_v(gps->runtime.tmp_stroke_rgba, hsv);
-	add_v3_v3(hsv, factor);
-	CLAMP3(hsv, 0.0f, 1.0f);
-	hsv_to_rgb_v(hsv, gps->runtime.tmp_stroke_rgba);
+	if (mmd->modify_color != GP_MODIFY_COLOR_FILL) {
+		rgb_to_hsv_v(gps->runtime.tmp_stroke_rgba, hsv);
+		add_v3_v3(hsv, factor);
+		CLAMP3(hsv, 0.0f, 1.0f);
+		hsv_to_rgb_v(hsv, gps->runtime.tmp_stroke_rgba);
+	}
 
-	rgb_to_hsv_v(gps->runtime.tmp_fill_rgba, hsv);
-	add_v3_v3(hsv, factor);
-	CLAMP3(hsv, 0.0f, 1.0f);
-	hsv_to_rgb_v(hsv, gps->runtime.tmp_fill_rgba);
+	if (mmd->modify_color != GP_MODIFY_COLOR_STROKE) {
+		rgb_to_hsv_v(gps->runtime.tmp_fill_rgba, hsv);
+		add_v3_v3(hsv, factor);
+		CLAMP3(hsv, 0.0f, 1.0f);
+		hsv_to_rgb_v(hsv, gps->runtime.tmp_fill_rgba);
+	}
 }
 
 static void bakeModifier(
diff --git a/source/blender/gpencil_modifiers/intern/MOD_gpencilopacity.c b/source/blender/gpencil_modifiers/intern/MOD_gpencilopacity.c
index 541b37523b2..e0484e19959 100644
--- a/source/blender/gpencil_modifiers/intern/MOD_gpencilopacity.c
+++ b/source/blender/gpencil_modifiers/intern/MOD_gpencilopacity.c
@@ -61,6 +61,7 @@ static void initData(GpencilModifierData *md)
 	gpmd->layername[0] = '\0';
 	gpmd->vgname[0] = '\0';
 	gpmd->flag |= GP_OPACITY_CREATE_COLORS;
+	gpmd->modify_color = GP_MODIFY_COLOR_BOTH;
 }
 
 static void copyData(const GpencilModifierData *md, GpencilModifierData *target)
@@ -84,19 +85,24 @@ static void deformStroke(
 		return;
 	}
 
-	gps->runtime.tmp_fill_rgba[3] *= mmd->factor;
+	if (mmd->modify_color != GP_MODIFY_COLOR_FILL) {
+		gps->runtime.tmp_stroke_rgba[3] *= mmd->factor;
+		/* if factor is > 1, then force opacity */
+		if (mmd->factor > 1.0f) {
+			gps->runtime.tmp_stroke_rgba[3] += mmd->factor - 1.0f;
+		}
+		CLAMP(gps->runtime.tmp_stroke_rgba[3], 0.0f, 1.0f);
+	}
 
-	/* if factor is > 1, then force opacity */
-	if (mmd->factor > 1.0f) {
-		gps->runtime.tmp_stroke_rgba[3] += mmd->factor - 1.0f;
-		if (gps->runtime.tmp_fill_rgba[3] > 1e-5) {
+	if (mmd->modify_color != GP_MODIFY_COLOR_STROKE) {
+		gps->runtime.tmp_fill_rgba[3] *= mmd->factor;
+		/* if factor is > 1, then force opacity */
+		if (mmd->factor > 1.0f && gps->runtime.tmp_fill_rgba[3] > 1e-5) {
 			gps->runtime.tmp_fill_rgba[3] += mmd->factor - 1.0f;
 		}
+		CLAMP(gps->runtime.tmp_fill_rgba[3], 0.0f, 1.0f);
 	}
 
-	CLAMP(gps->runtime.tmp_stroke_rgba[3], 0.0f, 1.0f);
-	CLAMP(gps->runtime.tmp_fill_rgba[3], 0.0f, 1.0f);
-
 	/* if opacity > 1.0, affect the strength of the stroke */
 	if (mmd->factor > 1.0f) {
 		for (int i = 0; i < gps->totpoints; i++) {
diff --git a/source/blender/gpencil_modifiers/intern/MOD_gpenciltint.c b/source/blender/gpencil_modifiers/intern/MOD_gpenciltint.c
index 06212451d48..8af9ff6eec8 100644
--- a/source/blender/gpencil_modifiers/intern/MOD_gpenciltint.c
+++ b/source/blender/gpencil_modifiers/intern/MOD_gpenciltint.c
@@ -60,6 +60,7 @@ static void initData(GpencilModifierData *md)
 	gpmd->layername[0] = '\0';
 	ARRAY_SET_ITEMS(gpmd->rgb, 1.0f, 1.0f, 1.0f);
 	gpmd->flag |= GP_TINT_CREATE_COLORS;
+	gpmd->modify_color = GP_MODIFY_COLOR_BOTH;
 }
 
 static void copyData(const GpencilModifierData *md, GpencilModifierData *target)
@@ -81,20 +82,24 @@ static void deformStroke(
 		return;
 	}
 
-	interp_v3_v3v3(gps->runtime.tmp_stroke_rgba, gps->runtime.tmp_stroke_rgba, mmd->rgb, mmd->factor);
-	interp_v3_v3v3(gps->runtime.tmp_fill_rgba, gps->runtime.tmp_fill_rgba, mmd->rgb, mmd->factor);
+	if (mmd->modify_color != GP_MODIFY_COLOR_FILL) {
+		interp_v3_v3v3(gps->runtime.tmp_stroke_rgba, gps->runtime.tmp_stroke_rgba, mmd->rgb, mmd->factor);
+		/* if factor is > 1, the alpha must be changed to get full tint */
+		if (mmd->factor > 1.0f) {
+			gps->runtime.tmp_stroke_rgba[3] += mmd->factor - 1.0f;
+		}
+		CLAMP4(gps->runtime.tmp_stroke_rgba, 0.0f, 1.0f);
+	}
 
-	/* if factor is > 1, the alpha must be changed to get full tint */
-	if (mmd->factor > 1.0f) {
-		gps->runtime.tmp_stroke_rgba[3] += mmd->factor - 1.0f;
-		if (gps->runtime.tmp_fill_rgba[3] > 1e-5) {
+	if (mmd->modify_color != GP_MODIFY_COLOR_STROKE) {
+		interp_v3_v3v3(gps->runtime.tmp_fill_rgba, gps->runtime.tmp_fill_rgba, mmd->rgb, mmd->factor);
+		/* if factor is > 1, the alpha must be changed to get full tint */
+		if (mmd->factor > 1.0f && gps->runtime.tmp_fill_rgba[3] > 1e-5) {
 			gps->runtime.tmp_fill_rgba[3] += mmd->factor - 1.0f;
 		}
+		CLAMP4(gps->runtime.tmp_fill_rgba, 0.0f, 1.0f);
 	}
 
-	CLAMP4(gps->runtime.tmp_stroke_rgba, 0.0f, 1.0f);
-	CLAMP4(gps->runtime.tmp_fill_rgba, 0.0f, 1.0f);
-
 	/* if factor > 1.0, affect the strength of the stroke */
 	if (mmd->factor > 1.0f) {
 		for (int i = 0; i < gps->totpoints; i++) {
diff --git a/source/blender/makesdna/DNA_gpencil_modifier_types.h b/source/blender/makesdna/DNA_gpencil_modifier_types.h
index c1e2244427e..ae3621576f2 100644
--- a/source/blender/makesdna/DNA_gpencil_modifier_types.h
+++ b/source/blender/makesdna/DNA_gpencil_modifier_types.h
@@ -138,6 +138,12 @@ typedef enum eThickGpencil_Flag {
 	GP_THICK_NORMALIZE      = (1 << 4),
 } eThickGpencil_Flag;
 
+typedef enum eModifyColorGpencil_Flag {
+	GP_MODIFY_COLOR_BOTH = 0,
+	GP_MODIFY_COLOR_STROKE = 1,
+	GP_MODIFY_COLOR_FILL = 2
+} eModifyColorGpencil_Flag;
+
 typedef struct TintGpencilModifierData {
 	GpencilModifierData modifier;
 	char layername[64];          /* layer name */
@@ -145,6 +151,8 @@ typedef struct TintGpencilModifierData {
 	int flag;                    /* flags */
 	float rgb[3];                /* Tint color */
 	float factor;                /* Mix factor */
+	char modify_color;                    /* modify stroke, fill or both */
+	char pad[7];
 } TintGpencilModifierData;
 
 typedef enum eTintGpencil_Flag {
@@ -159,7 +167,8 @@ typedef struct ColorGpencilModifierData {
 	int pass_index;               /* custom index for passes */
 	int flag;                    /* flags */
 	float hsv[3];                /* hsv factors */
-	char pad[4];
+	char modify_color;                    /* modify stroke, fill or both */
+	char pad[3];
 } ColorGpencilModifierData;
 
 typedef enum eColorGpencil_Flag {
@@ -175,7 +184,8 @@ typedef struct OpacityGpencilModifierData {
 	int pass_index;               /* custom index for passes */
 	int flag;                    /* flags */
 	float factor;                /* Main Opacity factor */
-	char pad[4];
+	char modify_color;                    /* modify stroke, fill or both */
+	char pad[3];
 } OpacityGpencilModifierData;
 
 typedef enum eOpacityGpencil_Flag {
diff --git a/source/blender/makesrna/intern/rna_gpencil_modifier.c b/source/blender/makesrna/intern/rna_gpencil_modifier.c
index 4f29ed58ba7..c137eec7568 100644
--- a/source/blender/makesrna/intern/rna_gpencil_modifier.c
+++ b/source/blender/makesrna/intern/rna_gpencil_modifier.c
@@ -82,6 +82,13 @@ const EnumPropertyItem rna_enum_object_greasepencil_modifier_type_items[] = {
 };
 
 #ifndef RNA_RUNTIME
+static const EnumPropertyItem modifier_modify_color_items[] = {
+	{ GP_MODIFY_COLOR_BOTH, "BOTH", 0, "Both", "Modify fill and stroke colors" },
+	{ GP_MODIFY_COLOR_STROKE, "STROKE", 0, "Stroke", "Modify stroke color only" },
+	{ GP_MODIFY_COLOR_FILL, "FILL", 0, "Fill", "Modify fill color only" },
+	{ 0, NULL, 0, NULL, NULL }
+};
+
 static const EnumPropertyItem modifier_gphook_falloff_items[] = {
 	{ eGPHook_Falloff_None,    "NONE", 0, "No Falloff", "" },
 	{ eGPHook_Falloff_Curve,   "CURVE", 0, "Curve", "" },
@@ -663,6 +670,11 @@ static void rna_def_modifier_gpenciltint(BlenderRNA *brna)
 	RNA_def_struct_sdna(srna, "TintGpencilModifierData");
 	RNA_def_struct_ui_icon(srna, ICON_COLOR);
 
+	prop = RNA_def_property(srna, "modify_color", PROP_ENUM, PROP_NONE);
+	RNA_def_property_enum_items(prop, modifier_modify_color_items);  /* share the enum */
+	RNA_def_property_ui_text(prop, "Mode", "Set what colors of the stroke are affected");
+	RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
+
 	prop = RNA_def_property(srna, "layer", PROP_STRING, PROP_NONE);
 	RNA_def_property_string_sdna(prop, NULL, "layername");
 	RNA_def_property_ui_text(prop, "Layer", "Layer name");
@@ -713,6 +725,11 @@ static void rna_def_modifier_gpencilcolor(BlenderRNA *brna)
 	RNA_def_struct_sdna(srna, "ColorGpencilModifierData");
 	RNA_def_struct_ui_icon(srna, ICON_GROUP_VCOL);
 
+	prop = RNA_def_property(srna, "modify_color", PROP_ENUM, PROP_NONE);
+	RNA_def_property_enum_items(prop, modifier_modify_color_items);  /* share the enum */
+	RNA_def_property_ui_text

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list