[Bf-blender-cvs] [583b871ec74] greasepencil-object: Cleanup: Ported Lattice Modifier code over to new callbacks
Joshua Leung
noreply at git.blender.org
Sat Nov 4 05:48:47 CET 2017
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,
More information about the Bf-blender-cvs
mailing list