Commit: 583b871ec741a2a500a503303374a5608f769bab
Author: Joshua Leung
Date:   Sat Nov 4 04:40:31 2017 +1300
Branches: greasepencil-object
https://developer.blender.org/rB583b871ec741a2a500a503303374a5608f769bab

Cleanup: Ported Lattice Modifier code over to new callbacks

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

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

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

diff --git a/source/blender/blenkernel/BKE_gpencil.h 
b/source/blender/blenkernel/BKE_gpencil.h
index 164a42658f3..4cdf86ee862 100644
--- a/source/blender/blenkernel/BKE_gpencil.h
+++ b/source/blender/blenkernel/BKE_gpencil.h
@@ -195,13 +195,14 @@ 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 */
 void BKE_gpencil_simplify_stroke(struct bGPDlayer *gpl, struct bGPDstroke 
*gps, float factor);
 
-void BKE_gpencil_lattice_init(struct Object *ob);
-void BKE_gpencil_lattice_clear(struct Object *ob);
-void BKE_gpencil_lattice_modifier(int id, struct GpencilLatticeModifierData 
*mmd, struct Object *ob, struct bGPDlayer *gpl, struct bGPDstroke *gps);
+
 
 #endif /*  __BKE_GPENCIL_H__ */
diff --git a/source/blender/blenkernel/intern/gpencil_modifier.c 
b/source/blender/blenkernel/intern/gpencil_modifier.c
index fbf86d6d571..c5f76be4f07 100644
--- a/source/blender/blenkernel/intern/gpencil_modifier.c
+++ b/source/blender/blenkernel/intern/gpencil_modifier.c
@@ -133,37 +133,6 @@ void BKE_gpencil_lattice_clear(Object *ob)
        }
 }
 
