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:
Diffstat (limited to 'source/blender/gpencil_modifiers/intern/MOD_gpenciltime.c')
-rw-r--r--source/blender/gpencil_modifiers/intern/MOD_gpenciltime.c255
1 files changed, 129 insertions, 126 deletions
diff --git a/source/blender/gpencil_modifiers/intern/MOD_gpenciltime.c b/source/blender/gpencil_modifiers/intern/MOD_gpenciltime.c
index 1863ec067e1..296e01d6d31 100644
--- a/source/blender/gpencil_modifiers/intern/MOD_gpenciltime.c
+++ b/source/blender/gpencil_modifiers/intern/MOD_gpenciltime.c
@@ -44,140 +44,143 @@
static void initData(GpencilModifierData *md)
{
- TimeGpencilModifierData *gpmd = (TimeGpencilModifierData *)md;
- gpmd->layername[0] = '\0';
- gpmd->offset = 1;
- gpmd->frame_scale = 1.0f;
- gpmd->flag |= GP_TIME_KEEP_LOOP;
- gpmd->sfra = 1;
- gpmd->efra = 250;
+ TimeGpencilModifierData *gpmd = (TimeGpencilModifierData *)md;
+ gpmd->layername[0] = '\0';
+ gpmd->offset = 1;
+ gpmd->frame_scale = 1.0f;
+ gpmd->flag |= GP_TIME_KEEP_LOOP;
+ gpmd->sfra = 1;
+ gpmd->efra = 250;
}
static void copyData(const GpencilModifierData *md, GpencilModifierData *target)
{
- BKE_gpencil_modifier_copyData_generic(md, target);
+ BKE_gpencil_modifier_copyData_generic(md, target);
}
-static int remapTime(
- struct GpencilModifierData *md, struct Depsgraph *UNUSED(depsgraph),
- struct Scene *scene, struct Object *UNUSED(ob), struct bGPDlayer *gpl, int cfra)
+static int remapTime(struct GpencilModifierData *md,
+ struct Depsgraph *UNUSED(depsgraph),
+ struct Scene *scene,
+ struct Object *UNUSED(ob),
+ struct bGPDlayer *gpl,
+ int cfra)
{
- TimeGpencilModifierData *mmd = (TimeGpencilModifierData *)md;
- const bool custom = mmd->flag & GP_TIME_CUSTOM_RANGE;
- const bool invgpl = mmd->flag & GP_TIME_INVERT_LAYER;
- const bool invpass = mmd->flag & GP_TIME_INVERT_LAYERPASS;
- int sfra = custom ? mmd->sfra : scene->r.sfra;
- int efra = custom ? mmd->efra : scene->r.efra;
- CLAMP_MIN(sfra, 1);
- CLAMP_MIN(efra, 1);
- const int time_range = efra - sfra + 1;
- int offset = mmd->offset;
- int segments = 0;
-
- /* 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;
- }
- }
- }
- /* verify pass */
- if (mmd->layer_pass > 0) {
- if (invpass == false) {
- if (gpl->pass_index != mmd->layer_pass) {
- return cfra;
- }
- }
- else {
- if (gpl->pass_index == mmd->layer_pass) {
- return cfra;
- }
- }
- }
-
- /* if fix mode, return predefined frame number */
- if (mmd->mode == GP_TIME_MODE_FIX) {
- return offset;
- }
-
- /* invert current frame number */
- if (mmd->mode == GP_TIME_MODE_REVERSE) {
- cfra = efra - cfra + sfra;
- }
-
- /* apply frame scale */
- cfra *= mmd->frame_scale;
-
- /* verify offset never is greater than frame range */
- if (abs(offset) > time_range) {
- offset = offset - ((offset / time_range) * time_range);
- }
-
- /* verify not outside range if loop is disabled */
- if ((mmd->flag & GP_TIME_KEEP_LOOP) == 0) {
- if (cfra + offset < sfra) {
- return sfra;
- }
- if (cfra + offset > efra) {
- return efra;
- }
- }
-
- /* check frames before start */
- if (cfra < sfra) {
- segments = ((cfra + sfra) / time_range);
- cfra = cfra + (segments * time_range);
- }
-
- /* check frames after end */
- if (cfra > efra) {
- segments = ((cfra - sfra) / time_range);
- cfra = cfra - (segments * time_range);
- }
-
- if (mmd->flag & GP_TIME_KEEP_LOOP) {
- const int nfra = cfra + offset;
-
- /* if the sum of the cfra is out scene frame range, recalc */
- if (cfra + offset < sfra) {
- const int delta = abs(sfra - nfra);
- return efra - delta + 1;
- }
- else if (cfra + offset > efra) {
- return nfra - efra + sfra - 1;
- }
- }
-
- return cfra + offset;
+ TimeGpencilModifierData *mmd = (TimeGpencilModifierData *)md;
+ const bool custom = mmd->flag & GP_TIME_CUSTOM_RANGE;
+ const bool invgpl = mmd->flag & GP_TIME_INVERT_LAYER;
+ const bool invpass = mmd->flag & GP_TIME_INVERT_LAYERPASS;
+ int sfra = custom ? mmd->sfra : scene->r.sfra;
+ int efra = custom ? mmd->efra : scene->r.efra;
+ CLAMP_MIN(sfra, 1);
+ CLAMP_MIN(efra, 1);
+ const int time_range = efra - sfra + 1;
+ int offset = mmd->offset;
+ int segments = 0;
+
+ /* 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;
+ }
+ }
+ }
+ /* verify pass */
+ if (mmd->layer_pass > 0) {
+ if (invpass == false) {
+ if (gpl->pass_index != mmd->layer_pass) {
+ return cfra;
+ }
+ }
+ else {
+ if (gpl->pass_index == mmd->layer_pass) {
+ return cfra;
+ }
+ }
+ }
+
+ /* if fix mode, return predefined frame number */
+ if (mmd->mode == GP_TIME_MODE_FIX) {
+ return offset;
+ }
+
+ /* invert current frame number */
+ if (mmd->mode == GP_TIME_MODE_REVERSE) {
+ cfra = efra - cfra + sfra;
+ }
+
+ /* apply frame scale */
+ cfra *= mmd->frame_scale;
+
+ /* verify offset never is greater than frame range */
+ if (abs(offset) > time_range) {
+ offset = offset - ((offset / time_range) * time_range);
+ }
+
+ /* verify not outside range if loop is disabled */
+ if ((mmd->flag & GP_TIME_KEEP_LOOP) == 0) {
+ if (cfra + offset < sfra) {
+ return sfra;
+ }
+ if (cfra + offset > efra) {
+ return efra;
+ }
+ }
+
+ /* check frames before start */
+ if (cfra < sfra) {
+ segments = ((cfra + sfra) / time_range);
+ cfra = cfra + (segments * time_range);
+ }
+
+ /* check frames after end */
+ if (cfra > efra) {
+ segments = ((cfra - sfra) / time_range);
+ cfra = cfra - (segments * time_range);
+ }
+
+ if (mmd->flag & GP_TIME_KEEP_LOOP) {
+ const int nfra = cfra + offset;
+
+ /* if the sum of the cfra is out scene frame range, recalc */
+ if (cfra + offset < sfra) {
+ const int delta = abs(sfra - nfra);
+ return efra - delta + 1;
+ }
+ else if (cfra + offset > efra) {
+ return nfra - efra + sfra - 1;
+ }
+ }
+
+ return cfra + offset;
}
GpencilModifierTypeInfo modifierType_Gpencil_Time = {
- /* name */ "Time Offset",
- /* structName */ "TimeGpencilModifierData",
- /* structSize */ sizeof(TimeGpencilModifierData),
- /* type */ eGpencilModifierTypeType_Gpencil,
- /* flags */ 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,
- /* getDuplicationFactor */ NULL,
+ /* name */ "Time Offset",
+ /* structName */ "TimeGpencilModifierData",
+ /* structSize */ sizeof(TimeGpencilModifierData),
+ /* type */ eGpencilModifierTypeType_Gpencil,
+ /* flags */ 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,
+ /* getDuplicationFactor */ NULL,
};