diff options
author | Bastien Montagne <montagne29@wanadoo.fr> | 2017-12-04 20:40:33 +0300 |
---|---|---|
committer | Bastien Montagne <montagne29@wanadoo.fr> | 2017-12-04 20:40:33 +0300 |
commit | 1802d14394c52698c0501e03179a651cf3a65cfd (patch) | |
tree | 984fcc2183aacf010e5e36c28346ef74322a70d5 /source/blender/editors/util | |
parent | 40822ae4e93858d8419548cc804d1c1143ec8df4 (diff) |
Fix T53463: Rotation numerical input shows instable behaviour.
Inverting a number in radians when user is in degrees gives rather
unexpected results. ;)
Diffstat (limited to 'source/blender/editors/util')
-rw-r--r-- | source/blender/editors/util/numinput.c | 14 |
1 files changed, 12 insertions, 2 deletions
diff --git a/source/blender/editors/util/numinput.c b/source/blender/editors/util/numinput.c index 61142fdc887..0f3240946fd 100644 --- a/source/blender/editors/util/numinput.c +++ b/source/blender/editors/util/numinput.c @@ -488,8 +488,9 @@ bool handleNumInput(bContext *C, NumInput *n, const wmEvent *event) const float fac = (float)BKE_scene_unit_scale(&sce->unit, n->unit_type[idx], 1.0); /* Make radian default unit when needed. */ - if (n->unit_use_radians && n->unit_type[idx] == B_UNIT_ROTATION) + if (n->unit_use_radians && n->unit_type[idx] == B_UNIT_ROTATION) { default_unit = "r"; + } BLI_strncpy(str_unit_convert, n->str, sizeof(str_unit_convert)); @@ -513,7 +514,16 @@ bool handleNumInput(bContext *C, NumInput *n, const wmEvent *event) n->val[idx] = -n->val[idx]; } if (n->val_flag[idx] & NUM_INVERSE) { - n->val[idx] = 1.0f / n->val[idx]; + val = n->val[idx]; + /* If we invert on radians when user is in degrees, you get unexpected results... See T53463. */ + if (!n->unit_use_radians && n->unit_type[idx] == B_UNIT_ROTATION) { + val = RAD2DEG(val); + } + val = 1.0 / val; + if (!n->unit_use_radians && n->unit_type[idx] == B_UNIT_ROTATION) { + val = DEG2RAD(val); + } + n->val[idx] = (float)val; } if (UNLIKELY(!isfinite(n->val[idx]))) { |