Commit: 32e49c732bcbf225dd83c8f74911d2d1d8e8a8fb
Author: Joshua Leung
Date:   Tue Oct 31 19:59:33 2017 +1300
Branches: greasepencil-object
https://developer.blender.org/rB32e49c732bcbf225dd83c8f74911d2d1d8e8a8fb

Porting more GP Modifiers

* Opacity modifier
* Color modifier
* Thickness modifier
* Tint modifier

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

M       source/blender/blenkernel/BKE_gpencil.h
M       source/blender/blenkernel/intern/gpencil_modifier.c
M       source/blender/modifiers/intern/MOD_gpencilcolor.c
M       source/blender/modifiers/intern/MOD_gpencilnoise.c
M       source/blender/modifiers/intern/MOD_gpencilopacity.c
M       source/blender/modifiers/intern/MOD_gpencilthick.c
M       source/blender/modifiers/intern/MOD_gpenciltint.c

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

diff --git a/source/blender/blenkernel/BKE_gpencil.h 
b/source/blender/blenkernel/BKE_gpencil.h
index 7f338a18383..90f48d590c8 100644
--- a/source/blender/blenkernel/BKE_gpencil.h
+++ b/source/blender/blenkernel/BKE_gpencil.h
@@ -203,12 +203,8 @@ void BKE_gpencil_stroke_normal(const struct bGPDstroke 
*gps, float r_normal[3]);
 
 void BKE_gpencil_subdiv_modifier(int id, struct GpencilSubdivModifierData 
*mmd, struct Object *ob, struct bGPDlayer *gpl, struct bGPDstroke *gps);
 void BKE_gpencil_simplify_modifier(int id, struct GpencilSimplifyModifierData 
*mmd, struct Object *ob, struct bGPDlayer *gpl, struct bGPDstroke *gps);
-void BKE_gpencil_thick_modifier(int id, struct GpencilThickModifierData *mmd, 
struct Object *ob, struct bGPDlayer *gpl, struct bGPDstroke *gps);
-void BKE_gpencil_tint_modifier(int id, struct GpencilTintModifierData *mmd, 
struct Object *ob, struct bGPDlayer *gpl, struct bGPDstroke *gps);
-void BKE_gpencil_color_modifier(int id, struct GpencilColorModifierData *mmd, 
struct Object *ob, struct bGPDlayer *gpl, struct bGPDstroke *gps);
 void BKE_gpencil_array_modifier(int id, struct GpencilArrayModifierData *mmd, 
struct Object *ob, int elem_idx[3], float r_mat[4][4]);
 void BKE_gpencil_dupli_modifier(int id, struct GpencilDupliModifierData *mmd, 
struct Object *ob, struct bGPDlayer *gpl, struct bGPDframe *gpf);
-void BKE_gpencil_opacity_modifier(int id, struct GpencilOpacityModifierData 
*mmd, struct Object *ob, struct bGPDlayer *gpl, struct bGPDstroke *gps);
 
 /* (wrapper api) simplify stroke using Ramer-Douglas-Peucker algorithm */
 void BKE_gpencil_simplify_stroke(struct bGPDlayer *gpl, struct bGPDstroke 
*gps, float factor);
diff --git a/source/blender/blenkernel/intern/gpencil_modifier.c 
b/source/blender/blenkernel/intern/gpencil_modifier.c
index 99604270739..09259fb7215 100644
--- a/source/blender/blenkernel/intern/gpencil_modifier.c
+++ b/source/blender/blenkernel/intern/gpencil_modifier.c
@@ -180,156 +180,7 @@ void BKE_gpencil_subdiv_modifier(
        }
 }
 
