[Bf-blender-cvs] [63971f4c63e] greasepencil-object: New Hue/Saturation modifier

Antonio Vazquez noreply at git.blender.org
Mon Jul 24 13:49:29 CEST 2017


Commit: 63971f4c63e5fdff8aaa912a10323be724a32096
Author: Antonio Vazquez
Date:   Mon Jul 24 13:49:19 2017 +0200
Branches: greasepencil-object
https://developer.blender.org/rB63971f4c63e5fdff8aaa912a10323be724a32096

New Hue/Saturation modifier

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

M	release/scripts/startup/bl_ui/properties_data_modifier.py
M	source/blender/blenkernel/BKE_gpencil.h
M	source/blender/blenkernel/intern/gpencil.c
M	source/blender/makesdna/DNA_modifier_types.h
M	source/blender/makesrna/RNA_access.h
M	source/blender/makesrna/intern/rna_modifier.c
M	source/blender/modifiers/CMakeLists.txt
M	source/blender/modifiers/MOD_modifiertypes.h
A	source/blender/modifiers/intern/MOD_gpencilcolor.c
M	source/blender/modifiers/intern/MOD_util.c

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

diff --git a/release/scripts/startup/bl_ui/properties_data_modifier.py b/release/scripts/startup/bl_ui/properties_data_modifier.py
index 3467bb7acee..f30a523cfa9 100644
--- a/release/scripts/startup/bl_ui/properties_data_modifier.py
+++ b/release/scripts/startup/bl_ui/properties_data_modifier.py
@@ -1613,6 +1613,28 @@ class DATA_PT_modifiers(ModifierButtonsPanel, Panel):
         row = layout.row()
         row.prop(md, "create_colors")
 
+    def GP_COLOR(self, layout, ob, md):
+        gpd = ob.grease_pencil
+        split = layout.split()
+
+        col = split.column()
+        col.label("Color:")
+        col.prop(md, "hue", text="H")
+        col.prop(md, "saturation", text="S")
+        col.prop(md, "value", text="V")
+
+        col = split.column()
+        col.label("Layer:")
+        row = col.row(align=True)
+        row.prop_search(md, "layer", gpd, "layers", text="", icon="GREASEPENCIL")
+        row.prop(md, "inverse_layers", text="", icon="ARROW_LEFTRIGHT")
+        row = col.row(align=True)
+        row.prop(md, "passindex", text="Pass")
+        row.prop(md, "inverse_pass", text="", icon="ARROW_LEFTRIGHT")
+
+        row = layout.row()
+        row.prop(md, "create_colors")
+
     def GP_OPACITY(self, layout, ob, md):
         gpd = ob.grease_pencil
         split = layout.split()
diff --git a/source/blender/blenkernel/BKE_gpencil.h b/source/blender/blenkernel/BKE_gpencil.h
index 57161195119..861da789d88 100644
--- a/source/blender/blenkernel/BKE_gpencil.h
+++ b/source/blender/blenkernel/BKE_gpencil.h
@@ -47,6 +47,7 @@ struct GpencilNoiseModifierData;
 struct GpencilSubdivModifierData;
 struct GpencilThickModifierData;
 struct GpencilTintModifierData;
+struct GpencilColorModifierData;
 struct GpencilArrayModifierData;
 struct GpencilDupliModifierData;
 struct GpencilOpacityModifierData;
