diff options
author | Antonio Vazquez <blendergit@gmail.com> | 2020-07-28 17:23:45 +0300 |
---|---|---|
committer | Jeroen Bakker <jeroen@blender.org> | 2020-07-29 11:17:33 +0300 |
commit | 573972ff41f90415c6f7ebfd51385c97976441d0 (patch) | |
tree | cec94aa74e5f4f8b9b8c0622a6b3601fcf987fa3 | |
parent | 53b98de26030574ae2ecdaac5e33b37acb5444e2 (diff) |
GPencil: Fix unreported missing strokes in interpolation
Sometimes the interpolated stroke was tagged and removed.
-rw-r--r-- | source/blender/editors/gpencil/gpencil_interpolate.c | 28 |
1 files changed, 14 insertions, 14 deletions
diff --git a/source/blender/editors/gpencil/gpencil_interpolate.c b/source/blender/editors/gpencil/gpencil_interpolate.c index 88ae81ce85a..e5b54fadb7e 100644 --- a/source/blender/editors/gpencil/gpencil_interpolate.c +++ b/source/blender/editors/gpencil/gpencil_interpolate.c @@ -136,15 +136,17 @@ static void gp_interpolate_free_temp_strokes(bGPDframe *gpf) } /* Helper: Untag all strokes. */ -static void gp_interpolate_untag_strokes(bGPDframe *gpf) +static void gpencil_interpolate_untag_strokes(bGPDlayer *gpl) { - if (gpf == NULL) { + if (gpl == NULL) { return; } - LISTBASE_FOREACH (bGPDstroke *, gps, &gpf->strokes) { - if (gps->flag & GP_STROKE_TAG) { - gps->flag &= ~GP_STROKE_TAG; + LISTBASE_FOREACH (bGPDframe *, gpf, &gpl->frames) { + LISTBASE_FOREACH (bGPDstroke *, gps, &gpf->strokes) { + if (gps->flag & GP_STROKE_TAG) { + gps->flag &= ~GP_STROKE_TAG; + } } } } @@ -263,15 +265,6 @@ static void gp_interpolate_set_points(bContext *C, tGPDinterpolate *tgpi) /* set layers */ LISTBASE_FOREACH (bGPDlayer *, gpl, &gpd->layers) { tGPDinterpolate_layer *tgpil; - - /* Untag strokes to be sure nothing is pending. This must be done for - * all layer because it could be anything tagged and it would be removed - * at the end of the process when all tagged strokes are removed. */ - if (gpl->actframe != NULL) { - gp_interpolate_untag_strokes(gpl->actframe); - gp_interpolate_untag_strokes(gpl->actframe->next); - } - /* all layers or only active */ if (!(tgpi->flag & GP_TOOLFLAG_INTERPOLATE_ALL_LAYERS) && (gpl != active_gpl)) { continue; @@ -483,6 +476,11 @@ static bool gp_interpolate_set_init_values(bContext *C, wmOperator *op, tGPDinte /* set layers */ gp_interpolate_set_points(C, tgpi); + /* Untag strokes to be sure nothing is pending due any canceled process. */ + LISTBASE_FOREACH (bGPDlayer *, gpl, &tgpi->gpd->layers) { + gpencil_interpolate_untag_strokes(gpl); + } + return 1; } @@ -608,6 +606,8 @@ static int gpencil_interpolate_modal(bContext *C, wmOperator *op, const wmEvent /* make copy of source stroke, then adjust pointer to points too */ gps_dst = BKE_gpencil_stroke_duplicate(gps_src, true); + gps_dst->flag &= ~GP_STROKE_TAG; + /* Calc geometry data. */ BKE_gpencil_stroke_geometry_update(gps_dst); |