[Bf-blender-cvs] [0b2c0819430] greasepencil-object: New Tint modifier

Antonio Vazquez noreply at git.blender.org
Mon Jul 17 20:42:11 CEST 2017


Commit: 0b2c08194301ce8429cc3523d4d99a5d2f3a36a1
Author: Antonio Vazquez
Date:   Mon Jul 17 20:40:42 2017 +0200
Branches: greasepencil-object
https://developer.blender.org/rB0b2c08194301ce8429cc3523d4d99a5d2f3a36a1

New Tint modifier

This modifier allows to tint with a color all strokes and create a new set of colors when apply the modifier

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

M	release/scripts/startup/bl_ui/properties_data_modifier.py
M	source/blender/blenkernel/BKE_gpencil.h
M	source/blender/blenkernel/BKE_paint.h
M	source/blender/blenkernel/intern/gpencil.c
M	source/blender/blenkernel/intern/paint.c
M	source/blender/editors/sculpt_paint/paint_ops.c
M	source/blender/makesdna/DNA_modifier_types.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_gpenciltint.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 84ad120a97d..4c4a3aff50d 100644
--- a/release/scripts/startup/bl_ui/properties_data_modifier.py
+++ b/release/scripts/startup/bl_ui/properties_data_modifier.py
@@ -1577,6 +1577,22 @@ class DATA_PT_modifiers(ModifierButtonsPanel, Panel):
         col.label("Layer:")
         col.prop_search(md, "layer", gpd, "layers", text="", icon="GREASEPENCIL")
 
+    def GP_TINT(self, layout, ob, md):
+        gpd = ob.grease_pencil
+        split = layout.split()
+
+        col = split.column()
+        col.prop(md, "color")
+        col.prop(md, "factor")
+
+        col = split.column()
+        col.label("Layer:")
+        col.prop_search(md, "layer", gpd, "layers", text="", icon="GREASEPENCIL")
+        col.prop(md, "passindex", text="Pass")
+
+        row = layout.row()
+        row.prop(md, "create_colors")
+
 classes = (
     DATA_PT_modifiers,
 )
diff --git a/source/blender/blenkernel/BKE_gpencil.h b/source/blender/blenkernel/BKE_gpencil.h
index df1f9daab45..e3d3bb9bda2 100644
--- a/source/blender/blenkernel/BKE_gpencil.h
+++ b/source/blender/blenkernel/BKE_gpencil.h
@@ -46,6 +46,7 @@ struct Object;
 struct GpencilNoiseModifierData;
 struct GpencilSubdivModifierData;
 struct GpencilThickModifierData;
+struct GpencilTintModifierData;
 
 /* ------------ Grease-Pencil API ------------------ */
 
