From 0381727663ec405916565f0f5f677bdb7e6ac510 Mon Sep 17 00:00:00 2001 From: Yevgeny Makarov Date: Wed, 4 Sep 2019 22:46:24 +1000 Subject: Fix T55745: Checker de-select, inconsistent selection With these changes, successive selections result in an even pattern. --- source/blender/editors/curve/editcurve_select.c | 4 ++-- source/blender/editors/mesh/editmesh_path.c | 9 +++----- source/blender/editors/mesh/editmesh_select.c | 2 +- .../windowmanager/intern/wm_operator_props.c | 25 ++++++++++++++-------- 4 files changed, 22 insertions(+), 18 deletions(-) diff --git a/source/blender/editors/curve/editcurve_select.c b/source/blender/editors/curve/editcurve_select.c index f67ccf1e4bd..d0abcf32107 100644 --- a/source/blender/editors/curve/editcurve_select.c +++ b/source/blender/editors/curve/editcurve_select.c @@ -1311,7 +1311,7 @@ static void select_nth_bezt(Nurb *nu, BezTriple *bezt, const struct CheckerInter while (a--) { const int depth = abs(start - a); - if (WM_operator_properties_checker_interval_test(params, depth)) { + if (!WM_operator_properties_checker_interval_test(params, depth)) { select_beztriple(bezt, DESELECT, SELECT, HIDDEN); } @@ -1334,7 +1334,7 @@ static void select_nth_bp(Nurb *nu, BPoint *bp, const struct CheckerIntervalPara while (a--) { const int depth = abs(pnt - startpnt) + abs(row - startrow); - if (WM_operator_properties_checker_interval_test(params, depth)) { + if (!WM_operator_properties_checker_interval_test(params, depth)) { select_bpoint(bp, DESELECT, SELECT, HIDDEN); } diff --git a/source/blender/editors/mesh/editmesh_path.c b/source/blender/editors/mesh/editmesh_path.c index 6fd0ee83b6c..06c41b78c37 100644 --- a/source/blender/editors/mesh/editmesh_path.c +++ b/source/blender/editors/mesh/editmesh_path.c @@ -239,8 +239,7 @@ static void mouse_mesh_shortest_path_vert(Scene *UNUSED(scene), } } while ((node = node->next)); - /* We need to start as if just *after* a 'skip' block... */ - int depth = op_params->interval_params.skip; + int depth = -1; node = path; do { if ((is_path_ordered == false) || @@ -430,8 +429,7 @@ static void mouse_mesh_shortest_path_edge(Scene *scene, } } while ((node = node->next)); - /* We need to start as if just *after* a 'skip' block... */ - int depth = op_params->interval_params.skip; + int depth = -1; node = path; do { if ((is_path_ordered == false) || @@ -561,8 +559,7 @@ static void mouse_mesh_shortest_path_face(Scene *UNUSED(scene), } } while ((node = node->next)); - /* We need to start as if just *after* a 'skip' block... */ - int depth = op_params->interval_params.skip; + int depth = -1; node = path; do { if ((is_path_ordered == false) || diff --git a/source/blender/editors/mesh/editmesh_select.c b/source/blender/editors/mesh/editmesh_select.c index c0bd9e9f14c..53b4efbd968 100644 --- a/source/blender/editors/mesh/editmesh_select.c +++ b/source/blender/editors/mesh/editmesh_select.c @@ -3734,7 +3734,7 @@ static void walker_deselect_nth(BMEditMesh *em, if (!BM_elem_flag_test(ele, BM_ELEM_TAG)) { /* Deselect elements that aren't at "nth" depth from active */ const int depth = BMW_current_depth(&walker) - 1; - if (WM_operator_properties_checker_interval_test(op_params, depth)) { + if (!WM_operator_properties_checker_interval_test(op_params, depth)) { BM_elem_select_set(bm, ele, false); } BM_elem_flag_enable(ele, BM_ELEM_TAG); diff --git a/source/blender/windowmanager/intern/wm_operator_props.c b/source/blender/windowmanager/intern/wm_operator_props.c index 34e17a8102a..de82c3942db 100644 --- a/source/blender/windowmanager/intern/wm_operator_props.c +++ b/source/blender/windowmanager/intern/wm_operator_props.c @@ -500,19 +500,26 @@ void WM_operator_properties_mouse_select(wmOperatorType *ot) */ void WM_operator_properties_checker_interval(wmOperatorType *ot, bool nth_can_disable) { - const int nth_default = nth_can_disable ? 1 : 2; - const int nth_min = min_ii(nth_default, 2); + const int nth_default = nth_can_disable ? 0 : 1; + const int nth_min = min_ii(nth_default, 1); RNA_def_int(ot->srna, - "nth", + "skip", nth_default, nth_min, INT_MAX, - "Nth Element", - "Skip every Nth element", + "Deselected", + "Number of deselected elements in the repetitive sequence", nth_min, 100); - RNA_def_int( - ot->srna, "skip", 1, 1, INT_MAX, "Skip", "Number of elements to skip at once", 1, 100); + RNA_def_int(ot->srna, + "nth", + 1, + 1, + INT_MAX, + "Selected", + "Number of selected elements in the repetitive sequence", + 1, + 100); RNA_def_int(ot->srna, "offset", 0, @@ -527,7 +534,7 @@ void WM_operator_properties_checker_interval(wmOperatorType *ot, bool nth_can_di void WM_operator_properties_checker_interval_from_op(struct wmOperator *op, struct CheckerIntervalParams *op_params) { - const int nth = RNA_int_get(op->ptr, "nth") - 1; + const int nth = RNA_int_get(op->ptr, "nth"); const int skip = RNA_int_get(op->ptr, "skip"); int offset = RNA_int_get(op->ptr, "offset"); @@ -541,6 +548,6 @@ void WM_operator_properties_checker_interval_from_op(struct wmOperator *op, bool WM_operator_properties_checker_interval_test(const struct CheckerIntervalParams *op_params, int depth) { - return ((op_params->nth == 0) || + return ((op_params->skip == 0) || ((op_params->offset + depth) % (op_params->skip + op_params->nth) >= op_params->skip)); } -- cgit v1.2.3