[Bf-blender-cvs] [c706a78683d] greasepencil-object: GP Modifiers: Finish porting over last modifier (Simplify) and Cleanup Code

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


Commit: c706a78683d5124aaa9c066dd98ee12d55e69c44
Author: Joshua Leung
Date:   Sat Nov 4 12:04:05 2017 +1300
Branches: greasepencil-object
https://developer.blender.org/rBc706a78683d5124aaa9c066dd98ee12d55e69c44

GP Modifiers: Finish porting over last modifier (Simplify) and Cleanup Code

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

M	source/blender/blenkernel/BKE_gpencil.h
M	source/blender/blenkernel/intern/gpencil_modifier.c
M	source/blender/modifiers/intern/MOD_gpencilsimplify.c

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

diff --git a/source/blender/blenkernel/BKE_gpencil.h b/source/blender/blenkernel/BKE_gpencil.h
index 4cdf86ee862..15e9930088d 100644
--- a/source/blender/blenkernel/BKE_gpencil.h
+++ b/source/blender/blenkernel/BKE_gpencil.h
@@ -191,18 +191,14 @@ bool BKE_gpencil_has_geometry_modifiers(struct Object *ob);
 void BKE_gpencil_stroke_modifiers(struct Object *ob, struct bGPDlayer *gpl, struct bGPDframe *gpf, struct bGPDstroke *gps);
 void BKE_gpencil_geometry_modifiers(struct Object *ob, struct bGPDlayer *gpl, struct bGPDframe *gpf);
 
-void BKE_gpencil_stroke_normal(const struct bGPDstroke *gps, float r_normal[3]);
-
 void BKE_gpencil_array_modifier_instance_tfm(struct GpencilArrayModifierData *mmd, const int elem_idx[3], float r_mat[4][4]);
 
 void BKE_gpencil_lattice_init(struct Object *ob);
 void BKE_gpencil_lattice_clear(struct Object *ob);
 
-void BKE_gpencil_simplify_modifier(int id, struct GpencilSimplifyModifierData *mmd, struct Object *ob, struct bGPDlayer *gpl, struct bGPDstroke *gps);
-
-/* (wrapper api) simplify stroke using Ramer-Douglas-Peucker algorithm */
+/* stroke geometry utilities */
+void BKE_gpencil_stroke_normal(const struct bGPDstroke *gps, float r_normal[3]);
 void BKE_gpencil_simplify_stroke(struct bGPDlayer *gpl, struct bGPDstroke *gps, float factor);
 
 
-
 #endif /*  __BKE_GPENCIL_H__ */
diff --git a/source/blender/blenkernel/intern/gpencil_modifier.c b/source/blender/blenkernel/intern/gpencil_modifier.c
index 0af266e332a..8e530dd434b 100644
--- a/source/blender/blenkernel/intern/gpencil_modifier.c
+++ b/source/blender/blenkernel/intern/gpencil_modifier.c
@@ -35,8 +35,6 @@
 #include "BLI_blenlib.h"
 #include "BLI_utildefines.h"
 #include "BLI_math_vector.h"
-#include "BLI_math_color.h"
-#include "BLI_rand.h"
 
 #include "DNA_scene_types.h"
 #include "DNA_object_types.h"
@@ -45,18 +43,15 @@
 #include "DNA_vec_types.h"
 
 #include "BKE_global.h"
-#include "BKE_colortools.h"
-#include "BKE_deform.h"
 #include "BKE_gpencil.h"
 #include "BKE_lattice.h"
 #include "BKE_modifier.h"
 #include "BKE_object.h"
  
 #include "DEG_depsgraph.h"
- 
-// XXX: temp transitional code
-#include "../../modifiers/intern/MOD_gpencil_util.h"
 
+/* *************************************************** */
+/* Geometry Utilities */
 
 /* calculate stroke normal using some points */
 void BKE_gpencil_stroke_normal(const bGPDstroke *gps, float r_normal[3])
@@ -89,47 +84,6 @@ void BKE_gpencil_stroke_normal(const bGPDstroke *gps, float r_normal[3])
 	normalize_v3(r_normal);
 }
 
