diff options
Diffstat (limited to 'source/blender/editors')
-rw-r--r-- | source/blender/editors/transform/transform_mode_translate.c | 6 | ||||
-rw-r--r-- | source/blender/editors/transform/transform_snap.c | 18 | ||||
-rw-r--r-- | source/blender/editors/transform/transform_snap.h | 1 |
3 files changed, 20 insertions, 5 deletions
diff --git a/source/blender/editors/transform/transform_mode_translate.c b/source/blender/editors/transform/transform_mode_translate.c index 8597c372537..4b85e8067fd 100644 --- a/source/blender/editors/transform/transform_mode_translate.c +++ b/source/blender/editors/transform/transform_mode_translate.c @@ -395,9 +395,9 @@ static void applyTranslation(TransInfo *t, const int UNUSED(mval[2])) } float incr_dir[3]; - mul_v3_m3v3(incr_dir, t->spacemtx_inv, global_dir); - if (!(activeSnap(t) && validSnap(t)) && transform_snap_increment(t, incr_dir)) { - mul_v3_m3v3(incr_dir, t->spacemtx, incr_dir); + copy_v3_v3(incr_dir, global_dir); + if (!(activeSnap(t) && validSnap(t)) && + transform_snap_increment_ex(t, (t->con.mode & CON_APPLY) != 0, incr_dir)) { /* Test for mixed snap with grid. */ float snap_dist_sq = FLT_MAX; diff --git a/source/blender/editors/transform/transform_snap.c b/source/blender/editors/transform/transform_snap.c index e5b16d0ef6e..c19dd4598cf 100644 --- a/source/blender/editors/transform/transform_snap.c +++ b/source/blender/editors/transform/transform_snap.c @@ -1536,7 +1536,7 @@ static void snap_increment_apply(TransInfo *t, snap_increment_apply_ex(t, max_index, increment_dist, asp, r_val, r_val); } -bool transform_snap_increment(TransInfo *t, float *val) +bool transform_snap_increment_ex(TransInfo *t, bool use_local_space, float *r_val) { if (!activeSnap(t)) { return false; @@ -1552,12 +1552,26 @@ bool transform_snap_increment(TransInfo *t, float *val) return false; } + if (use_local_space) { + BLI_assert(t->idx_max == 2); + mul_m3_v3(t->spacemtx_inv, r_val); + } + float increment_dist = (t->modifiers & MOD_PRECISION) ? t->snap[1] : t->snap[0]; + snap_increment_apply(t, t->idx_max, increment_dist, r_val); + + if (use_local_space) { + mul_m3_v3(t->spacemtx, r_val); + } - snap_increment_apply(t, t->idx_max, increment_dist, val); return true; } +bool transform_snap_increment(TransInfo *t, float *r_val) +{ + return transform_snap_increment_ex(t, false, r_val); +} + /** \} */ /* -------------------------------------------------------------------- */ diff --git a/source/blender/editors/transform/transform_snap.h b/source/blender/editors/transform/transform_snap.h index db8ec943bfd..c557368ed17 100644 --- a/source/blender/editors/transform/transform_snap.h +++ b/source/blender/editors/transform/transform_snap.h @@ -54,6 +54,7 @@ void snapFrameTransform(struct TransInfo *t, bool transformModeUseSnap(const TransInfo *t); +bool transform_snap_increment_ex(TransInfo *t, bool use_local_space, float *r_val); bool transform_snap_increment(TransInfo *t, float *val); bool transform_snap_grid(TransInfo *t, float *val); |