Fix T94137: GPencil: Eraser does not erase first point
The eraser checks the current, previous and next point (and sets pc0, pc1 & pc2 corresponding to that for futher occlusion/brush/clipping checks). For the very first point, it sets pc0 to pc1 [which makes sense, there is no previous point, so we should assume the previous segment is "visible" as soon as the first point is], but does so *before* pc1 is even calculated. This makes following occlusion/brush/clipping checks work with zero values [which leads to no earsing in most cases]. Now *first* calculate pc1, *then* set pc0 to pc1. Maniphest Tasks: T94137 Differential Revision: https://developer.blender.org/D13593
This commit is contained in:
parent
7c9e409985
commit
f3c1d0e3a3
Notes:
blender-bot
2023-02-14 05:50:03 +01:00
Referenced by issue #88449: Blender LTS: Maintenance Task 2.93 Referenced by issue #88449, Blender LTS: Maintenance Task 2.93 Referenced by issue #94137, GPencil: Eraser-Stroke doesn't erase on end-point.
|
@ -1567,6 +1567,12 @@ static void gpencil_stroke_eraser_dostroke(tGPsdata *p,
|
|||
}
|
||||
|
||||
bGPDspoint npt;
|
||||
gpencil_point_to_parent_space(pt1, p->diff_mat, &npt);
|
||||
gpencil_point_to_xy(&p->gsc, gps, &npt, &pc1[0], &pc1[1]);
|
||||
|
||||
gpencil_point_to_parent_space(pt2, p->diff_mat, &npt);
|
||||
gpencil_point_to_xy(&p->gsc, gps, &npt, &pc2[0], &pc2[1]);
|
||||
|
||||
if (pt0) {
|
||||
gpencil_point_to_parent_space(pt0, p->diff_mat, &npt);
|
||||
gpencil_point_to_xy(&p->gsc, gps, &npt, &pc0[0], &pc0[1]);
|
||||
|
@ -1576,12 +1582,6 @@ static void gpencil_stroke_eraser_dostroke(tGPsdata *p,
|
|||
copy_v2_v2_int(pc0, pc1);
|
||||
}
|
||||
|
||||
gpencil_point_to_parent_space(pt1, p->diff_mat, &npt);
|
||||
gpencil_point_to_xy(&p->gsc, gps, &npt, &pc1[0], &pc1[1]);
|
||||
|
||||
gpencil_point_to_parent_space(pt2, p->diff_mat, &npt);
|
||||
gpencil_point_to_xy(&p->gsc, gps, &npt, &pc2[0], &pc2[1]);
|
||||
|
||||
/* Check that point segment of the boundbox of the eraser stroke */
|
||||
if (((!ELEM(V2D_IS_CLIPPED, pc0[0], pc0[1])) && BLI_rcti_isect_pt(rect, pc0[0], pc0[1])) ||
|
||||
((!ELEM(V2D_IS_CLIPPED, pc1[0], pc1[1])) && BLI_rcti_isect_pt(rect, pc1[0], pc1[1])) ||
|
||||
|
|
Loading…
Reference in New Issue