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. @@

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to