15 #include "distanceUnit.h" 16 #include "config_pandatoolbase.h" 17 #include "string_utils.h" 26 format_abbrev_unit(DistanceUnit unit) {
49 case DU_nautical_miles:
52 case DU_statute_miles:
58 nout <<
"**unexpected DistanceUnit value: (" << (int)unit <<
")**";
68 format_long_unit(DistanceUnit unit) {
91 case DU_nautical_miles:
92 return "nautical miles";
94 case DU_statute_miles:
100 nout <<
"**unexpected DistanceUnit value: (" << (int)unit <<
")**";
109 operator << (ostream &out, DistanceUnit unit) {
110 return out << format_abbrev_unit(unit);
118 operator >> (istream &in, DistanceUnit &unit) {
121 unit = string_distance_unit(word);
122 if (unit == DU_invalid) {
123 pandatoolbase_cat->error()
124 <<
"Invalid distance unit: " << word <<
"\n";
136 string_distance_unit(
const string &str) {
137 if (cmp_nocase(str,
"mm") == 0 || cmp_nocase(str,
"millimeters") == 0) {
138 return DU_millimeters;
140 }
else if (cmp_nocase(str,
"cm") == 0 || cmp_nocase(str,
"centimeters") == 0) {
141 return DU_centimeters;
143 }
else if (cmp_nocase(str,
"m") == 0 || cmp_nocase(str,
"meters") == 0) {
146 }
else if (cmp_nocase(str,
"km") == 0 || cmp_nocase(str,
"kilometers") == 0) {
147 return DU_kilometers;
149 }
else if (cmp_nocase(str,
"yd") == 0 || cmp_nocase(str,
"yards") == 0) {
152 }
else if (cmp_nocase(str,
"ft") == 0 || cmp_nocase(str,
"feet") == 0) {
155 }
else if (cmp_nocase(str,
"in") == 0 || cmp_nocase(str,
"inches") == 0) {
158 }
else if (cmp_nocase(str,
"nmi") == 0 ||
159 cmp_nocase(str,
"nm") == 0 ||
160 cmp_nocase_uh(str,
"nautical_miles") == 0) {
161 return DU_nautical_miles;
163 }
else if (cmp_nocase(str,
"mi") == 0 ||
164 cmp_nocase(str,
"miles") == 0 ||
165 cmp_nocase_uh(str,
"statute_miles") == 0) {
166 return DU_statute_miles;
179 static double unit_scale(DistanceUnit unit) {
194 return 3.0 * 12.0 * 2.54;
202 case DU_nautical_miles:
206 case DU_statute_miles:
207 return 5280.0 * 12.0 * 2.54;
221 double convert_units(DistanceUnit from, DistanceUnit to) {
222 return unit_scale(from) / unit_scale(to);