[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