[Bf-blender-cvs] [9a6cc25a8b6] soc-2021-curves: Added support to enable move point & select multi
dilithjay
noreply at git.blender.org
Sun Jan 2 11:03:17 CET 2022
Commit: 9a6cc25a8b631d15ff3bf0c817de96cc3da00df9
Author: dilithjay
Date: Sun Jan 2 14:33:03 2022 +0530
Branches: soc-2021-curves
https://developer.blender.org/rB9a6cc25a8b631d15ff3bf0c817de96cc3da00df9
Added support to enable move point & select multi
===================================================================
M release/scripts/presets/keyconfig/keymap_data/blender_default.py
M source/blender/editors/curve/editcurve_pen.c
===================================================================
diff --git a/release/scripts/presets/keyconfig/keymap_data/blender_default.py b/release/scripts/presets/keyconfig/keymap_data/blender_default.py
index 374a23ca440..a518b57f2da 100644
--- a/release/scripts/presets/keyconfig/keymap_data/blender_default.py
+++ b/release/scripts/presets/keyconfig/keymap_data/blender_default.py
@@ -7003,7 +7003,7 @@ def km_3d_view_tool_edit_curve_pen(params):
("curve.pen", {"type": params.tool_mouse, "value": 'PRESS', "ctrl": True},
{"properties": [("delete_point", True),]}),
("curve.pen", {"type": params.tool_mouse, "value": 'PRESS', "shift": True},
- {"properties": [("insert_point", True),]}),
+ {"properties": [("insert_point", True), ("select_multi", True),]}),
("curve.pen", {"type": params.tool_mouse, "value": 'DOUBLE_CLICK'},
{"properties": [("make_vector", True),]}),
]},
diff --git a/source/blender/editors/curve/editcurve_pen.c b/source/blender/editors/curve/editcurve_pen.c
index d8de0a83f51..d427db45106 100644
--- a/source/blender/editors/curve/editcurve_pen.c
+++ b/source/blender/editors/curve/editcurve_pen.c
@@ -90,6 +90,8 @@ typedef struct CurvePenData {
bool found_point;
/* Whether multiple selected points should be moved. */
bool multi_point;
+ /* Whether a point has already been selected. */
+ bool selection_made;
Nurb *nu;
BezTriple *bezt;
@@ -1282,27 +1284,21 @@ static int curve_pen_modal(bContext *C, wmOperator *op, const wmEvent *event)
else if (ELEM(event->type, LEFTMOUSE)) {
if (event->val == KM_PRESS) {
ED_curve_nurb_vert_selected_find(cu, vc.v3d, &nu, &bezt, &bp);
- if (select_point || move_point) {
- short bezt_idx = 0;
- if ((!nu || bezt || bp) && ED_curve_editnurb_select_pick_thresholded(
- C, event->mval, sel_dist_mul, false, false, false)) {
- cpd->found_point = true;
- cpd->nu = nu;
- cpd->bezt = bezt;
- cpd->bp = bp;
+ cpd->nu = nu;
+ cpd->bezt = bezt;
+ cpd->bp = bp;
+
+ if (select_point || move_point || select_multi) {
+ if (move_point && (!nu || bezt || bp)) {
+ cpd->found_point = ED_curve_editnurb_select_pick_thresholded(
+ C, event->mval, sel_dist_mul, false, false, false);
+ cpd->selection_made = true;
}
- else if (!(bezt || bp) && get_closest_vertex_to_point_in_nurbs(&(cu->editnurb->nurbs),
- &nu,
- &bezt,
- &bp,
- &bezt_idx,
- mval_fl,
- sel_dist_mul,
- &vc)) {
- cpd->found_point = true;
- cpd->nu = nu;
- cpd->bezt = bezt;
- cpd->bp = bp;
+ else {
+ short bezt_idx = 0;
+ cpd->found_point = get_closest_vertex_to_point_in_nurbs(
+ &(cu->editnurb->nurbs), &nu, &bezt, &bp, &bezt_idx, mval_fl, sel_dist_mul, &vc);
+ /* If point under mouse is selected, set cpd->multi_point to true. */
if ((bezt && BEZT_ISSEL_IDX(bezt, bezt_idx)) || bp) {
cpd->multi_point = true;
}
@@ -1342,6 +1338,7 @@ static int curve_pen_modal(bContext *C, wmOperator *op, const wmEvent *event)
}
if (!cpd->acted && close_spline && cpd->found_point && !cpd->dragging) {
+ ED_curve_nurb_vert_selected_find(cu, vc.v3d, &nu, &bezt, &bp);
if (cpd->nu && !(cpd->nu->flagu & CU_NURB_CYCLIC)) {
copy_v2_v2_int(vc.mval, event->mval);
cpd->acted = cpd->nu->pntsu > 2 &&
@@ -1385,24 +1382,26 @@ static int curve_pen_modal(bContext *C, wmOperator *op, const wmEvent *event)
}
}
- if (!cpd->acted && select_multi) {
- short bezt_idx;
- get_closest_vertex_to_point_in_nurbs(
- &(cu->editnurb->nurbs), &nu, &bezt, &bp, &bezt_idx, mval_fl, sel_dist_mul, &vc);
- if (bezt) {
- select_deselect_bezt(bezt, bezt_idx);
- }
- else if (bp) {
- select_deselect_bp(bp);
+ if (!cpd->selection_made) {
+ if (!cpd->acted && select_multi) {
+ short bezt_idx;
+ get_closest_vertex_to_point_in_nurbs(
+ &(cu->editnurb->nurbs), &nu, &bezt, &bp, &bezt_idx, mval_fl, sel_dist_mul, &vc);
+ if (bezt) {
+ select_deselect_bezt(bezt, bezt_idx);
+ }
+ else if (bp) {
+ select_deselect_bp(bp);
+ }
+ else {
+ ED_curve_deselect_all(cu->editnurb);
+ }
}
- else {
- ED_curve_deselect_all(cu->editnurb);
+ else if (!cpd->acted && select_point) {
+ ED_curve_editnurb_select_pick_thresholded(
+ C, event->mval, sel_dist_mul, false, false, false);
}
}
- else if (!cpd->acted && select_point) {
- ED_curve_editnurb_select_pick_thresholded(
- C, event->mval, sel_dist_mul, false, false, false);
- }
if (cpd->msd != NULL) {
MEM_freeN(cpd->msd);
More information about the Bf-blender-cvs
mailing list