[Bf-blender-cvs] [7163e8c1900] greasepencil-object: ModifierTypeInfo - Add 3 dedicated callbacks to support GP modifier evaluation and operations

Joshua Leung noreply at git.blender.org
Sat Nov 4 05:47:59 CET 2017


Commit: 7163e8c190040e9b2b6518d4457c37fd13c07bda
Author: Joshua Leung
Date:   Mon Oct 30 16:20:01 2017 +1300
Branches: greasepencil-object
https://developer.blender.org/rB7163e8c190040e9b2b6518d4457c37fd13c07bda

ModifierTypeInfo - Add 3 dedicated callbacks to support GP modifier evaluation and operations

* deformStrokes - Handles the "stroke" modifiers currently evaluated in
                  BKE_gpencil_stroke_modifiers() - e.g. Thickness, Noise

* generateStrokes - Handles the "geometry" modifiers currently evaluated
                    in BKE_gpencil_geometry_modifiers() - e.g. Array

* bakeModifierGP - Dedicated callback for hosting the code currently
                   wrongly-placed in applyModifier. This gets called
                   when pressing the "Apply" button on a GP modifier.

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

M	source/blender/blenkernel/BKE_modifier.h
M	source/blender/modifiers/intern/MOD_armature.c
M	source/blender/modifiers/intern/MOD_array.c
M	source/blender/modifiers/intern/MOD_bevel.c
M	source/blender/modifiers/intern/MOD_boolean.c
M	source/blender/modifiers/intern/MOD_build.c
M	source/blender/modifiers/intern/MOD_cast.c
M	source/blender/modifiers/intern/MOD_cloth.c
M	source/blender/modifiers/intern/MOD_collision.c
M	source/blender/modifiers/intern/MOD_correctivesmooth.c
M	source/blender/modifiers/intern/MOD_curve.c
M	source/blender/modifiers/intern/MOD_datatransfer.c
M	source/blender/modifiers/intern/MOD_decimate.c
M	source/blender/modifiers/intern/MOD_displace.c
M	source/blender/modifiers/intern/MOD_dynamicpaint.c
M	source/blender/modifiers/intern/MOD_edgesplit.c
M	source/blender/modifiers/intern/MOD_explode.c
M	source/blender/modifiers/intern/MOD_fluidsim.c
M	source/blender/modifiers/intern/MOD_gpencilarray.c
M	source/blender/modifiers/intern/MOD_gpencilblur.c
M	source/blender/modifiers/intern/MOD_gpencilcolor.c
M	source/blender/modifiers/intern/MOD_gpencildupli.c
M	source/blender/modifiers/intern/MOD_gpencillattice.c
M	source/blender/modifiers/intern/MOD_gpencilnoise.c
M	source/blender/modifiers/intern/MOD_gpencilopacity.c
M	source/blender/modifiers/intern/MOD_gpencilpixel.c
M	source/blender/modifiers/intern/MOD_gpencilsimplify.c
M	source/blender/modifiers/intern/MOD_gpencilsubdiv.c
M	source/blender/modifiers/intern/MOD_gpencilswirl.c
M	source/blender/modifiers/intern/MOD_gpencilthick.c
M	source/blender/modifiers/intern/MOD_gpenciltint.c
M	source/blender/modifiers/intern/MOD_gpencilwave.c
M	source/blender/modifiers/intern/MOD_hook.c
M	source/blender/modifiers/intern/MOD_laplaciandeform.c
M	source/blender/modifiers/intern/MOD_laplaciansmooth.c
M	source/blender/modifiers/intern/MOD_lattice.c
M	source/blender/modifiers/intern/MOD_mask.c
M	source/blender/modifiers/intern/MOD_meshcache.c
M	source/blender/modifiers/intern/MOD_meshdeform.c
M	source/blender/modifiers/intern/MOD_meshsequencecache.c
M	source/blender/modifiers/intern/MOD_mirror.c
M	source/blender/modifiers/intern/MOD_multires.c
M	source/blender/modifiers/intern/MOD_none.c
M	source/blender/modifiers/intern/MOD_normal_edit.c
M	source/blender/modifiers/intern/MOD_ocean.c
M	source/blender/modifiers/intern/MOD_particleinstance.c
M	source/blender/modifiers/intern/MOD_particlesystem.c
M	source/blender/modifiers/intern/MOD_remesh.c
M	source/blender/modifiers/intern/MOD_screw.c
M	source/blender/modifiers/intern/MOD_shapekey.c
M	source/blender/modifiers/intern/MOD_shrinkwrap.c
M	source/blender/modifiers/intern/MOD_simpledeform.c
M	source/blender/modifiers/intern/MOD_skin.c
M	source/blender/modifiers/intern/MOD_smoke.c
M	source/blender/modifiers/intern/MOD_smooth.c
M	source/blender/modifiers/intern/MOD_softbody.c
M	source/blender/modifiers/intern/MOD_solidify.c
M	source/blender/modifiers/intern/MOD_subsurf.c
M	source/blender/modifiers/intern/MOD_surface.c
M	source/blender/modifiers/intern/MOD_surfacedeform.c
M	source/blender/modifiers/intern/MOD_triangulate.c
M	source/blender/modifiers/intern/MOD_uvproject.c
M	source/blender/modifiers/intern/MOD_uvwarp.c
M	source/blender/modifiers/intern/MOD_warp.c
M	source/blender/modifiers/intern/MOD_wave.c
M	source/blender/modifiers/intern/MOD_weightvgedit.c
M	source/blender/modifiers/intern/MOD_weightvgmix.c
M	source/blender/modifiers/intern/MOD_weightvgproximity.c
M	source/blender/modifiers/intern/MOD_wireframe.c

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

