Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCampbell Barton <ideasman42@gmail.com>2015-06-30 11:26:37 +0300
committerCampbell Barton <ideasman42@gmail.com>2015-06-30 11:26:37 +0300
commit5d3ba4fb80dc5def0a11d894bcba19f4fa08fd23 (patch)
tree765da91b281fc75220bcaade4b77aa2eb26ebf88
parentcec0138bcc1ca4d8d43e78bc61caac3e2494dd94 (diff)
Cleanup: transform grid snap round, not floor
-rw-r--r--source/blender/editors/transform/transform_snap.c19
1 files changed, 10 insertions, 9 deletions
diff --git a/source/blender/editors/transform/transform_snap.c b/source/blender/editors/transform/transform_snap.c
index 1b0256bdeed..9555596a380 100644
--- a/source/blender/editors/transform/transform_snap.c
+++ b/source/blender/editors/transform/transform_snap.c
@@ -384,7 +384,8 @@ void applyGridAbsolute(TransInfo *t)
float grid_size = 0.0f;
GearsType grid_action;
TransData *td;
- float imat[4][4];
+ float (*obmat)[4] = NULL;
+ bool use_obmat = false;
int i;
if (!(activeSnap(t) && (t->tsnap.mode == SCE_SNAP_MODE_GRID)))
@@ -405,7 +406,8 @@ void applyGridAbsolute(TransInfo *t)
if (t->flag & (T_EDIT | T_POSE)) {
Object *ob = t->obedit ? t->obedit : t->poseobj;
- invert_m4_m4(imat, ob->obmat);
+ obmat = ob->obmat;
+ use_obmat = true;
}
for (i = 0, td = t->data; i < t->total; i++, td++) {
@@ -421,9 +423,8 @@ void applyGridAbsolute(TransInfo *t)
continue;
copy_v3_v3(iloc, td->loc);
- if (t->flag & (T_EDIT | T_POSE)) {
- Object *ob = t->obedit ? t->obedit : t->poseobj;
- mul_m4_v3(ob->obmat, iloc);
+ if (use_obmat) {
+ mul_m4_v3(obmat, iloc);
}
else if (t->flag & T_OBJECT) {
td->ob->recalc |= OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME;
@@ -432,11 +433,11 @@ void applyGridAbsolute(TransInfo *t)
}
mul_v3_v3fl(loc, iloc, 1.0f / grid_size);
- loc[0] = floorf(loc[0]);
- loc[1] = floorf(loc[1]);
- loc[2] = floorf(loc[2]);
+ loc[0] = roundf(loc[0]);
+ loc[1] = roundf(loc[1]);
+ loc[2] = roundf(loc[2]);
mul_v3_fl(loc, grid_size);
-
+
sub_v3_v3v3(tvec, loc, iloc);
mul_m3_v3(td->smtx, tvec);
add_v3_v3(td->loc, tvec);