diff options
author | mano-wii <germano.costa@ig.com.br> | 2020-02-10 14:17:26 +0300 |
---|---|---|
committer | mano-wii <germano.costa@ig.com.br> | 2020-02-10 14:18:04 +0300 |
commit | 14d1dc5df565bdd3970579b31da9b2a26c306448 (patch) | |
tree | 867160b205636a3f9ded98a1bb141557edf3723d /source/blender/editors/sculpt_paint | |
parent | 795c4a3462536d1e780b227d6877a8693f656cf9 (diff) |
Fix T61138: Difficulty in aligning handles of Stroke of type Curve
The user has preference to select the center point for alignment.
But in this case, it was not available for selection.
Also prioritizes selection of the middle point over the handles.
Reviewed By: #user_interface, brecht
Differential Revision: https://developer.blender.org/D6780
Diffstat (limited to 'source/blender/editors/sculpt_paint')
-rw-r--r-- | source/blender/editors/sculpt_paint/paint_curve.c | 52 |
1 files changed, 24 insertions, 28 deletions
diff --git a/source/blender/editors/sculpt_paint/paint_curve.c b/source/blender/editors/sculpt_paint/paint_curve.c index 62c31c91f8d..8a98b15088f 100644 --- a/source/blender/editors/sculpt_paint/paint_curve.c +++ b/source/blender/editors/sculpt_paint/paint_curve.c @@ -87,39 +87,35 @@ static PaintCurvePoint *paintcurve_point_get_closest( { PaintCurvePoint *pcp, *closest = NULL; int i; - float dist, closest_dist = FLT_MAX; + float closest_dist = threshold; for (i = 0, pcp = pc->points; i < pc->tot_points; i++, pcp++) { - dist = len_manhattan_v2v2(pos, pcp->bez.vec[0]); - if (dist < threshold) { - if (dist < closest_dist) { - closest = pcp; - closest_dist = dist; - if (point) { - *point = SEL_F1; - } - } + float dist[3]; + char point_sel = 0; + + dist[0] = len_manhattan_v2v2(pos, pcp->bez.vec[0]); + dist[1] = len_manhattan_v2v2(pos, pcp->bez.vec[1]); + dist[2] = len_manhattan_v2v2(pos, pcp->bez.vec[2]); + + if (dist[1] < closest_dist) { + closest_dist = dist[1]; + point_sel = SEL_F2; } - if (!ignore_pivot) { - dist = len_manhattan_v2v2(pos, pcp->bez.vec[1]); - if (dist < threshold) { - if (dist < closest_dist) { - closest = pcp; - closest_dist = dist; - if (point) { - *point = SEL_F2; - } - } - } + if (dist[0] < closest_dist) { + closest_dist = dist[0]; + point_sel = SEL_F1; + } + if (dist[2] < closest_dist) { + closest_dist = dist[2]; + point_sel = SEL_F3; } - dist = len_manhattan_v2v2(pos, pcp->bez.vec[2]); - if (dist < threshold) { - if (dist < closest_dist) { - closest = pcp; - closest_dist = dist; - if (point) { - *point = SEL_F3; + if (point_sel) { + closest = pcp; + if (point) { + if (ignore_pivot && point_sel == SEL_F2) { + point_sel = (dist[0] < dist[2]) ? SEL_F1 : SEL_F3; } + *point = point_sel; } } } |