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
path: root/source
diff options
context:
space:
mode:
authorAntonio Vazquez <blendergit@gmail.com>2020-07-28 17:23:45 +0300
committerJeroen Bakker <jeroen@blender.org>2020-07-29 11:17:33 +0300
commit573972ff41f90415c6f7ebfd51385c97976441d0 (patch)
treecec94aa74e5f4f8b9b8c0622a6b3601fcf987fa3 /source
parent53b98de26030574ae2ecdaac5e33b37acb5444e2 (diff)
GPencil: Fix unreported missing strokes in interpolation
Sometimes the interpolated stroke was tagged and removed.
Diffstat (limited to 'source')
-rw-r--r--source/blender/editors/gpencil/gpencil_interpolate.c28
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);