From 286ea5f976f27f7fdfec5859b08bcb31e53e6728 Mon Sep 17 00:00:00 2001 From: Matthew Petroff Date: Thu, 18 Jul 2013 16:13:16 -0400 Subject: Added more convienient unit conversion functions. (bzr r12380.1.26) --- src/util/units.cpp | 26 +++++++++++++++++++++++++- src/util/units.h | 6 +++++- 2 files changed, 30 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/util/units.cpp b/src/util/units.cpp index 705fc850c..ed8fbfa34 100644 --- a/src/util/units.cpp +++ b/src/util/units.cpp @@ -462,9 +462,14 @@ bool Quantity::compatibleWith(const Unit *u) const { } /** Return the quantity's value in the specified unit. */ -double Quantity::value(Unit *u) const { +double Quantity::value(const Unit *u) const { return convert(quantity, unit, u); } +double Quantity::value(const Glib::ustring u) const { + static UnitTable unit_table; + Unit to_unit = unit_table.getUnit(u); + return value(&to_unit); +} /** Convert distances. */ double Quantity::convert(const double from_dist, const Unit *from, const Unit *to) { @@ -476,6 +481,25 @@ double Quantity::convert(const double from_dist, const Unit *from, const Unit *t // Compatible units return from_dist * from->factor / to->factor; } +double Quantity::convert(const double from_dist, const Glib::ustring from, const Unit &to) +{ + static UnitTable unit_table; + Unit from_unit = unit_table.getUnit(from); + return convert(from_dist, &from_unit, &to); +} +double Quantity::convert(const double from_dist, const Unit &from, const Glib::ustring to) +{ + static UnitTable unit_table; + Unit to_unit = unit_table.getUnit(to); + return convert(from_dist, &from, &to_unit); +} +double Quantity::convert(const double from_dist, const Glib::ustring from, const Glib::ustring to) +{ + static UnitTable unit_table; + Unit from_unit = unit_table.getUnit(from); + Unit to_unit = unit_table.getUnit(to); + return convert(from_dist, &from_unit, &to_unit); +} } // namespace Util } // namespace Inkscape diff --git a/src/util/units.h b/src/util/units.h index 5d7bfaeaa..f1a5f1e95 100644 --- a/src/util/units.h +++ b/src/util/units.h @@ -89,9 +89,13 @@ public: Quantity(double q, const Unit *u); // constructor bool compatibleWith(const Unit *u) const; - double value(Unit *u) const; + double value(const Unit *u) const; + double value(const Glib::ustring u) const; static double convert(const double from_dist, const Unit *from, const Unit *to); + static double convert(const double from_dist, const Glib::ustring from, const Unit &to); + static double convert(const double from_dist, const Unit &from, const Glib::ustring to); + static double convert(const double from_dist, const Glib::ustring from, const Glib::ustring to); }; class UnitTable { -- cgit v1.2.3