-
-
-/* init lattice deform data */
-void BKE_gpencil_lattice_init(Object *ob)
-{
-	ModifierData *md;
-	for (md = ob->modifiers.first; md; md = md->next) {
-		if (md->type == eModifierType_GpencilLattice) {
-			GpencilLatticeModifierData *mmd = (GpencilLatticeModifierData *)md;
-			Object *latob = NULL;
-
-			latob = mmd->object;
-			if ((!latob) || (latob->type != OB_LATTICE)) {
-				return;
-			}
-			if (mmd->cache_data) {
-				end_latt_deform((LatticeDeformData *)mmd->cache_data);
-			}
-
-			/* init deform data */
-			mmd->cache_data = (LatticeDeformData *)init_latt_deform(latob, ob);
-		}
-	}
-}
-
-/* clear lattice deform data */
-void BKE_gpencil_lattice_clear(Object *ob)
-{
-	ModifierData *md;
-	for (md = ob->modifiers.first; md; md = md->next) {
-		if (md->type == eModifierType_GpencilLattice) {
-			GpencilLatticeModifierData *mmd = (GpencilLatticeModifierData *)md;
-			if ((mmd) && (mmd->cache_data)) {
-				end_latt_deform((LatticeDeformData *)mmd->cache_data);
-				mmd->cache_data = NULL;
-			}
-		}
-	}
-}
-
-
 /* Get points of stroke always flat to view not affected by camera view or view position */
 static void gpencil_stroke_project_2d(const bGPDspoint *points, int totpoints, vec2f *points2d)
 {
@@ -173,6 +127,8 @@ static void gpencil_stroke_project_2d(const bGPDspoint *points, int totpoints, v
 
 }
 
+/* Stroke Simplify ------------------------------------- */
+
 /* Reduce a series of points to a simplified version, but
  * maintains the general shape of the series
  *
@@ -278,7 +234,7 @@ static void gpencil_rdp_stroke(bGPDstroke *gps, vec2f *points2d, float epsilon)
 	MEM_SAFE_FREE(marked);
 }
 
-/* (wrapper api) simplify stroke using Ramer-Douglas-Peucker algorithm */
+/* Simplify stroke using Ramer-Douglas-Peucker algorithm */
 void BKE_gpencil_simplify_stroke(bGPDlayer *UNUSED(gpl), bGPDstroke *gps, float factor)
 {
 	/* first create temp data and convert points to 2D */
@@ -291,27 +247,57 @@ void BKE_gpencil_simplify_stroke(bGPDlayer *UNUSED(gpl), bGPDstroke *gps, float
 	MEM_SAFE_FREE(points2d);
 }
 
+/* *************************************************** */
+/* Modifier Utilities */
 
-/* simplify stroke using Ramer-Douglas-Peucker algorithm */
-void BKE_gpencil_simplify_modifier(int UNUSED(id), GpencilSimplifyModifierData *mmd, Object *UNUSED(ob), bGPDlayer *gpl, bGPDstroke *gps)
-{
-	if (!is_stroke_affected_by_modifier(
-	        mmd->layername, mmd->pass_index, 4, gpl, gps,
-	        mmd->flag & GP_SIMPLIFY_INVERSE_LAYER, mmd->flag & GP_SIMPLIFY_INVERSE_PASS))
-	{
-		return;
-	}
+/* Lattice Modifier ---------------------------------- */
+/* Usually, evaluation of the lattice modifier is self-contained.
+ * However, since GP's modifiers operate on a per-stroke basis,
+ * we need to these two extra functions that called before/after
+ * each loop over all the geometry being evaluated.
+ */
 
-	/* first create temp data and convert points to 2D */
-	vec2f *points2d = MEM_mallocN(sizeof(vec2f) * gps->totpoints, "GP Stroke temp 2d points");
+/* init lattice deform data */
+void BKE_gpencil_lattice_init(Object *ob)
+{
+	ModifierData *md;
+	for (md = ob->modifiers.first; md; md = md->next) {
+		if (md->type == eModifierType_GpencilLattice) {
+			GpencilLatticeModifierData *mmd = (GpencilLatticeModifierData *)md;
+			Object *latob = NULL;
 
-	gpencil_stroke_project_2d(gps->points, gps->totpoints, points2d);
+			latob = mmd->object;
+			if ((!latob) || (latob->type != OB_LATTICE)) {
+				return;
+			}
+			if (mmd->cache_data) {
+				end_latt_deform((LatticeDeformData *)mmd->cache_data);
+			}
 
-	gpencil_rdp_stroke(gps, points2d, mmd->factor);
+			/* init deform data */
+			mmd->cache_data = (LatticeDeformData *)init_latt_deform(latob, ob);
+		}
+	}
+}
 
-	MEM_SAFE_FREE(points2d);
+/* clear lattice deform data */
+void BKE_gpencil_lattice_clear(Object *ob)
+{
+	ModifierData *md;
+	for (md = ob->modifiers.first; md; md = md->next) {
+		if (md->type == eModifierType_GpencilLattice) {
+			GpencilLatticeModifierData *mmd = (GpencilLatticeModifierData *)md;
+			if ((mmd) && (mmd->cache_data)) {
+				end_latt_deform((LatticeDeformData *)mmd->cache_data);
+				mmd->cache_data = NULL;
+			}
+		}
+	}
 }
 
+/* *************************************************** */
+/* Modifier Methods - Evaluation Loops, etc. */
+
 /* verify if exist geometry modifiers */
 bool BKE_gpencil_has_geometry_modifiers(Object *ob)
 {
@@ -332,8 +318,7 @@ void BKE_gpencil_stroke_modifiers(Object *ob, bGPDlayer *gpl, bGPDframe *UNUSED(
 	ModifierData *md;
 	bGPdata *gpd = ob->data;
 	bool is_edit = GPENCIL_ANY_EDIT_MODE(gpd);
-
-	int id = 0; // XXX: Remove
+	
 	for (md = ob->modifiers.first; md; md = md->next) {
 		if (((md->mode & eModifierMode_Realtime) && ((G.f & G_RENDER_OGL) == 0)) ||
 		    ((md->mode & eModifierMode_Render) && (G.f & G_RENDER_OGL)))
@@ -348,16 +333,7 @@ void BKE_gpencil_stroke_modifiers(Object *ob, bGPDlayer *gpl, bGPDframe *UNUSED(
 				EvaluationContext eval_ctx = {0}; /* XXX */
 				mti->deformStroke(md, &eval_ctx, ob, gpl, gps);
 			}
-
-			// XXX: The following lines need to all be converted to modifier callbacks...
-			switch (md->type) {
-					// Simplify Modifier
-				case eModifierType_GpencilSimplify:
-					BKE_gpencil_simplify_modifier(id, (GpencilSimplifyModifierData *)md, ob, gpl, gps);
-					break;
-			}
 		}
-		id++;
 	}
 }
 
@@ -387,3 +363,5 @@ void BKE_gpencil_geometry_modifiers(Object *ob, bGPDlayer *gpl, bGPDframe *gpf)
 		id++;
 	}
 }
+
+/* *************************************************** */
diff --git a/source/blender/modifiers/intern/MOD_gpencilsimplify.c b/source/blender/modifiers/intern/MOD_gpencilsimplify.c
index 6ed5bf3ce18..5ffe51f3d68 100644
--- a/source/blender/modifiers/intern/MOD_gpencilsimplify.c
+++ b/source/blender/modifiers/intern/MOD_gpencilsimplify.c
@@ -33,6 +33,7 @@
 #include "DNA_scene_types.h"
 #include "DNA_object_types.h"
 #include "DNA_gpencil_types.h"
+#include "DNA_vec_types.h"
 
 #include "BLI_utildefines.h"
  
@@ -42,6 +43,7 @@
 #include "DEG_depsgraph.h"
 
 #include "MOD_modifiertypes.h"
+#include "MOD_gpencil_util.h"
 
 static void initData(ModifierData *md)
 {
@@ -56,7 +58,23 @@ static void copyData(ModifierData *md, ModifierData *target)
 	modifier_copyData_generic(md, target);
 }
 
-static void bakeModifierGP(const bContext *C, const EvaluationContext *UNUSED(eval_ctx),
+static void deformStroke(ModifierData *md, const EvaluationContext *UNUSED(eval_ctx),
+                         Object *UNUSED(ob), bGPDlayer *gpl, bGPDstroke *gps)
+{
+	GpencilSimplifyModifierData *mmd = (GpencilSimplifyModifierData *)md;
+	
+	if (!is_stroke_affected_by_modifier(
+	        mmd->layername, mmd->pass_index, 4, gpl, gps,
+	        mmd->flag & GP_SIMPLIFY_INVERSE_LAYER, mmd->flag & GP_SIMPLIFY_INVERSE_PASS))
+	{
+		return;
+	}
+	
+	/* simplify stroke using Ramer-Douglas-Peucker algorithm */
+	BKE_gpencil_simplify_stroke(gpl, gps, mmd->factor);
+}
+
+static void bakeModifierGP(const bContext *UNUSED(C), const EvaluationContext *eval_ctx,
                            ModifierData *md, Object *ob)
 {
 	bGPdata *gpd = ob->data;
@@ -64,7 +82,7 @@ static void bakeModifierGP(const bContext *C, const EvaluationContext *UNUSED(ev
 	for (bGPDlayer *gpl = gpd->layers.first; gpl; gpl = gpl->next) {
 		for (bGPDframe *gpf = gpl->frames.first; gpf; gpf = gpf->next) {
 			for (bGPDstroke *gps = gpf->strokes.first; gps; gps = gps->next) {
-				BKE_gpencil_simplify_modifier(-1, (GpencilSimplifyModifierData *)md, ob, gpl, gps);
+				deformStroke(md, eval_ctx, ob, gpl, gps);
 			}
 		}
 	}
@@ -84,7 +102,7 @@ ModifierTypeInfo modifierType_GpencilSimplify = {
 	/* deformMatricesEM */  NULL,
 	/* applyModifier */     NULL,
 	/* applyModifierEM */   NULL,
-	/* defo

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list