GPencil: Fix unreported missing strokes in interpolation
Sometimes the interpolated stroke was tagged and removed.
This commit is contained in:
parent
9ff7820f62
commit
dcf7a05077
Notes:
blender-bot
2023-02-14 05:53:38 +01:00
Referenced by issue #77348, Blender LTS: Maintenance Task 2.83
|
@ -136,15 +136,17 @@ static void gpencil_interpolate_free_temp_strokes(bGPDframe *gpf)
|
|||
}
|
||||
|
||||
/* Helper: Untag all strokes. */
|
||||
static void gpencil_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 gpencil_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) {
|
||||
gpencil_interpolate_untag_strokes(gpl->actframe);
|
||||
gpencil_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 gpencil_interpolate_set_init_values(bContext *C, wmOperator *op, tGP
|
|||
/* set layers */
|
||||
gpencil_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;
|
||||
}
|
||||
|
||||
|
@ -606,6 +604,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);
|
||||
|
||||
|
|
Loading…
Reference in New Issue