[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