@@ -153,6 +154,7 @@ void ED_gpencil_noise_modifier(int id, struct GpencilNoiseModifierData *mmd, str
 void ED_gpencil_subdiv_modifier(int id, struct GpencilSubdivModifierData *mmd, struct bGPDlayer *gpl, struct bGPDstroke *gps);
 void ED_gpencil_thick_modifier(int id, struct GpencilThickModifierData *mmd, struct bGPDlayer *gpl, struct bGPDstroke *gps);
 void ED_gpencil_tint_modifier(int id, struct GpencilTintModifierData *mmd, struct bGPDlayer *gpl, struct bGPDstroke *gps);
+void ED_gpencil_color_modifier(int id, struct GpencilColorModifierData *mmd, struct bGPDlayer *gpl, struct bGPDstroke *gps);
 void ED_gpencil_array_modifier(int id, struct GpencilArrayModifierData *mmd, struct Object *ob, int elem_idx[3], float r_mat[4][4]);
 void ED_gpencil_dupli_modifier(int id, struct GpencilDupliModifierData *mmd, struct bGPDlayer *gpl, struct bGPDframe *gpf);
 void ED_gpencil_opacity_modifier(int id, struct GpencilOpacityModifierData *mmd, struct bGPDlayer *gpl, struct bGPDstroke *gps);
diff --git a/source/blender/blenkernel/intern/gpencil.c b/source/blender/blenkernel/intern/gpencil.c
index 7a135e17d50..2c905b44acc 100644
--- a/source/blender/blenkernel/intern/gpencil.c
+++ b/source/blender/blenkernel/intern/gpencil.c
@@ -39,6 +39,7 @@
 #include "BLI_blenlib.h"
 #include "BLI_utildefines.h"
 #include "BLI_math_vector.h"
+#include "BLI_math_color.h"
 #include "BLI_string_utils.h"
 #include "BLI_rand.h"
 
@@ -1916,6 +1917,27 @@ void ED_gpencil_tint_modifier(int UNUSED(id), GpencilTintModifierData *mmd, bGPD
 	CLAMP3(gps->palcolor->fill, 0.0f, 1.0f);
 }
 
+/* color correction strokes */
+void ED_gpencil_color_modifier(int UNUSED(id), GpencilColorModifierData *mmd, bGPDlayer *gpl, bGPDstroke *gps)
+{
+	float hsv[3];
+	if (!is_stroke_affected_by_modifier(mmd->layername, mmd->passindex, 3, 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);
+	add_v3_v3(hsv, mmd->hsv);
+	hsv_to_rgb_v(hsv, gps->palcolor->rgb);
+
+	rgb_to_hsv_v(gps->palcolor->fill, hsv);
+	add_v3_v3(hsv, mmd->hsv);
+	hsv_to_rgb_v(hsv, gps->palcolor->fill);
+
+	CLAMP3(gps->palcolor->rgb, 0.0f, 1.0f);
+	CLAMP3(gps->palcolor->fill, 0.0f, 1.0f);
+}
+
 /* opacity strokes */
 void ED_gpencil_opacity_modifier(int UNUSED(id), GpencilOpacityModifierData *mmd, bGPDlayer *gpl, bGPDstroke *gps)
 {
@@ -1935,7 +1957,7 @@ void ED_gpencil_opacity_modifier(int UNUSED(id), GpencilOpacityModifierData *mmd
 	/* if opacity > 1.0, affect the strength of the stroke */
 	if (mmd->factor > 1.0f) {
 		for (int i = 0; i < gps->totpoints; ++i) {
-			bGPDspoint *pt = &gps->points[i];
+			pt = &gps->points[i];
 			pt->strength += (mmd->factor - 1.0f);
 			CLAMP(pt->strength, 0.0f, 1.0f);
 		}
@@ -2139,10 +2161,14 @@ void ED_gpencil_stroke_modifiers(Object *ob, bGPDlayer *gpl, bGPDframe *gpf, bGP
 			case eModifierType_GpencilTint:
 				ED_gpencil_tint_modifier(id, (GpencilTintModifierData *)md, gpl, gps);
 				break;
-				// Tint
+				// Opacity
 			case eModifierType_GpencilOpacity:
 				ED_gpencil_opacity_modifier(id, (GpencilOpacityModifierData *)md, gpl, gps);
 				break;
+				// Color Correction
+			case eModifierType_GpencilColor:
+				ED_gpencil_color_modifier(id, (GpencilColorModifierData *)md, gpl, gps);
+				break;
 			}
 		}
 		++id;
diff --git a/source/blender/makesdna/DNA_modifier_types.h b/source/blender/makesdna/DNA_modifier_types.h
index e5725fedaa4..8fa56123186 100644
--- a/source/blender/makesdna/DNA_modifier_types.h
+++ b/source/blender/makesdna/DNA_modifier_types.h
@@ -94,6 +94,7 @@ typedef enum ModifierType {
 	eModifierType_GpencilArray      = 58,
 	eModifierType_GpencilDupli      = 59,
 	eModifierType_GpencilOpacity    = 60,
+	eModifierType_GpencilColor      = 61,
 	NUM_MODIFIER_TYPES
 } ModifierType;
 
@@ -1687,6 +1688,21 @@ typedef enum eGpencilTint_Flag {
 	GP_TINT_INVERSE_PASS  = (1 << 2),
 } eGpencilTint_Flag;
 
+typedef struct GpencilColorModifierData {
+	ModifierData modifier;
+	char layername[64];          /* layer name */
+	int passindex;               /* custom index for passes */
+	int flag;                    /* flags */
+	float hsv[3];                /* hsv factors */
+	char pad[4];
+} GpencilColorModifierData;
+
+typedef enum eGpencilColor_Flag {
+	GP_COLOR_CREATE_COLORS = (1 << 0),
+	GP_COLOR_INVERSE_LAYER = (1 << 1),
+	GP_COLOR_INVERSE_PASS = (1 << 2),
+} eGpencilColor_Flag;
+
 typedef struct GpencilOpacityModifierData {
 	ModifierData modifier;
 	char layername[64];          /* layer name */
diff --git a/source/blender/makesrna/RNA_access.h b/source/blender/makesrna/RNA_access.h
index 63088d1afe6..edc760252e0 100644
--- a/source/blender/makesrna/RNA_access.h
+++ b/source/blender/makesrna/RNA_access.h
@@ -616,6 +616,7 @@ extern StructRNA RNA_GpencilNoiseModifier;
 extern StructRNA RNA_GpencilSubdivModifier;
 extern StructRNA RNA_GpencilThickModifier;
 extern StructRNA RNA_GpencilTintModifier;
+extern StructRNA RNA_GpencilColorModifier;
 extern StructRNA RNA_GpencilArrayModifier;
 extern StructRNA RNA_GpencilDupliModifier;
 extern StructRNA RNA_GpencilOpacityModifier;
diff --git a/source/blender/makesrna/intern/rna_modifier.c b/source/blender/makesrna/intern/rna_modifier.c
index ed99a339783..bd44b51adc8 100644
--- a/source/blender/makesrna/intern/rna_modifier.c
+++ b/source/blender/makesrna/intern/rna_modifier.c
@@ -127,6 +127,7 @@ EnumPropertyItem rna_enum_object_modifier_type_items[] = {
 	{eModifierType_GpencilSubdiv, "GP_SUBDIV", ICON_MOD_SUBSURF, "Subdivide", "Subdivide stroke adding more control points to strokes" },
 	{eModifierType_GpencilThick, "GP_THICK", ICON_MAN_ROT, "Thickness", "Change stroke thickness" },
 	{eModifierType_GpencilTint, "GP_TINT", ICON_COLOR, "Tint", "Tint strokes with new color" },
+	{eModifierType_GpencilColor, "GP_COLOR", ICON_GROUP_VCOL, "Hue/Saturation", "Apply changes to color" },
 	{eModifierType_GpencilOpacity, "GP_OPACITY", ICON_MOD_MASK, "Opacity", "Opacity of the strokes" },
 	{0, NULL, 0, NULL, NULL}
 };
@@ -447,6 +448,8 @@ static StructRNA *rna_Modifier_refine(struct PointerRNA *ptr)
 			return &RNA_GpencilThickModifier;
 		case eModifierType_GpencilTint:
 			return &RNA_GpencilTintModifier;
+		case eModifierType_GpencilColor:
+			return &RNA_GpencilColorModifier;
 		case eModifierType_GpencilArray:
 			return &RNA_GpencilArrayModifier;
 		case eModifierType_GpencilDupli:
@@ -4979,6 +4982,7 @@ static void rna_def_modifier_gpenciltint(BlenderRNA *brna)
 	prop = RNA_def_property(srna, "factor", PROP_FLOAT, PROP_NONE);
 	RNA_def_property_float_sdna(prop, NULL, "factor");
 	RNA_def_property_range(prop, 0, 1.0);
+	RNA_def_property_ui_range(prop, 0, 1.0, 0.1, 3);
 	RNA_def_property_ui_text(prop, "Factor", "Factor for mixing color");
 	RNA_def_property_update(prop, 0, "rna_Modifier_update");
 
@@ -5004,6 +5008,64 @@ static void rna_def_modifier_gpenciltint(BlenderRNA *brna)
 	RNA_def_property_update(prop, 0, "rna_Modifier_update");
 }
 
+static void rna_def_modifier_gpencilcolor(BlenderRNA *brna)
+{
+	StructRNA *srna;
+	PropertyRNA *prop;
+
+	srna = RNA_def_struct(brna, "GpencilColorModifier", "Modifier");
+	RNA_def_struct_ui_text(srna, "Hue/Saturation Modifier", "Change Hue/Saturation modifier");
+	RNA_def_struct_sdna(srna, "GpencilColorModifierData");
+	RNA_def_struct_ui_icon(srna, ICON_GROUP_VCOL);
+
+	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");
+	RNA_def_property_update(prop, 0, "rna_Modifier_update");
+
+	prop = RNA_def_property(srna, "hue", PROP_FLOAT, PROP_NONE);
+	RNA_def_property_range(prop, -1.0, 1.0);
+	RNA_def_property_ui_range(prop, -1.0, 1.0, 0.1, 3);
+	RNA_def_property_float_sdna(prop, NULL, "hsv[0]");
+	RNA_def_property_ui_text(prop, "Hue", "Color Hue");
+	RNA_def_property_update(prop, 0, "rna_Modifier_update");
+
+	prop = RNA_def_property(srna, "saturation", PROP_FLOAT, PROP_NONE);
+	RNA_def_property_range(prop, -1.0, 1.0);
+	RNA_def_property_ui_range(prop, -1.0, 1.0, 0.1, 3);
+	RNA_def_property_float_sdna(prop, NULL, "hsv[1]");
+	RNA_def_property_ui_text(prop, "Saturation", "Color Saturation");
+	RNA_def_property_update(prop, 0, "rna_Modifier_update");
+
+	prop = RNA_def_property(srna, "value", PROP_FLOAT, PROP_NONE);
+	RNA_def_property_range(prop, -1.0, 1.0);
+	RNA_def_property_ui_range(prop, -1.0, 1

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list