-/* change stroke thickness */
-void BKE_gpencil_thick_modifier(
-        int UNUSED(id), GpencilThickModifierData *mmd, Object *ob, bGPDlayer 
*gpl, bGPDstroke *gps)
-{
-       bGPDspoint *pt;
-       int vindex = defgroup_name_index(ob, mmd->vgname);
-       float weight = 1.0f;
-       float curvef = 1.0;
-
-       if (!is_stroke_affected_by_modifier(
-               mmd->layername, mmd->pass_index, 3, gpl, gps,
-               mmd->flag & GP_THICK_INVERSE_LAYER, mmd->flag & 
GP_THICK_INVERSE_PASS))
-       {
-               return;
-       }
-
-       for (int i = 0; i < gps->totpoints; i++) {
-               curvef = 1.0;
-               pt = &gps->points[i];
-               /* verify vertex group */
-               weight = is_point_affected_by_modifier(pt, (int)(!(mmd->flag & 
GP_THICK_INVERSE_VGROUP) == 0), vindex);
-               if (weight < 0) {
-                       continue;
-               }
-
-               if ((mmd->flag & GP_THICK_CUSTOM_CURVE) && 
(mmd->cur_thickness)) {
-                       /* nomalize value */
-                       float value = (float)i / (gps->totpoints - 1);
-                       curvef = curvemapping_evaluateF(mmd->cur_thickness, 0, 
value);
-               }
-
-               pt->pressure += mmd->thickness * weight * curvef;
-               CLAMP(pt->strength, 0.0f, 1.0f);
-       }
-
-}
-
-/* tint strokes */
-void BKE_gpencil_tint_modifier(
-        int UNUSED(id), GpencilTintModifierData *mmd, Object *UNUSED(ob), 
bGPDlayer *gpl, bGPDstroke *gps)
-{
-       bGPDspoint *pt;
-
-       if (!is_stroke_affected_by_modifier(
-               mmd->layername, mmd->pass_index, 1, gpl, gps,
-               mmd->flag & GP_TINT_INVERSE_LAYER, mmd->flag & 
GP_TINT_INVERSE_PASS))
-       {
-               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);
-
-       /* if factor is > 1, the alpha must be changed to get full tint */
-       if (mmd->factor > 1.0f) {
-               gps->palcolor->rgb[3] += mmd->factor - 1.0f;
-               if (gps->palcolor->fill[3] > 1e-5) {
-                       gps->palcolor->fill[3] += mmd->factor - 1.0f;
-               }
-       }
 
-       CLAMP4(gps->palcolor->rgb, 0.0f, 1.0f);
-       CLAMP4(gps->palcolor->fill, 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++) {
-                       pt = &gps->points[i];
-                       pt->strength += mmd->factor - 1.0f;
-                       CLAMP(pt->strength, 0.0f, 1.0f);
-               }
-       }
-
-}
-
-/* color correction strokes */
-void BKE_gpencil_color_modifier(
-        int UNUSED(id), GpencilColorModifierData *mmd, Object *UNUSED(ob), 
bGPDlayer *gpl, bGPDstroke *gps)
-{
-       PaletteColor *palcolor;
-       float hsv[3], factor[3];
-       if (!is_stroke_affected_by_modifier(
-               mmd->layername, mmd->pass_index, 1, gpl, gps,
-               mmd->flag & GP_COLOR_INVERSE_LAYER, mmd->flag & 
GP_COLOR_INVERSE_PASS))
-       {
-               return;
-       }
-
-       palcolor = gps->palcolor;
-       copy_v3_v3(factor, mmd->hsv);
-       add_v3_fl(factor, -1.0f);
-
-       rgb_to_hsv_v(palcolor->rgb, hsv);
-       add_v3_v3(hsv, factor);
-       CLAMP3(hsv, 0.0f, 1.0f);
-       hsv_to_rgb_v(hsv, palcolor->rgb);
-
-       rgb_to_hsv_v(palcolor->fill, hsv);
-       add_v3_v3(hsv, factor);
-       CLAMP3(hsv, 0.0f, 1.0f);
-       hsv_to_rgb_v(hsv, palcolor->fill);
-
-}
-
-/* opacity strokes */
-void BKE_gpencil_opacity_modifier(
-        int UNUSED(id), GpencilOpacityModifierData *mmd, Object *ob, bGPDlayer 
*gpl, bGPDstroke *gps)
-{
-       bGPDspoint *pt;
-       int vindex = defgroup_name_index(ob, mmd->vgname);
-       float weight = 1.0f;
-
-       if (!is_stroke_affected_by_modifier(
-               mmd->layername, mmd->pass_index, 3, gpl, gps,
-               mmd->flag & GP_OPACITY_INVERSE_LAYER, mmd->flag & 
GP_OPACITY_INVERSE_PASS))
-       {
-               return;
-       }
-
-       gps->palcolor->rgb[3] = gps->palcolor->rgb[3] * mmd->factor;
-       gps->palcolor->fill[3] = gps->palcolor->fill[3] * mmd->factor;
-
-       /* if factor is > 1, then force opacity */
-       if (mmd->factor > 1.0f) {
-               gps->palcolor->rgb[3] += mmd->factor - 1.0f;
-               if (gps->palcolor->fill[3] > 1e-5) {
-                       gps->palcolor->fill[3] += mmd->factor - 1.0f;
-               }
-       }
-
-
-       CLAMP(gps->palcolor->rgb[3], 0.0f, 1.0f);
-       CLAMP(gps->palcolor->fill[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++) {
-                       pt = &gps->points[i];
-                       /* verify vertex group */
-                       weight = is_point_affected_by_modifier(pt, 
(int)(!(mmd->flag & GP_OPACITY_INVERSE_VGROUP) == 0), vindex);
-                       if (weight < 0) {
-                               pt->strength += mmd->factor - 1.0f;
-                       }
-                       else {
-                               pt->strength += ((mmd->factor * weight) - 1.0f);
-                       }
-                       CLAMP(pt->strength, 0.0f, 1.0f);
-               }
-       }
-}
 
 /* helper function to sort strokes using qsort */
 static int gpencil_stroke_cache_compare(const void *a1, const void *a2)