@@ -139,5 +140,6 @@ void ED_gpencil_stroke_modifiers(struct Object *ob, struct bGPDlayer *gpl, struc
 void ED_gpencil_noise_modifier(struct GpencilNoiseModifierData *mmd, struct bGPDlayer *gpl, struct bGPDstroke *gps);
 void ED_gpencil_subdiv_modifier(struct GpencilSubdivModifierData *mmd, struct bGPDlayer *gpl, struct bGPDstroke *gps);
 void ED_gpencil_thick_modifier(struct GpencilThickModifierData *mmd, struct bGPDlayer *gpl, struct bGPDstroke *gps);
+void ED_gpencil_tint_modifier(struct GpencilTintModifierData *mmd, struct bGPDlayer *gpl, struct bGPDstroke *gps);
 
 #endif /*  __BKE_GPENCIL_H__ */
diff --git a/source/blender/blenkernel/BKE_paint.h b/source/blender/blenkernel/BKE_paint.h
index 18411d7d00d..3a1c05590c7 100644
--- a/source/blender/blenkernel/BKE_paint.h
+++ b/source/blender/blenkernel/BKE_paint.h
@@ -117,6 +117,7 @@ void                 BKE_palette_color_remove(struct Palette *palette, struct Pa
 struct PaletteColor *BKE_palette_color_get_active(struct Palette *palette);
 struct PaletteColor *BKE_palette_color_get_active_from_context(const struct bContext *C);
 void                 BKE_palette_color_add_default_set(struct Palette *palette);
+struct PaletteColor *BKE_palette_color_copy(struct Palette *palette, struct PaletteColor *palcolor);
 
 /* paint curves */
 struct PaintCurve *BKE_paint_curve_add(struct Main *bmain, const char *name);
diff --git a/source/blender/blenkernel/intern/gpencil.c b/source/blender/blenkernel/intern/gpencil.c
index f497fa0e551..0cb35af3094 100644
--- a/source/blender/blenkernel/intern/gpencil.c
+++ b/source/blender/blenkernel/intern/gpencil.c
@@ -1725,7 +1725,7 @@ void ED_gpencil_subdiv_modifier(GpencilSubdivModifierData *mmd, bGPDlayer *gpl,
 	}
 }
 
-/* subdivision surface */
+/* change stroke thickness */
 void ED_gpencil_thick_modifier(GpencilThickModifierData *mmd, bGPDlayer *gpl, bGPDstroke *gps)
 {
 	if (!is_stroke_affected_by_modifier(mmd->layername, mmd->passindex, 0, gpl, gps)) {
@@ -1735,6 +1735,16 @@ void ED_gpencil_thick_modifier(GpencilThickModifierData *mmd, bGPDlayer *gpl, bG
 	gps->thickness += mmd->thickness;
 }
 
+/* tint strokes */
+void ED_gpencil_tint_modifier(GpencilTintModifierData *mmd, bGPDlayer *gpl, bGPDstroke *gps)
+{
+	if (!is_stroke_affected_by_modifier(mmd->layername, mmd->passindex, 0, gpl, gps)) {
+		return;
+	}
+	interp_v3_v3v3(gps->palcolor->rgb, gps->palcolor->rgb, mmd->rgb, mmd->factor);
+	interp_v3_v3v3(gps->palcolor->fill, gps->palcolor->fill, mmd->rgb, mmd->factor);
+}
+
 /* apply stroke modifiers */
 void ED_gpencil_stroke_modifiers(Object *ob, bGPDlayer *gpl, bGPDstroke *gps)
 {
@@ -1752,10 +1762,14 @@ void ED_gpencil_stroke_modifiers(Object *ob, bGPDlayer *gpl, bGPDstroke *gps)
 			case eModifierType_GpencilSubdiv:
 				ED_gpencil_subdiv_modifier((GpencilSubdivModifierData *)md, gpl, gps);
 				break;
-			// Subdiv Surface
+			// Thickness
 			case eModifierType_GpencilThick:
 				ED_gpencil_thick_modifier((GpencilThickModifierData *)md, gpl, gps);
 				break;
+			// Tint
+			case eModifierType_GpencilTint:
+				ED_gpencil_tint_modifier((GpencilTintModifierData *)md, gpl, gps);
+				break;
 			default:
 				break;
 			}
diff --git a/source/blender/blenkernel/intern/paint.c b/source/blender/blenkernel/intern/paint.c
index 7c10a87b96f..89ae0769fd7 100644
--- a/source/blender/blenkernel/intern/paint.c
+++ b/source/blender/blenkernel/intern/paint.c
@@ -518,6 +518,35 @@ void BKE_palette_color_add_default_set(Palette *palette)
 	ARRAY_SET_ITEMS(palcolor->rgb, 0.0, 0.0, 1.0, 1.0);
 }
 
+PaletteColor *BKE_palette_color_copy(Palette *palette, PaletteColor *palcolor)
+{
+	PaletteColor *newcolor = NULL;
+
+	newcolor = BKE_palette_color_add_name(palette, palcolor->info);
+	copy_v4_v4(newcolor->rgb, palcolor->rgb);
+	copy_v4_v4(newcolor->fill, palcolor->fill);
+	copy_v4_v4(newcolor->scolor, palcolor->scolor);
+	newcolor->value = palcolor->value;
+	newcolor->flag = palcolor->flag;
+	newcolor->stroke_style = palcolor->stroke_style;
+	newcolor->fill_style = palcolor->fill_style;
+	newcolor->index = palcolor->index;
+	newcolor->mix_factor = palcolor->mix_factor;
+	newcolor->g_angle = palcolor->g_angle;
+	newcolor->g_radius = palcolor->g_radius;
+	newcolor->g_boxsize = palcolor->g_boxsize;
+	copy_v2_v2(newcolor->g_scale, palcolor->g_scale);
+	copy_v2_v2(newcolor->g_shift, palcolor->g_shift);
+	newcolor->t_angle = palcolor->t_angle;
+	copy_v2_v2(newcolor->t_scale, palcolor->t_scale);
+	copy_v2_v2(newcolor->t_shift, palcolor->t_shift);
+	newcolor->t_opacity = palcolor->t_opacity;
+	newcolor->sima = palcolor->sima;
+	newcolor->ima = palcolor->ima;
+
+	return newcolor;
+}
+
 PaletteColor *BKE_palette_color_add(Palette *palette)
 {
 	return BKE_palette_color_add_name(palette, "Color");
diff --git a/source/blender/editors/sculpt_paint/paint_ops.c b/source/blender/editors/sculpt_paint/paint_ops.c
index f32a9697b3c..ad1b515b3c4 100644
--- a/source/blender/editors/sculpt_paint/paint_ops.c
+++ b/source/blender/editors/sculpt_paint/paint_ops.c
@@ -748,26 +748,7 @@ static int palettecolor_copy_exec(bContext *C, wmOperator *UNUSED(op))
 		return OPERATOR_CANCELLED;
 
 	/* create a new color and duplicate data */
-	newcolor = BKE_palette_color_add_name(palette, palcolor->info);
-	copy_v4_v4(newcolor->rgb, palcolor->rgb);
-	copy_v4_v4(newcolor->fill, palcolor->fill);
-	copy_v4_v4(newcolor->scolor, palcolor->scolor);
-	newcolor->value = palcolor->value;
-	newcolor->flag = palcolor->flag;
-	newcolor->stroke_style = palcolor->stroke_style;
-	newcolor->fill_style = palcolor->fill_style;
-	newcolor->index = palcolor->index;
-	newcolor->mix_factor = palcolor->mix_factor;
-	newcolor->g_angle = palcolor->g_angle;
-	newcolor->g_radius = palcolor->g_radius;
-	newcolor->g_boxsize = palcolor->g_boxsize;
-	copy_v2_v2(newcolor->g_scale, palcolor->g_scale);
-	copy_v2_v2(newcolor->g_shift, palcolor->g_shift);
-	newcolor->t_angle = palcolor->t_angle;
-	copy_v2_v2(newcolor->t_scale, palcolor->t_scale);
-	copy_v2_v2(newcolor->t_shift, palcolor->t_shift);
-	newcolor->t_opacity = palcolor->t_opacity;
-	newcolor->ima = palcolor->ima;
+	newcolor = BKE_palette_color_copy(palette, palcolor);
 
 	/* notifiers */
 	WM_event_add_notifier(C, NC_GPENCIL | ND_DATA | NA_EDITED, NULL);
diff --git a/source/blender/makesdna/DNA_modifier_types.h b/source/blender/makesdna/DNA_modifier_types.h
index 796204f49f2..cd9ba951e21 100644
--- a/source/blender/makesdna/DNA_modifier_types.h
+++ b/source/blender/makesdna/DNA_modifier_types.h
@@ -89,7 +89,8 @@ typedef enum ModifierType {
 	eModifierType_SurfaceDeform     = 53,
 	eModifierType_GpencilNoise      = 54,
 	eModifierType_GpencilSubdiv     = 55,
-	eModifierType_GpencilThick    = 56,
+	eModifierType_GpencilThick      = 56,
+	eModifierType_GpencilTint       = 57,
 	NUM_MODIFIER_TYPES
 } ModifierType;
 
@@ -1654,6 +1655,19 @@ typedef struct GpencilThickModifierData {
 	char pad[4];
 } GpencilThickModifierData;
 
+typedef struct GpencilTintModifierData {
+	ModifierData modifier;
+	char layername[64];          /* layer name */
+	int passindex;               /* custom index for passes */
+	int flag;                    /* flags */
+	float rgb[3];                /* Tint color */
+	float factor;                /* Mix factor */
+} GpencilTintModifierData;
+
+typedef enum eGpencilTint_Flag {
+	GP_TINT_CREATE_COLORS = (1 << 0),
+} eGpencilTint_Flag;
+
 #define MOD_MESHSEQ_READ_ALL \
 	(MOD_MESHSEQ_READ_VERT | MOD_MESHSEQ_READ_POLY | MOD_MESHSEQ_READ_UV | MOD_MESHSEQ_READ_COLOR)
 
diff --git a/source/blender/makesrna/intern/rna_modifier.c b/source/blender/makesrna/intern/rna_modifier.c
index f0d6a49ffbc..f6e9ae95394 100644
--- a/source/blender/makesrna/intern/rna_modifier.c
+++ b/source/blender/makesrna/intern/rna_modifier.c
@@ -124,6 +124,7 @@ EnumPropertyItem rna_enum_object_modifier_type_items[] = {
 	{eModifierType_GpencilNoise, "GP_NOISE", ICON_RNDCURVE, "Noise", "Add noise to strokes" },
 	{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" },
 	{0, NULL, 0, NULL, NULL}
 };
 
@@ -424,7 +425,9 @@ static StructRNA *rna_Modifier_refine(struct PointerRNA *ptr)
 			return &RNA_GpencilSubdivModifier;
 		case eModifierType_GpencilThick:
 			return &RNA_GpencilThickModifier;
-		/* Default */
+		case eModifierType_GpencilTint:
+			return &RNA_GpencilTintModifier;
+			/* Default */
 		case eModifierType_None:
 		case eModifierType_ShapeKey:
 		case NUM_MODIFIER_TYPES:
@@ -4879,6 +4882,47 @@ static void rna_def_modifier_gpencilthick(BlenderRNA *brna)
 	RNA_def_property_update(prop, 0, "rna_Modifier_update");
 }

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list