[Bf-blender-cvs] [12e9d52882e] master: Fix T60327: Value input with adaptive imperial units not working properly

Jacques Lucke noreply at git.blender.org
Tue Jan 8 19:24:18 CET 2019


Commit: 12e9d52882e32d85c3890b73aa5a21aff9c787fc
Author: Jacques Lucke
Date:   Tue Jan 8 19:20:22 2019 +0100
Branches: master
https://developer.blender.org/rB12e9d52882e32d85c3890b73aa5a21aff9c787fc

Fix T60327: Value input with adaptive imperial units not working properly

===================================================================

M	source/blender/blenkernel/BKE_unit.h
M	source/blender/blenkernel/intern/unit.c
M	source/blender/editors/util/numinput.c

===================================================================

diff --git a/source/blender/blenkernel/BKE_unit.h b/source/blender/blenkernel/BKE_unit.h
index 59475d3098a..b19cc340bbf 100644
--- a/source/blender/blenkernel/BKE_unit.h
+++ b/source/blender/blenkernel/BKE_unit.h
@@ -46,7 +46,7 @@ bool bUnit_ReplaceString(char *str, int len_max, const char *str_prev, double sc
 bool bUnit_ContainsUnit(const char *str, int system, int type);
 
 /* if user does not specify a unit, multiply with this value */
-double bUnit_PreferredUnitScalar(const struct UnitSettings *settings, int type);
+double bUnit_PreferredInputUnitScalar(const struct UnitSettings *settings, int type);
 
 /* make string keyboard-friendly: 10µm --> 10um */
 void bUnit_ToUnitAltName(char *str, int len_max, const char *orig_str, int system, int type);
diff --git a/source/blender/blenkernel/intern/unit.c b/source/blender/blenkernel/intern/unit.c
index 5527cb5d39a..7cac4c148ff 100644
--- a/source/blender/blenkernel/intern/unit.c
+++ b/source/blender/blenkernel/intern/unit.c
@@ -484,7 +484,7 @@ static bool is_valid_unit_collection(const bUnitCollection *usys)
 	return usys != NULL && usys->units[0].name != NULL;
 }
 
-static const bUnitDef *get_preferred_unit_if_used(int type, PreferredUnits units)
+static const bUnitDef *get_preferred_display_unit_if_used(int type, PreferredUnits units)
 {
 	const bUnitCollection *usys = unit_get_system(units.system, type);
 	if (!is_valid_unit_collection(usys)) return NULL;
@@ -525,7 +525,7 @@ static size_t unit_as_string_main(
 		usys = &buDummyCollection;
 	}
 	else {
-		main_unit = get_preferred_unit_if_used(type, units);
+		main_unit = get_preferred_display_unit_if_used(type, units);
 	}
 
 	if (split && unit_should_be_split(type)) {
@@ -734,12 +734,12 @@ bool bUnit_ContainsUnit(const char *str, int system, int type)
 	return false;
 }
 
-double bUnit_PreferredUnitScalar(const struct UnitSettings *settings, int type)
+double bUnit_PreferredInputUnitScalar(const struct UnitSettings *settings, int type)
 {
 	PreferredUnits units = preferred_units_from_UnitSettings(settings);
-	const bUnitDef *unit = get_preferred_unit_if_used(type, units);
-	if (unit == NULL) return 1.0;
-	else return unit->scalar;
+	const bUnitDef *unit = get_preferred_display_unit_if_used(type, units);
+	if (unit) return unit->scalar;
+	else return bUnit_BaseScalar(units.system, type);
 }
 
 /* make a copy of the string that replaces the units with numbers
@@ -905,7 +905,8 @@ double bUnit_ClosestScalar(double value, int system, int type)
 double bUnit_BaseScalar(int system, int type)
 {
 	const bUnitCollection *usys = unit_get_system(system, type);
-	return unit_default(usys)->scalar;
+	if (usys) return unit_default(usys)->scalar;
+	else return 1.0;
 }
 
 /* external access */
diff --git a/source/blender/editors/util/numinput.c b/source/blender/editors/util/numinput.c
index 52cf1b2d708..e3c0f6ca685 100644
--- a/source/blender/editors/util/numinput.c
+++ b/source/blender/editors/util/numinput.c
@@ -260,7 +260,7 @@ bool user_string_to_number(bContext *C, const char *str, const UnitSettings *uni
 	double unit_scale = BKE_scene_unit_scale(unit, type, 1.0);
 	if (!bUnit_ContainsUnit(str, unit->system, type)) {
 		int success = BPY_execute_string_as_number(C, NULL, str, true, r_value);
-		*r_value *= bUnit_PreferredUnitScalar(unit, type);
+		*r_value *= bUnit_PreferredInputUnitScalar(unit, type);
 		*r_value /= unit_scale;
 		return success;
 	}



More information about the Bf-blender-cvs mailing list