-/* apply lattice to stroke */
-void BKE_gpencil_lattice_modifier(
-        int UNUSED(id), GpencilLatticeModifierData *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_LATTICE_INVERSE_LAYER, mmd->flag & 
GP_LATTICE_INVERSE_PASS))
-       {
-               return;
-       }
-
-       if (mmd->cache_data == NULL) {
-               return;
-       }
-
-       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_LATTICE_INVERSE_VGROUP) == 0), vindex);
-               if (weight < 0) {
-                       continue;
-               }
-
-               calc_latt_deform((LatticeDeformData *)mmd->cache_data, &pt->x, 
mmd->strength * weight);
-       }
-}
-
 
 /* 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, 
tbGPDspoint *points2d)
@@ -391,10 +360,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;
-                                       // Lattice
-                               case eModifierType_GpencilLattice:
-                                       BKE_gpencil_lattice_modifier(id, 
(GpencilLatticeModifierData *)md, ob, gpl, gps);
-                                       break;
                        }
                }
                id++;
diff --git a/source/blender/modifiers/intern/MOD_gpencillattice.c 
b/source/blender/modifiers/intern/MOD_gpencillattice.c
index f1a683def73..54d81d6c1f4 100644
--- a/source/blender/modifiers/intern/MOD_gpencillattice.c
+++ b/source/blender/modifiers/intern/MOD_gpencillattice.c
@@ -37,6 +37,7 @@
 #include "BLI_utildefines.h"
 
 #include "BKE_context.h"
+#include "BKE_deform.h"
 #include "BKE_gpencil.h"
 #include "BKE_lattice.h"
 #include "BKE_library_query.h"
@@ -46,6 +47,7 @@
 #include "MEM_guardedalloc.h"
 
 #include "MOD_modifiertypes.h"
+#include "MOD_gpencil_util.h"
 
 #include "DEG_depsgraph.h"
 #include "DEG_depsgraph_build.h"
@@ -66,44 +68,79 @@ static void copyData(ModifierData *md, ModifierData *target)
        modifier_copyData_generic(md, target);
 }
 
+static void deformStroke(ModifierData *md, const EvaluationContext 
*UNUSED(eval_ctx),
+                         Object *ob, bGPDlayer *gpl, bGPDstroke *gps)
+{
+       GpencilLatticeModifierData *mmd = (GpencilLatticeModifierData *)md;
+       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_LATTICE_INVERSE_LAYER, mmd->flag & 
GP_LATTICE_INVERSE_PASS))
+       {
+               return;
+       }
+
+       if (mmd->cache_data == NULL) {
+               return;
+       }
+
+       for (int i = 0; i < gps->totpoints; i++) {
+               bGPDspoint *pt = &gps->points[i];
+               /* verify vertex group */
+               weight = is_point_affected_by_modifier(pt, (int)(!(mmd->flag & 
GP_LATTICE_INVERSE_VGROUP) == 0), vindex);
+               if (weight < 0) {
+                       continue;
+               }
+
+               calc_latt_deform((LatticeDeformData *)mmd->cache_data, &pt->x, 
mmd->strength * weight);
+       }
+}
+
 static void bakeModifierGP(const bContext *C, const EvaluationContext 
*eval_ctx,
                            ModifierData *md, Object *ob)
 {
        GpencilLatticeModifierData *mmd = (GpencilLatticeModifierData *)md;
-       LatticeDeformData *ldata = NULL;
-       Scene *scene = md->scene;
        Main *bmain = CTX_data_main(C);
+       Scene *scene = md->scene;
+       LatticeDeformData *ldata = NULL;
        bGPdata *gpd = ob->data;
-       Object *latob = mmd->object;
        int oldframe = CFRA;
 
-       if ((!latob) || (latob->type != OB_LATTICE)) {
+       if (mmd->object == NULL)
                return;
-       }
 
        struct EvaluationContext eval_ctx_copy = *eval_ctx;
 
        for (bGPDlayer *gpl = gpd->layers.first; gpl; gpl = gpl->next) {
                for (bGPDframe *gpf = gpl->frames.first; gpf; gpf = gpf->next) {
+                       /* apply lattice effects on this frame
+                        * NOTE: this assumes that we don't want lattice 
animation on non-keyframed frames
+                        */
+                       CFRA = gpf->framenum;
+                       BKE_scene_update_for_newframe(&eval_ctx_copy, bmain, 
scene);
+                       
+                       /* recalculate lattice data */
+                       BKE_gpencil_lattice_init(ob);
+                       
+                       /* compute lattice effects on this frame */
                        for (bGPDstroke *gps = gpf->strokes.first; gps; gps = 
gps->next) {
-                               CFRA = gpf->framenum;
-                               BKE_scene_update_for_newframe(&eval_ctx_copy, 
bmain, scene);
-                               /* recalculate lattice data */
-                               BKE_gpencil_lattice_init(ob);
-
-                               BKE_gpencil_lattice_modifier(-1, 
(GpencilLatticeModifierData *)md, ob, gpl, gps);
+                               deformStroke(md, &eval_ctx_copy, ob, gpl, gps);
                        }
                }
        }
-
+       
+       /* free lingering data */
        ldata = (LatticeDeformData *)mmd->cache_data;
        if (ldata) {
                end_latt_deform(ldata);
                mmd->cache_data = NULL;
        }
 
-       // XXX: needs an extra update?
+       /* return frame state and DB to original state */
        CFRA = oldframe;
+       BKE_scene_update_for_newframe(&eval_ctx_copy, bmain, scene); /* XXX: 
needed? */
 }
 
 static void freeData(ModifierData *md)
@@ -160,7 +197,7 @@ ModifierTypeInfo modifierType_GpencilLattice = {
        /* deformMatricesEM */  NULL,
        /* applyModifier */     NULL,
        /* applyModifierEM */   NULL,
-       /* deformStroke */      NULL,
+       /* deformStroke */      deformStroke,
        /* generateStrokes */   NULL,
        /* bakeModifierGP */    bakeModifierGP,
        /* initData */          initData,

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to