diff options
author | Bastien Montagne <montagne29@wanadoo.fr> | 2014-08-26 14:04:24 +0400 |
---|---|---|
committer | Bastien Montagne <montagne29@wanadoo.fr> | 2014-08-26 14:31:08 +0400 |
commit | 0e3fa0b7618fa86e97c5f46ae7208c082fd26eb7 (patch) | |
tree | 447fcae65fe6bf4086a79e03a82abb7a4138897b /source/blender/editors/interface/interface.c | |
parent | 600248783b50ddef9b809b0d4c7abd9a9b20fda3 (diff) |
Fix T41590: When scene scale is not 1.0, and units are "None," Blender assumes translations are in meters.
Turned out there were several issues in handling of scale parameter by numinput.
Fixed that by factorizing more some code in common with 'usual' numbuttons eval code
(new `bUnit_getScaleUnit()` helper will return valid scaled value, depending on
given system and type).
Now, numinput behaves as expected - using default unit amended by scale in case no unit is given
(i.e. entering '20' with a scale of 0.01 will give you 20cm, and '20cm' as well!).
Diffstat (limited to 'source/blender/editors/interface/interface.c')
-rw-r--r-- | source/blender/editors/interface/interface.c | 20 |
1 files changed, 3 insertions, 17 deletions
diff --git a/source/blender/editors/interface/interface.c b/source/blender/editors/interface/interface.c index b4c2a431570..698d3f0a585 100644 --- a/source/blender/editors/interface/interface.c +++ b/source/blender/editors/interface/interface.c @@ -1942,27 +1942,13 @@ static double ui_get_but_scale_unit(uiBut *but, double value) UnitSettings *unit = but->block->unit; int unit_type = uiButGetUnitType(but); - if (unit_type == PROP_UNIT_LENGTH) { - return value * (double)unit->scale_length; - } - else if (unit_type == PROP_UNIT_CAMERA) { - return value * (double)unit->scale_length; - } - else if (unit_type == PROP_UNIT_AREA) { - return value * pow(unit->scale_length, 2); - } - else if (unit_type == PROP_UNIT_VOLUME) { - return value * pow(unit->scale_length, 3); - } - else if (unit_type == PROP_UNIT_MASS) { - return value * pow(unit->scale_length, 3); - } - else if (unit_type == PROP_UNIT_TIME) { /* WARNING - using evil_C :| */ + /* Time unit is a bit special, not handled by bUnit_getScaleUnit() for now. */ + if (unit_type == PROP_UNIT_TIME) { /* WARNING - using evil_C :| */ Scene *scene = CTX_data_scene(but->block->evil_C); return FRA2TIME(value); } else { - return value; + return bUnit_getScaleUnit(unit, RNA_SUBTYPE_UNIT_VALUE(unit_type), value); } } |