@@ -801,22 +652,6 @@ void BKE_gpencil_stroke_modifiers(Object *ob, bGPDlayer 
*gpl, bGPDframe *UNUSED(
                                case eModifierType_GpencilSimplify:
                                        BKE_gpencil_simplify_modifier(id, 
(GpencilSimplifyModifierData *)md, ob, gpl, gps);
                                        break;
-                                       // Thickness
-                               case eModifierType_GpencilThick:
-                                       BKE_gpencil_thick_modifier(id, 
(GpencilThickModifierData *)md, ob, gpl, gps);
-                                       break;
-                                       // Tint
-                               case eModifierType_GpencilTint:
-                                       BKE_gpencil_tint_modifier(id, 
(GpencilTintModifierData *)md, ob, gpl, gps);
-                                       break;
-                                       // Opacity
-                               case eModifierType_GpencilOpacity:
-                                       BKE_gpencil_opacity_modifier(id, 
(GpencilOpacityModifierData *)md, ob, gpl, gps);
-                                       break;
-                                       // Color Correction
-                               case eModifierType_GpencilColor:
-                                       BKE_gpencil_color_modifier(id, 
(GpencilColorModifierData *)md, ob, gpl, gps);
-                                       break;
                                        // Lattice
                                case eModifierType_GpencilLattice:
                                        BKE_gpencil_lattice_modifier(id, 
(GpencilLatticeModifierData *)md, ob, gpl, gps);
diff --git a/source/blender/modifiers/intern/MOD_gpencilcolor.c 
b/source/blender/modifiers/intern/MOD_gpencilcolor.c
index 5a7f27818fe..f065e364787 100644
--- a/source/blender/modifiers/intern/MOD_gpencilcolor.c
+++ b/source/blender/modifiers/intern/MOD_gpencilcolor.c
@@ -34,8 +34,10 @@
 #include "DNA_object_types.h"
 #include "DNA_gpencil_types.h"
 
-#include "BLI_utildefines.h"
 #include "BLI_ghash.h"
+#include "BLI_math_color.h"
+#include "BLI_math_vector.h"
+#include "BLI_utildefines.h"
 
 #include "BKE_global.h"
 #include "BKE_context.h"
@@ -45,6 +47,7 @@
 #include "DEG_depsgraph.h"
 
 #include "MOD_modifiertypes.h"
+#include "MOD_gpencil_util.h"
 
 static void initData(ModifierData *md)
 {
@@ -60,7 +63,38 @@ static void copyData(ModifierData *md, ModifierData *target)
        modifier_copyData_generic(md, target);
 }
 
-static void bakeModifierGP(const bContext *C, const EvaluationContext 
*UNUSED(eval_ctx),
+/* color correction strokes */
+static void deformStroke(ModifierData *md, const EvaluationContext 
*UNUSED(eval_ctx),
+                         Object *UNUSED(ob), bGPDlayer *gpl, bGPDstroke *gps)
+{
+       GpencilColorModifierData *mmd = (GpencilColorModifierData *)md;
+       PaletteColor *palcolor;
+       float hsv[3], factor[3];
+
+       if (!is_stroke_affected_by_modifier(
+               mmd->layername, mmd->pass_index, 1, gpl, gps,
+               mmd->flag & GP_COLOR_INVERSE_LAYER, mmd->flag & 
GP_COLOR_INVERSE_PASS))
+       {
+               return;
+       }
+
+       palcolor = gps->palcolor;
+       copy_v3_v3(factor, mmd->hsv);
+       add_v3_fl(factor, -1.0f);
+
+       rgb_to_hsv_v(palcolor->rgb, hsv);
+       add_v3_v3(hsv, factor);
+       CLAMP3(hsv, 0.0f, 1.0f);
+       hsv_to_rgb_v(hsv, palcolor->rgb);
+
+       rgb_to_hsv_v(palcolor->fill, hsv);
+       add_v3_v3(hsv, factor);
+       CLAMP3(hsv, 0.0f, 1.0f);
+       hsv_to_rgb_v(hsv, palcolor->fill);
+
+}
+
+static void bakeModifierGP(const bContext *UNUSED(C), const EvaluationContext 
*eval_ctx,
                            ModifierData *md, Object *ob)
 {
        GpencilColorModifierData *mmd = (GpencilColorModifierData *)md;
@@ -95,7 +129,8 @@ static void bakeModifierGP(const bContext *C, const 
EvaluationContext *UNUSED(ev
                                                newpalcolor = gps->palcolor;
                                        }
                                        BLI_ghash_insert(gh_color, 
gps->palcolor->info, newpalcolor);
-                                       BKE_gpencil_color_modifier(-1, 
(GpencilColorModifierData *)md, ob, gpl, gps);
+                                       
+                                       deformStroke(md, eval_ctx, ob, gpl, 
gps);
                                }
                                else {
                                        gps->palcolor = newpalcolor;
@@ -135,7 +170,7 @@ ModifierTypeInfo modifierType_GpencilColor = {
        /* deformMatricesEM */  NULL,
        /* applyModifier */     NULL,
        /* applyModifierEM */   NULL,
-       /* deformStroke */      NULL,
+       /* deformStroke */      deformStroke,
        /* generateStrokes */   NULL,
        /* bakeModifierGP */    bakeModifier

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