[Bf-blender-cvs] [32e49c732bc] greasepencil-object: Porting more GP Modifiers

Joshua Leung noreply at git.blender.org
Sat Nov 4 05:48:22 CET 2017


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



More information about the Bf-blender-cvs mailing list