diff --git a/source/blender/blenkernel/BKE_modifier.h b/source/blender/blenkernel/BKE_modifier.h
index 9500090c460..b29af94c5a3 100644
--- a/source/blender/blenkernel/BKE_modifier.h
+++ b/source/blender/blenkernel/BKE_modifier.h
@@ -37,6 +37,7 @@ struct DerivedMesh;
 struct DagForest;
 struct DagNode;
 struct EvaluationContext;
+struct bContext;
 struct Object;
 struct Scene;
 struct SceneLayer;
@@ -46,6 +47,8 @@ struct Main;
 struct ModifierData;
 struct BMEditMesh;
 struct DepsNodeHandle;
+struct bGPDlayer;
+struct bGPDframe;
 
 typedef enum {
 	/* Should not be used, only for None modifier type */
@@ -225,6 +228,46 @@ typedef struct ModifierTypeInfo {
 	                                       struct DerivedMesh *derivedData, ModifierApplyFlag flag);
 
 
+	/******************* GP modifier functions *********************/
+
+	/* Callback for GP "stroke" modifiers that operate on the
+	 * geometry of the provided strokes (e.g. Thickness, Noise, etc.)
+	 * without adding/removing any points.
+	 *
+	 * The gpl parameter contains the GP layer that the strokes come from.
+	 * While access is provided to this data, you should not directly access
+	 * the gpl->frames data from the modifier. Instead, use the gpf parameter
+	 * instead.
+	 *
+	 * The gpf parameter contains the GP frame/strokes to operate on. This is
+	 * usually a copy of the original (unmodified and saved to files) stroke data.
+	 * Modifiers should perform their operations on the strokes referenced from here
+	 * only.
+	 */
+	void (*deformStrokes)(struct ModifierData *md, const struct EvaluationContext *eval_ctx,
+	                      struct Object *ob, struct bGPDlayer *gpl, struct bGPDframe *gpf);
+
+	/* Callback for GP "geometry" modifiers that create extra geometry
+	 * in the frame (e.g. Array)
+	 *
+	 * All parameters function in the same ways as in the deformStrokes() callback.
+	 *
+	 * The modifier_index parameter indicates where the modifier is
+	 * in the modifier stack in relation to other modifiers.
+	 */
+	void (*generateStrokes)(struct ModifierData *md, const struct EvaluationContext *eval_ctx,
+	                        struct Object *ob, struct bGPDlayer *gpl, struct bGPDframe *gpf,
+	                        int modifier_index);
+
+	/* Bake-down GP modifier's effects into the GP datablock.
+	 *
+	 * This gets called when the user clicks the "Apply" button in the UI.
+	 * As such, this callback needs to go through all layers/frames in the
+	 * datablock, mutating the geometry and/or creating new datablocks/objects
+	 */
+	void (*bakeModifierGP)(struct bContext *C, const struct EvaluationContext *eval_ctx,
+                           struct ModifierData *md, struct Object *ob);
+
 	/********************* Optional functions *********************/
 
 	/* Initialize new instance data for this modifier type, this function
diff --git a/source/blender/modifiers/intern/MOD_armature.c b/source/blender/modifiers/intern/MOD_armature.c
index 60c7998853e..cb5295082b5 100644
--- a/source/blender/modifiers/intern/MOD_armature.c
+++ b/source/blender/modifiers/intern/MOD_armature.c
@@ -199,6 +199,9 @@ ModifierTypeInfo modifierType_Armature = {
 	/* deformMatricesEM */  deformMatricesEM,
 	/* applyModifier */     NULL,
 	/* applyModifierEM */   NULL,
+	/* deformStrokes */     NULL,
+	/* generateStrokes */   NULL,
+	/* bakeModifierGP */    NULL,
 	/* initData */          initData,
 	/* requiredDataMask */  requiredDataMask,
 	/* freeData */          NULL,
diff --git a/source/blender/modifiers/intern/MOD_array.c b/source/blender/modifiers/intern/MOD_array.c
index 66ff1fe0a85..a99170c5a31 100644
--- a/source/blender/modifiers/intern/MOD_array.c
+++ b/source/blender/modifiers/intern/MOD_array.c
@@ -752,6 +752,9 @@ ModifierTypeInfo modifierType_Array = {
 	/* deformMatricesEM */  NULL,
 	/* applyModifier */     applyModifier,
 	/* applyModifierEM */   NULL,
+	/* deformStrokes */     NULL,
+	/* generateStrokes */   NULL,
+	/* bakeModifierGP */    NULL,
 	/* initData */          initData,
 	/* requiredDataMask */  NULL,
 	/* freeData */          NULL,
diff --git a/source/blender/modifiers/intern/MOD_bevel.c b/source/blender/modifiers/intern/MOD_bevel.c
index 35b8a3fd9cb..9140b0278e1 100644
--- a/source/blender/modifiers/intern/MOD_bevel.c
+++ b/source/blender/modifiers/intern/MOD_bevel.c
@@ -201,6 +201,9 @@ ModifierTypeInfo modifierType_Bevel = {
 	/* deformMatricesEM */  NULL,
 	/* applyModifier */     applyModifier,
 	/* applyModifierEM */   NULL,
+	/* deformStrokes */     NULL,
+	/* generateStrokes */   NULL,
+	/* bakeModifierGP */    NULL,
 	/* initData */          initData,
 	/* requiredDataMask */  requiredDataMask,
 	/* freeData */          NULL,
diff --git a/source/blender/modifiers/intern/MOD_boolean.c b/source/blender/modifiers/intern/MOD_boolean.c
index 5811017f745..4ab2ebaf977 100644
--- a/source/blender/modifiers/intern/MOD_boolean.c
+++ b/source/blender/modifiers/intern/MOD_boolean.c
@@ -461,6 +461,9 @@ ModifierTypeInfo modifierType_Boolean = {
 	/* deformMatricesEM */  NULL,
 	/* applyModifier */     applyModifier,
 	/* applyModifierEM */   NULL,
+	/* deformStrokes */     NULL,
+	/* generateStrokes */   NULL,
+	/* bakeModifierGP */    NULL,
 	/* initData */          initData,
 	/* requiredDataMask */  requiredDataMask,
 	/* freeData */          NULL,
diff --git a/source/blender/modifiers/intern/MOD_build.c b/source/blender/modifiers/intern/MOD_build.c
index 0a0ad11fe16..6c55df947ce 100644
--- a/source/blender/modifiers/intern/MOD_build.c
+++ b/source/blender/modifiers/intern/MOD_build.c
@@ -320,6 +320,9 @@ ModifierTypeInfo modifierType_Build = {
 	/* deformMatricesEM */  NULL,
 	/* applyModifier */     applyModifier,
 	/* applyModifierEM */   NULL,
+	/* deformStrokes */     NULL,
+	/* generateStrokes */   NULL,
+	/* bakeModifierGP */    NULL,
 	/* initData */          initData,
 	/* requiredDataMask */  NULL,
 	/* freeData */          NULL,
diff --git a/source/blender/modifiers/intern/MOD_cast.c b/source/blender/modifiers/intern/MOD_cast.c
index 93a5b9607bf..90fac97528f 100644
--- a/source/blender/modifiers/intern/MOD_cast.c
+++ b/source/blender/modifiers/intern/MOD_cast.c
@@ -491,6 +491,9 @@ ModifierTypeInfo modifierType_Cast = {
 	/* deformMatricesEM */  NULL,
 	/* applyModifier */     NULL,
 	/* applyModifierEM */   NULL,
+	/* deformStrokes */     NULL,
+	/* generateStrokes */   NULL,
+	/* bakeModifierGP */    NULL,
 	/* initData */          initData,
 	/* requiredDataMask */  requiredDataMask,
 	/* freeData */          NULL,
diff --git a/source/blender/modifiers/intern/MOD_cloth.c b/source/blender/modifiers/intern/MOD_cloth.c
index b234cc63228..2e3d6c58062 100644
--- a/source/blender/modifiers/intern/MOD_cloth.c
+++ b/source/blender/modifiers/intern/MOD_cloth.c
@@ -235,6 +235,9 @@ ModifierTypeInfo modifierType_Cloth = {
 	/* deformMatricesEM */  NULL,
 	/* applyModifier */     NULL,
 	/* applyModifierEM */   NULL,
+	/* deformStrokes */     NULL,
+	/* generateStrokes */   NULL,
+	/* bakeModifierGP */    NULL,
 	/* initData */          initData,
 	/* requiredDataMask */  requiredDataMask,
 	/* freeData */          freeData,
diff --git a/source/blender/modifiers/intern/MOD_collision.c b/source/blender/modifiers/intern/MOD_collision.c
index b9a2310366a..27a4d6fb363 100644
--- a/source/blender/modifiers/intern/MOD_collision.c
+++ b/source/blender/modifiers/intern/MOD_collision.c
@@ -260,6 +260,9 @@ ModifierTypeInfo modifierType_Collision = {
 	/* deformMatricesEM */  NULL,
 	/* applyModifier */     NULL,
 	/* applyModifierEM */   NULL,
+	/* deformStrokes */     NULL,
+	/* generateStrokes */   NULL,
+	/* bakeModifierGP */    NULL,
 	/* initData */          initData,
 	/* requiredDataMask */  NULL,
 	/* freeData */          freeData,
diff --git a/source/blender/modifiers/intern/MOD_correctivesmooth.c b/source/blender/modifiers/intern/MOD_correctivesmooth.c
index 716b918d0f0..4f0af89bc0e 100644
--- a/source/blender/modifiers/intern/MOD_correctivesmooth.c
+++ b/source/blender/modifiers/intern/MOD_correctivesmooth.c
@@ -755,6 +755,9 @@ ModifierTypeInfo modifierType_CorrectiveSmooth = {
 	/* deformMatricesEM */  NULL,
 	/* applyModifier */     NULL,
 	/* applyModifierEM */   NULL,
+	/* deformStrokes */     NULL,
+	/* generateStrokes */   NULL,
+	/* bakeModifierGP */    NULL,
 	/* initData */          initData,
 	/* requiredDataMask */  requiredDataMask,
 	/* freeData */          freeData,
diff --git a/source/blender/modifiers/intern/MOD_curve.c b/source/blender/modifiers/intern/MOD_curve.c
index 198f08334f0..f009a5ffbb0 100644
--- a/source/blender/modifiers/intern/MOD_curve.c
+++ b/source/blender/modifiers/intern/MOD_curve.c
@@ -159,6 +159,9 @@ ModifierTypeInfo modifierType_Curve = {
 	/* deformMatricesEM */  NULL,
 	/* applyModifier */     NULL,
 	/* applyModifierEM */   NULL,
+	/* deformStrokes */     NULL,
+	/* generateStrokes */   NULL,
+	/* bakeModifierGP */    NULL,
 	/* initData */          initData,
 	/* requiredDataMask */  requiredDataMask,
 	/* freeData */          NULL,
diff --git a/source/blender/modifiers/intern/MOD_datatransfer.c b/source/blender/modifiers/intern/MOD_datatransfer.c
index e7069937868..a2e65b885d0 100644
--- a/source/blender/modifiers/intern/MOD_datatransfer.c
+++ b/source/blender/modifiers/intern/MOD_datatransfer.c
@@ -232,6 +232,9 @@ ModifierTypeInfo modifierType_DataTransfer = {
 	/* deformMatricesEM */  NULL,
 	/* applyModifier */     applyModifier,
 	/* applyModifierEM */   NULL,
+	/* deformStrokes */     NULL,
+	/* generateStrokes */   NULL,
+	/* bakeModifierGP */    NULL,
 	/* initData */          initData,
 	/* requiredDataMask */  requiredDataMask,
 	/* freeData */          NULL,
diff --git a/source/blender/modifiers/intern/MOD_decimate.c b/source/blender/modifiers/intern/MOD_decimate.c
index 078a3085fc7..5793352d9de 100644
--- a/source/blender/modifiers/intern/MOD_decimate.c
+++ b/source/blender/modifiers/intern/MOD_decimate.c
@@ -223,6 +223,9 @@ ModifierTypeInfo modifierType_Decimate = {
 	/* deformMatricesEM */  NULL,
 	/* applyModifier */     applyModifier,
 	/* applyModifierEM */   NULL,
+	/* deformStrokes */     NULL,
+	/* generateStrokes */   NULL,
+	/* bakeModifierGP */    NULL,
 	/* initData */          initData,
 	/* requiredDataMask *

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list