diff options
author | Antonioya <blendergit@gmail.com> | 2018-10-22 19:25:13 +0300 |
---|---|---|
committer | Antonioya <blendergit@gmail.com> | 2018-10-22 19:30:26 +0300 |
commit | e010d5e3b1b2110afd83c37d321b358692a478a8 (patch) | |
tree | 0b654df668a5b81693773764d2ac58263af1d9df /source/blender/gpencil_modifiers | |
parent | 4bf4da12de92989d5708be8b6f14c3536e872836 (diff) |
GP: New Time modifier
This modifier allows to offset the keyframe animated to get more variations in the animation when reuse the same datablock.
Diffstat (limited to 'source/blender/gpencil_modifiers')
19 files changed, 160 insertions, 37 deletions
diff --git a/source/blender/gpencil_modifiers/CMakeLists.txt b/source/blender/gpencil_modifiers/CMakeLists.txt index 44689a1d091..00a387c58e8 100644 --- a/source/blender/gpencil_modifiers/CMakeLists.txt +++ b/source/blender/gpencil_modifiers/CMakeLists.txt @@ -58,6 +58,7 @@ set(SRC intern/MOD_gpencilsmooth.c intern/MOD_gpencilhook.c intern/MOD_gpenciloffset.c + intern/MOD_gpenciltime.c MOD_gpencil_modifiertypes.h ) diff --git a/source/blender/gpencil_modifiers/MOD_gpencil_modifiertypes.h b/source/blender/gpencil_modifiers/MOD_gpencil_modifiertypes.h index 968f7e73544..d820bbcc7c8 100644 --- a/source/blender/gpencil_modifiers/MOD_gpencil_modifiertypes.h +++ b/source/blender/gpencil_modifiers/MOD_gpencil_modifiertypes.h @@ -45,6 +45,7 @@ extern GpencilModifierTypeInfo modifierType_Gpencil_Smooth; extern GpencilModifierTypeInfo modifierType_Gpencil_Hook; extern GpencilModifierTypeInfo modifierType_Gpencil_Offset; extern GpencilModifierTypeInfo modifierType_Gpencil_Armature; +extern GpencilModifierTypeInfo modifierType_Gpencil_Time; /* MOD_gpencil_util.c */ void gpencil_modifier_type_init(GpencilModifierTypeInfo *types[]); diff --git a/source/blender/gpencil_modifiers/intern/MOD_gpencil_util.c b/source/blender/gpencil_modifiers/intern/MOD_gpencil_util.c index 8f5f84c2ee4..b2eeaa1c4e9 100644 --- a/source/blender/gpencil_modifiers/intern/MOD_gpencil_util.c +++ b/source/blender/gpencil_modifiers/intern/MOD_gpencil_util.c @@ -78,6 +78,7 @@ void gpencil_modifier_type_init(GpencilModifierTypeInfo *types[]) INIT_GP_TYPE(Hook); INIT_GP_TYPE(Offset); INIT_GP_TYPE(Armature); + INIT_GP_TYPE(Time); #undef INIT_GP_TYPE } diff --git a/source/blender/gpencil_modifiers/intern/MOD_gpencilarmature.c b/source/blender/gpencil_modifiers/intern/MOD_gpencilarmature.c index 5bab95cf6f6..69a48a2c93b 100644 --- a/source/blender/gpencil_modifiers/intern/MOD_gpencilarmature.c +++ b/source/blender/gpencil_modifiers/intern/MOD_gpencilarmature.c @@ -194,7 +194,7 @@ GpencilModifierTypeInfo modifierType_Gpencil_Armature = { /* deformStroke */ deformStroke, /* generateStrokes */ NULL, /* bakeModifier */ bakeModifier, - + /* remapTime */ NULL, /* initData */ initData, /* freeData */ NULL, /* isDisabled */ isDisabled, diff --git a/source/blender/gpencil_modifiers/intern/MOD_gpencilbuild.c b/source/blender/gpencil_modifiers/intern/MOD_gpencilbuild.c index 6435ca1ce70..0b02443f7eb 100644 --- a/source/blender/gpencil_modifiers/intern/MOD_gpencilbuild.c +++ b/source/blender/gpencil_modifiers/intern/MOD_gpencilbuild.c @@ -515,27 +515,6 @@ static void generateStrokes( } } -/* ******************************************** */ - -/* FIXME: Baking the Build Modifier is currently unsupported. - * Adding support for this is more complicated than for other - * modifiers, as to implement this, we'd have to add more frames, - * which would in turn break how the modifier functions. - */ -#if 0 -static void bakeModifier( - Main *bmain, const Depsgraph *UNUSED(depsgraph), - GpencilModifierData *md, Object *ob) -{ - bGPdata *gpd = ob->data; - - for (bGPDlayer *gpl = gpd->layers.first; gpl; gpl = gpl->next) { - for (bGPDframe *gpf = gpl->frames.first; gpf; gpf = gpf->next) { - - } - } -} -#endif /* ******************************************** */ @@ -544,13 +523,14 @@ GpencilModifierTypeInfo modifierType_Gpencil_Build = { /* structName */ "BuildGpencilModifierData", /* structSize */ sizeof(BuildGpencilModifierData), /* type */ eGpencilModifierTypeType_Gpencil, - /* flags */ 0, + /* flags */ eGpencilModifierTypeFlag_NoApply, /* copyData */ copyData, /* deformStroke */ NULL, /* generateStrokes */ generateStrokes, /* bakeModifier */ NULL, + /* remapTime */ NULL, /* initData */ initData, /* freeData */ NULL, diff --git a/source/blender/gpencil_modifiers/intern/MOD_gpencilcolor.c b/source/blender/gpencil_modifiers/intern/MOD_gpencilcolor.c index 0bbd26da670..ac1e51c62ea 100644 --- a/source/blender/gpencil_modifiers/intern/MOD_gpencilcolor.c +++ b/source/blender/gpencil_modifiers/intern/MOD_gpencilcolor.c @@ -151,7 +151,8 @@ GpencilModifierTypeInfo modifierType_Gpencil_Color = { /* deformStroke */ deformStroke, /* generateStrokes */ NULL, - /* bakeModifier */ bakeModifier, + /* bakeModifier */ bakeModifier, + /* remapTime */ NULL, /* initData */ initData, /* freeData */ NULL, diff --git a/source/blender/gpencil_modifiers/intern/MOD_gpencilhook.c b/source/blender/gpencil_modifiers/intern/MOD_gpencilhook.c index 8f7911834c9..38a149fce71 100644 --- a/source/blender/gpencil_modifiers/intern/MOD_gpencilhook.c +++ b/source/blender/gpencil_modifiers/intern/MOD_gpencilhook.c @@ -340,7 +340,8 @@ GpencilModifierTypeInfo modifierType_Gpencil_Hook = { /* deformStroke */ deformStroke, /* generateStrokes */ NULL, - /* bakeModifier */ bakeModifier, + /* bakeModifier */ bakeModifier, + /* remapTime */ NULL, /* initData */ initData, /* freeData */ freeData, diff --git a/source/blender/gpencil_modifiers/intern/MOD_gpencilinstance.c b/source/blender/gpencil_modifiers/intern/MOD_gpencilinstance.c index 8c125ebb1cd..05912e594f5 100644 --- a/source/blender/gpencil_modifiers/intern/MOD_gpencilinstance.c +++ b/source/blender/gpencil_modifiers/intern/MOD_gpencilinstance.c @@ -243,6 +243,7 @@ GpencilModifierTypeInfo modifierType_Gpencil_Instance = { /* deformStroke */ NULL, /* generateStrokes */ generateStrokes, /* bakeModifier */ bakeModifier, + /* remapTime */ NULL, /* initData */ initData, /* freeData */ NULL, diff --git a/source/blender/gpencil_modifiers/intern/MOD_gpencillattice.c b/source/blender/gpencil_modifiers/intern/MOD_gpencillattice.c index 98bb579c662..0d7bfcfdaae 100644 --- a/source/blender/gpencil_modifiers/intern/MOD_gpencillattice.c +++ b/source/blender/gpencil_modifiers/intern/MOD_gpencillattice.c @@ -198,7 +198,8 @@ GpencilModifierTypeInfo modifierType_Gpencil_Lattice = { /* deformStroke */ deformStroke, /* generateStrokes */ NULL, - /* bakeModifier */ bakeModifier, + /* bakeModifier */ bakeModifier, + /* remapTime */ NULL, /* initData */ initData, /* freeData */ freeData, diff --git a/source/blender/gpencil_modifiers/intern/MOD_gpencilmirror.c b/source/blender/gpencil_modifiers/intern/MOD_gpencilmirror.c index 4c359be670f..aec9715a995 100644 --- a/source/blender/gpencil_modifiers/intern/MOD_gpencilmirror.c +++ b/source/blender/gpencil_modifiers/intern/MOD_gpencilmirror.c @@ -197,7 +197,8 @@ GpencilModifierTypeInfo modifierType_Gpencil_Mirror = { /* deformStroke */ NULL, /* generateStrokes */ generateStrokes, - /* bakeModifier */ bakeModifier, + /* bakeModifier */ bakeModifier, + /* remapTime */ NULL, /* initData */ initData, /* freeData */ NULL, diff --git a/source/blender/gpencil_modifiers/intern/MOD_gpencilnoise.c b/source/blender/gpencil_modifiers/intern/MOD_gpencilnoise.c index 7ddd67337d3..aacf66d2538 100644 --- a/source/blender/gpencil_modifiers/intern/MOD_gpencilnoise.c +++ b/source/blender/gpencil_modifiers/intern/MOD_gpencilnoise.c @@ -272,7 +272,8 @@ GpencilModifierTypeInfo modifierType_Gpencil_Noise = { /* deformStroke */ deformStroke, /* generateStrokes */ NULL, - /* bakeModifier */ bakeModifier, + /* bakeModifier */ bakeModifier, + /* remapTime */ NULL, /* initData */ initData, /* freeData */ freeData, diff --git a/source/blender/gpencil_modifiers/intern/MOD_gpenciloffset.c b/source/blender/gpencil_modifiers/intern/MOD_gpenciloffset.c index cc2e00ecc22..373fccde633 100644 --- a/source/blender/gpencil_modifiers/intern/MOD_gpenciloffset.c +++ b/source/blender/gpencil_modifiers/intern/MOD_gpenciloffset.c @@ -130,7 +130,8 @@ GpencilModifierTypeInfo modifierType_Gpencil_Offset = { /* deformStroke */ deformStroke, /* generateStrokes */ NULL, - /* bakeModifier */ bakeModifier, + /* bakeModifier */ bakeModifier, + /* remapTime */ NULL, /* initData */ initData, /* freeData */ NULL, diff --git a/source/blender/gpencil_modifiers/intern/MOD_gpencilopacity.c b/source/blender/gpencil_modifiers/intern/MOD_gpencilopacity.c index 6314c51027e..2ccca9f3ab9 100644 --- a/source/blender/gpencil_modifiers/intern/MOD_gpencilopacity.c +++ b/source/blender/gpencil_modifiers/intern/MOD_gpencilopacity.c @@ -171,7 +171,8 @@ GpencilModifierTypeInfo modifierType_Gpencil_Opacity = { /* deformStroke */ deformStroke, /* generateStrokes */ NULL, - /* bakeModifier */ bakeModifier, + /* bakeModifier */ bakeModifier, + /* remapTime */ NULL, /* initData */ initData, /* freeData */ NULL, diff --git a/source/blender/gpencil_modifiers/intern/MOD_gpencilsimplify.c b/source/blender/gpencil_modifiers/intern/MOD_gpencilsimplify.c index a8d10c973ce..a892f230d39 100644 --- a/source/blender/gpencil_modifiers/intern/MOD_gpencilsimplify.c +++ b/source/blender/gpencil_modifiers/intern/MOD_gpencilsimplify.c @@ -110,7 +110,8 @@ GpencilModifierTypeInfo modifierType_Gpencil_Simplify = { /* deformStroke */ deformStroke, /* generateStrokes */ NULL, - /* bakeModifier */ bakeModifier, + /* bakeModifier */ bakeModifier, + /* remapTime */ NULL, /* initData */ initData, /* freeData */ NULL, diff --git a/source/blender/gpencil_modifiers/intern/MOD_gpencilsmooth.c b/source/blender/gpencil_modifiers/intern/MOD_gpencilsmooth.c index cd46ed0f2d6..01fb4c1f83b 100644 --- a/source/blender/gpencil_modifiers/intern/MOD_gpencilsmooth.c +++ b/source/blender/gpencil_modifiers/intern/MOD_gpencilsmooth.c @@ -137,7 +137,8 @@ GpencilModifierTypeInfo modifierType_Gpencil_Smooth = { /* deformStroke */ deformStroke, /* generateStrokes */ NULL, - /* bakeModifier */ bakeModifier, + /* bakeModifier */ bakeModifier, + /* remapTime */ NULL, /* initData */ initData, /* freeData */ NULL, diff --git a/source/blender/gpencil_modifiers/intern/MOD_gpencilsubdiv.c b/source/blender/gpencil_modifiers/intern/MOD_gpencilsubdiv.c index 2e91c51d3da..7cf19de2020 100644 --- a/source/blender/gpencil_modifiers/intern/MOD_gpencilsubdiv.c +++ b/source/blender/gpencil_modifiers/intern/MOD_gpencilsubdiv.c @@ -107,7 +107,8 @@ GpencilModifierTypeInfo modifierType_Gpencil_Subdiv = { /* deformStroke */ deformStroke, /* generateStrokes */ NULL, - /* bakeModifier */ bakeModifier, + /* bakeModifier */ bakeModifier, + /* remapTime */ NULL, /* initData */ initData, /* freeData */ NULL, diff --git a/source/blender/gpencil_modifiers/intern/MOD_gpencilthick.c b/source/blender/gpencil_modifiers/intern/MOD_gpencilthick.c index cffa4b0ad83..10b96cd2181 100644 --- a/source/blender/gpencil_modifiers/intern/MOD_gpencilthick.c +++ b/source/blender/gpencil_modifiers/intern/MOD_gpencilthick.c @@ -156,9 +156,10 @@ GpencilModifierTypeInfo modifierType_Gpencil_Thick = { /* copyData */ copyData, - /* deformStroke */ deformStroke, - /* generateStrokes */ NULL, - /* bakeModifier */ bakeModifier, + /* deformStroke */ deformStroke, + /* generateStrokes */ NULL, + /* bakeModifier */ bakeModifier, + /* remapTime */ NULL, /* initData */ initData, /* freeData */ freeData, diff --git a/source/blender/gpencil_modifiers/intern/MOD_gpenciltint.c b/source/blender/gpencil_modifiers/intern/MOD_gpenciltint.c index 98cf3ae16e7..cdbc1f465a2 100644 --- a/source/blender/gpencil_modifiers/intern/MOD_gpenciltint.c +++ b/source/blender/gpencil_modifiers/intern/MOD_gpenciltint.c @@ -159,7 +159,8 @@ GpencilModifierTypeInfo modifierType_Gpencil_Tint = { /* deformStroke */ deformStroke, /* generateStrokes */ NULL, - /* bakeModifier */ bakeModifier, + /* bakeModifier */ bakeModifier, + /* remapTime */ NULL, /* initData */ initData, /* freeData */ NULL, diff --git a/source/blender/gpencil_modifiers/intern/mod_gpenciltime.c b/source/blender/gpencil_modifiers/intern/mod_gpenciltime.c new file mode 100644 index 00000000000..32d3d69050c --- /dev/null +++ b/source/blender/gpencil_modifiers/intern/mod_gpenciltime.c @@ -0,0 +1,127 @@ +/* + * ***** BEGIN GPL LICENSE BLOCK ***** + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * The Original Code is Copyright (C) 2018, Blender Foundation + * This is a new part of Blender + * + * Contributor(s): Antonio Vazquez + * + * ***** END GPL LICENSE BLOCK ***** + * + */ + +/** \file blender/gpencil_modifiers/intern/MOD_gpenciltime.c + * \ingroup modifiers + */ + +#include <stdio.h> +#include <string.h> + +#include "BLI_utildefines.h" + +#include "DNA_meshdata_types.h" +#include "DNA_scene_types.h" +#include "DNA_object_types.h" +#include "DNA_gpencil_types.h" +#include "DNA_gpencil_modifier_types.h" + +#include "BKE_colortools.h" +#include "BKE_context.h" +#include "BKE_deform.h" +#include "BKE_gpencil.h" +#include "BKE_gpencil_modifier.h" + +#include "DEG_depsgraph.h" + +#include "MOD_gpencil_util.h" +#include "MOD_gpencil_modifiertypes.h" + +static void initData(GpencilModifierData *md) +{ + TimeGpencilModifierData *gpmd = (TimeGpencilModifierData *)md; + gpmd->layername[0] = '\0'; + gpmd->offset = 1; + gpmd->flag |= GP_TIME_KEEP_LOOP; +} + +static void copyData(const GpencilModifierData *md, GpencilModifierData *target) +{ + BKE_gpencil_modifier_copyData_generic(md, target); +} + +static int remapTime(struct GpencilModifierData *md, struct Depsgraph *UNUSED(depsgraph), + struct Scene *scene, struct Object *ob, struct bGPDlayer *gpl, int cfra) +{ + TimeGpencilModifierData *mmd = (TimeGpencilModifierData *)md; + const int sfra = scene->r.sfra; + const int efra = scene->r.efra; + const int nfra = cfra + mmd->offset; + + const bool invgpl = mmd->flag & GP_SIMPLIFY_INVERT_LAYER; + + /* omit if filter by layer */ + if (mmd->layername[0] != '\0') { + if (invgpl == false) { + if (!STREQ(mmd->layername, gpl->info)) { + return cfra; + } + } + else { + if (STREQ(mmd->layername, gpl->info)) { + return cfra; + } + } + } + + if (mmd->flag & GP_TIME_KEEP_LOOP) { + /* if the sum of the cfra is out scene frame range, recalc */ + if (cfra + mmd->offset < sfra) { + const int delta = abs(sfra - nfra); + return efra - delta + 1; + } + else if (cfra + mmd->offset > efra) { + return nfra - efra + sfra - 1; + } + } + + return cfra + mmd->offset; +} + +GpencilModifierTypeInfo modifierType_Gpencil_Time = { + /* name */ "Time", + /* structName */ "TimeGpencilModifierData", + /* structSize */ sizeof(TimeGpencilModifierData), + /* type */ eGpencilModifierTypeType_Gpencil, + /* flags */ eGpencilModifierTypeFlag_Single | + eGpencilModifierTypeFlag_NoApply, + + /* copyData */ copyData, + + /* deformStroke */ NULL, + /* generateStrokes */ NULL, + /* bakeModifier */ NULL, + /* remapTime */ remapTime, + + /* initData */ initData, + /* freeData */ NULL, + /* isDisabled */ NULL, + /* updateDepsgraph */ NULL, + /* dependsOnTime */ NULL, + /* foreachObjectLink */ NULL, + /* foreachIDLink */ NULL, + /* foreachTexLink */ NULL, +}; |