Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAntonioya <blendergit@gmail.com>2018-10-22 19:25:13 +0300
committerAntonioya <blendergit@gmail.com>2018-10-22 19:30:26 +0300
commite010d5e3b1b2110afd83c37d321b358692a478a8 (patch)
tree0b654df668a5b81693773764d2ac58263af1d9df /source/blender/gpencil_modifiers/intern
parent4bf4da12de92989d5708be8b6f14c3536e872836 (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/intern')
-rw-r--r--source/blender/gpencil_modifiers/intern/MOD_gpencil_util.c1
-rw-r--r--source/blender/gpencil_modifiers/intern/MOD_gpencilarmature.c2
-rw-r--r--source/blender/gpencil_modifiers/intern/MOD_gpencilbuild.c24
-rw-r--r--source/blender/gpencil_modifiers/intern/MOD_gpencilcolor.c3
-rw-r--r--source/blender/gpencil_modifiers/intern/MOD_gpencilhook.c3
-rw-r--r--source/blender/gpencil_modifiers/intern/MOD_gpencilinstance.c1
-rw-r--r--source/blender/gpencil_modifiers/intern/MOD_gpencillattice.c3
-rw-r--r--source/blender/gpencil_modifiers/intern/MOD_gpencilmirror.c3
-rw-r--r--source/blender/gpencil_modifiers/intern/MOD_gpencilnoise.c3
-rw-r--r--source/blender/gpencil_modifiers/intern/MOD_gpenciloffset.c3
-rw-r--r--source/blender/gpencil_modifiers/intern/MOD_gpencilopacity.c3
-rw-r--r--source/blender/gpencil_modifiers/intern/MOD_gpencilsimplify.c3
-rw-r--r--source/blender/gpencil_modifiers/intern/MOD_gpencilsmooth.c3
-rw-r--r--source/blender/gpencil_modifiers/intern/MOD_gpencilsubdiv.c3
-rw-r--r--source/blender/gpencil_modifiers/intern/MOD_gpencilthick.c7
-rw-r--r--source/blender/gpencil_modifiers/intern/MOD_gpenciltint.c3
-rw-r--r--source/blender/gpencil_modifiers/intern/mod_gpenciltime.c127
17 files changed, 158 insertions, 37 deletions
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,
+};