diff --git a/source/blender/editors/transform/transform_snap_object_curve.cc b/source/blender/editors/transform/transform_snap_object_curve.cc index db2a4479ccf..7dac05de5fa 100644 --- a/source/blender/editors/transform/transform_snap_object_curve.cc +++ b/source/blender/editors/transform/transform_snap_object_curve.cc @@ -20,6 +20,7 @@ #include "transform_snap_object.hh" using blender::float4x4; +using blender::IndexRange; eSnapMode snapCurve(SnapObjectContext *sctx, Object *ob_eval, const float4x4 &obmat) { @@ -50,9 +51,9 @@ eSnapMode snapCurve(SnapObjectContext *sctx, Object *ob_eval, const float4x4 &ob 0; LISTBASE_FOREACH (Nurb *, nu, (use_obedit ? &cu->editnurb->nurbs : &cu->nurb)) { - for (int u = 0; u < nu->pntsu; u++) { - if (use_obedit) { - if (nu->bezt) { + if (nu->bezt) { + for (int u : blender::IndexRange(nu->pntsu)) { + if (use_obedit) { if (nu->bezt[u].hide) { /* Skip hidden. */ continue; @@ -62,7 +63,6 @@ eSnapMode snapCurve(SnapObjectContext *sctx, Object *ob_eval, const float4x4 &ob if (is_selected && skip_selected) { continue; } - has_snap |= nearest2d.snap_point(nu->bezt[u].vec[1]); /* Don't snap if handle is selected (moving), * or if it is aligning to a moving handle. */ @@ -78,7 +78,12 @@ eSnapMode snapCurve(SnapObjectContext *sctx, Object *ob_eval, const float4x4 &ob has_snap |= nearest2d.snap_point(nu->bezt[u].vec[2]); } } - else { + has_snap |= nearest2d.snap_point(nu->bezt[u].vec[1]); + } + } + else if (nu->bp) { + for (int u : blender::IndexRange(nu->pntsu * nu->pntsv)) { + if (use_obedit) { if (nu->bp[u].hide) { /* Skip hidden. */ continue; @@ -88,20 +93,8 @@ eSnapMode snapCurve(SnapObjectContext *sctx, Object *ob_eval, const float4x4 &ob if (is_selected && skip_selected) { continue; } - - has_snap |= nearest2d.snap_point(nu->bp[u].vec); - } - } - else { - /* Curve is not visible outside editmode if nurb length less than two. */ - if (nu->pntsu > 1) { - if (nu->bezt) { - has_snap |= nearest2d.snap_point(nu->bezt[u].vec[1]); - } - else { - has_snap |= nearest2d.snap_point(nu->bp[u].vec); - } } + has_snap |= nearest2d.snap_point(nu->bp[u].vec); } } }