X-Git-Url: http://shamusworld.gotdns.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fbase%2Funits.cpp;fp=src%2Fbase%2Funits.cpp;h=0000000000000000000000000000000000000000;hb=9f6ad3fe0b9cb30115a5d38e8af3aebed0d70c08;hp=5ee0d448b2d469fabceede896b06449fca5f3510;hpb=43c13b052d069ba435277d93867380d00c04931f;p=architektonas diff --git a/src/base/units.cpp b/src/base/units.cpp deleted file mode 100644 index 5ee0d44..0000000 --- a/src/base/units.cpp +++ /dev/null @@ -1,1341 +0,0 @@ -// units.cpp -// -// Part of the Architektonas Project -// Originally part of QCad Community Edition by Andrew Mustun -// Extensively rewritten and refactored by James L. Hammons -// Portions copyright (C) 2001-2003 RibbonSoft -// Copyright (C) 2010 Underground Software -// See the README and GPLv2 files for licensing and warranty information -// -// JLH = James L. Hammons -// -// Who When What -// --- ---------- ----------------------------------------------------------- -// JLH 05/05/2010 Moved implementation from header to this file. :-) -// - -#include "units.h" - -#include -#include "mathextra.h" -#include "debug.h" - -/** - * Converts a DXF integer () to a Unit enum. - */ -RS2::Unit Units::dxfint2unit(int dxfint) -{ - return (RS2::Unit)dxfint; - - /*switch(dxfint) { - default: - case 0: - return RS2::None; - case 1: - return RS2::Inch; - case 2: - return RS2::Foot; - case 3: - return RS2::Mile; - case 4: - return RS2::Millimeter; - case 5: - return RS2::Centimeter; - case 6: - return RS2::Meter; - case 7: - return RS2::Kilometer; - case 8: - return RS2::Microinch; - case 9: - return RS2::Mil; - case 10: - return RS2::Yard; - case 11: - return RS2::Angstrom; - case 12: - return RS2::Nanometer; - case 13: - return RS2::Micron; - case 14: - return RS2::Decimeter; - case 15: - return RS2::Decameter; - case 16: - return RS2::Hectometer; - case 17: - return RS2::Gigameter; - case 18: - return RS2::Astro; - case 19: - return RS2::Lightyear; - case 20: - return RS2::Parsec; -}*/ -} - -/** - * @return a short string representing the given unit (e.g. "mm") - */ -QString Units::unitToSign(RS2::Unit u) -{ - QString ret = ""; - - switch (u) - { - case RS2::None: - ret = ""; - break; - case RS2::Inch: - ret = "\""; - break; - case RS2::Foot: - ret = "'"; - break; - case RS2::Mile: - ret = "mi"; - break; - case RS2::Millimeter: - ret = "mm"; - break; - case RS2::Centimeter: - ret = "cm"; - break; - case RS2::Meter: - ret = "m"; - break; - case RS2::Kilometer: - ret = "km"; - break; - case RS2::Microinch: - ret = "�\""; - break; - case RS2::Mil: - ret = "mil"; - break; - case RS2::Yard: - ret = "yd"; - break; - case RS2::Angstrom: - ret = "A"; - break; - case RS2::Nanometer: - ret = "nm"; - break; - case RS2::Micron: - ret = "�m"; - break; - case RS2::Decimeter: - ret = "dm"; - break; - case RS2::Decameter: - ret = "dam"; - break; - case RS2::Hectometer: - ret = "hm"; - break; - case RS2::Gigameter: - ret = "Gm"; - break; - case RS2::Astro: - ret = "astro"; - break; - case RS2::Lightyear: - ret = "ly"; - break; - case RS2::Parsec: - ret = "pc"; - break; - - default: - ret = ""; - break; - } - - return ret; -} - -/** - * @return a string representing the given unit (e.g. "Millimeter"). - * translated if @a t is true (the default). - */ -QString Units::unitToString(RS2::Unit u, bool t) -{ - QString ret = ""; - - switch (u) - { - case RS2::None: - ret = t ? QObject::tr("None") : QString("None"); - break; - case RS2::Inch: - ret = t ? QObject::tr("Inch") : QString("Inch"); - break; - case RS2::Foot: - ret = t ? QObject::tr("Foot") : QString("Foot"); - break; - case RS2::Mile: - ret = t ? QObject::tr("Mile") : QString("Mile"); - break; - case RS2::Millimeter: - ret = t ? QObject::tr("Millimeter") : QString("Millimeter"); - break; - case RS2::Centimeter: - ret = t ? QObject::tr("Centimeter") : QString("Centimeter"); - break; - case RS2::Meter: - ret = t ? QObject::tr("Meter") : QString("Meter"); - break; - case RS2::Kilometer: - ret = t ? QObject::tr("Kilometer") : QString("Kilometer"); - break; - case RS2::Microinch: - ret = t ? QObject::tr("Microinch") : QString("Microinch"); - break; - case RS2::Mil: - ret = t ? QObject::tr("Mil") : QString("Mil"); - break; - case RS2::Yard: - ret = t ? QObject::tr("Yard") : QString("Yard"); - break; - case RS2::Angstrom: - ret = t ? QObject::tr("Angstrom") : QString("Angstrom"); - break; - case RS2::Nanometer: - ret = t ? QObject::tr("Nanometer") : QString("Nanometer"); - break; - case RS2::Micron: - ret = t ? QObject::tr("Micron") : QString("Micron"); - break; - case RS2::Decimeter: - ret = t ? QObject::tr("Decimeter") : QString("Decimeter"); - break; - case RS2::Decameter: - ret = t ? QObject::tr("Decameter") : QString("Decameter"); - break; - case RS2::Hectometer: - ret = t ? QObject::tr("Hectometer") : QString("Hectometer"); - break; - case RS2::Gigameter: - ret = t ? QObject::tr("Gigameter") : QString("Gigameter"); - break; - case RS2::Astro: - ret = t ? QObject::tr("Astro") : QString("Astro"); - break; - case RS2::Lightyear: - ret = t ? QObject::tr("Lightyear") : QString("Lightyear"); - break; - case RS2::Parsec: - ret = t ? QObject::tr("Parsec") : QString("Parsec"); - break; - - default: - ret = ""; - break; - } - - return ret; -} - -/** - * Converts a string into a unit enum. - */ -RS2::Unit Units::stringToUnit(const QString & u) -{ - RS2::Unit ret = RS2::None; - - if (u == "None") - ret = RS2::None; - else if (u == QObject::tr("Inch")) - ret = RS2::Inch; - else if (u == QObject::tr("Foot")) - ret = RS2::Foot; - else if (u == QObject::tr("Mile")) - ret = RS2::Mile; - else if (u == QObject::tr("Millimeter")) - ret = RS2::Millimeter; - else if (u == QObject::tr("Centimeter")) - ret = RS2::Centimeter; - else if (u == QObject::tr("Meter")) - ret = RS2::Meter; - else if (u == QObject::tr("Kilometer")) - ret = RS2::Kilometer; - else if (u == QObject::tr("Microinch")) - ret = RS2::Microinch; - else if (u == QObject::tr("Mil")) - ret = RS2::Mil; - else if (u == QObject::tr("Yard")) - ret = RS2::Yard; - else if (u == QObject::tr("Angstrom")) - ret = RS2::Angstrom; - else if (u == QObject::tr("Nanometer")) - ret = RS2::Nanometer; - else if (u == QObject::tr("Micron")) - ret = RS2::Micron; - else if (u == QObject::tr("Decimeter")) - ret = RS2::Decimeter; - else if (u == QObject::tr("Decameter")) - ret = RS2::Decameter; - else if (u == QObject::tr("Hectometer")) - ret = RS2::Hectometer; - else if (u == QObject::tr("Gigameter")) - ret = RS2::Gigameter; - else if (u == QObject::tr("Astro")) - ret = RS2::Astro; - else if (u == QObject::tr("Lightyear")) - ret = RS2::Lightyear; - else if (u == QObject::tr("Parsec")) - ret = RS2::Parsec; - - return ret; -} - -/** - * @return true: the unit is metric, false: the unit is imperial. - */ -bool Units::isMetric(RS2::Unit u) -{ - if (u == RS2::Millimeter || u == RS2::Centimeter || u == RS2::Meter - || u == RS2::Kilometer || u == RS2::Angstrom || u == RS2::Nanometer - || u == RS2::Micron || u == RS2::Decimeter || u == RS2::Decameter - || u == RS2::Hectometer || u == RS2::Gigameter || u == RS2::Astro - || u == RS2::Lightyear || u == RS2::Parsec) - return true; - - return false; -} - -/** - * @return factor to convert the given unit to Millimeters. - */ -double Units::getFactorToMM(RS2::Unit u) -{ - double ret = 1.0; - - switch (u) - { - case RS2::None: - ret = 1.0; - break; - case RS2::Inch: - ret = 25.4; - break; - case RS2::Foot: - ret = 304.8; - break; - case RS2::Mile: - ret = 1609344; - break; - case RS2::Millimeter: - ret = 1.0; - break; - case RS2::Centimeter: - ret = 10; - break; - case RS2::Meter: - ret = 1000; - break; - case RS2::Kilometer: - ret = 1000000; - break; - case RS2::Microinch: - ret = 0.0000254; - break; - case RS2::Mil: - ret = 0.0254; - break; - case RS2::Yard: - ret = 914.4; - break; - case RS2::Angstrom: - ret = 0.0000001; - break; - case RS2::Nanometer: - ret = 0.000001; - break; - case RS2::Micron: - ret = 0.001; - break; - case RS2::Decimeter: - ret = 100.0; - break; - case RS2::Decameter: - ret = 10000.0; - break; - case RS2::Hectometer: - ret = 100000.0; - break; - case RS2::Gigameter: - ret = 1000000000.0; - break; - case RS2::Astro: - ret = 149600000000000.0; - break; - case RS2::Lightyear: - ret = 9460731798000000000.0; - break; - case RS2::Parsec: - ret = 30857000000000000000.0; - break; - default: - ret = 1.0; - break; - } - - return ret; -} - -/** - * Converts the given value 'val' from unit 'src' to unit 'dest'. - */ -double Units::convert(double val, RS2::Unit src, RS2::Unit dest) -{ - if (getFactorToMM(dest) > 0.0) - { - return (val * getFactorToMM(src)) / getFactorToMM(dest); - } - else - { - DEBUG->print(Debug::D_WARNING, "Units::convert: invalid factor"); - return val; - } -} - -/** - * Converts the given vector 'val' from unit 'src' to unit 'dest'. - */ -Vector Units::convert(const Vector val, RS2::Unit src, RS2::Unit dest) -{ - return Vector(convert(val.x, src, dest), convert(val.y, src, dest), convert(val.z, src, dest)); -} - -/** - * Formats the given length in the given format. - * - * @param length The length in the current unit of the drawing. - * @param format Format of the string. - * @param prec Precisision of the value (e.g. 0.001 or 1/128 = 0.0078125) - & @param showUnit Append unit to the value. - */ -QString Units::formatLinear(double length, RS2::Unit unit, RS2::LinearFormat format, - int prec, bool showUnit) -{ - QString ret; - - // unit appended to value (e.g. 'mm'): - /*QString unitString = ""; - if (showUnit) { - unitString = unitToSign(unit); -}*/ - - // Barbarian display: Show as fraction: - switch (format) - { - case RS2::Scientific: - ret = formatScientific(length, unit, prec, showUnit); - break; - - case RS2::Decimal: - ret = formatDecimal(length, unit, prec, showUnit); - break; - - case RS2::Engineering: - ret = formatEngineering(length, unit, prec, showUnit); - break; - - case RS2::Architectural: - ret = formatArchitectural(length, unit, prec, showUnit); - break; - - case RS2::Fractional: - ret = formatFractional(length, unit, prec, showUnit); - break; - - default: - DEBUG->print(Debug::D_WARNING, - "Units::formatLinear: Unknown format"); - ret = ""; - break; - } - - return ret; -} - -/** - * Formats the given length in scientific format (e.g. 2.5E7). - * - * @param length The length in the current unit of the drawing. - * @param prec Precisision of the value (e.g. 0.001 or 1/128 = 0.0078125) - & @param showUnit Append unit to the value. - */ -QString Units::formatScientific(double length, RS2::Unit unit, int prec, bool showUnit) -{ - QString ret; - - // unit appended to value (e.g. 'mm'): - QString unitString = ""; - - if (showUnit) - unitString = unitToSign(unit); - - char format[128]; - sprintf(format, "%%.%dE%%s", prec); - ret.sprintf(format, length, (const char *)unitString.toLocal8Bit()); - - return ret; -} - -/** - * Formats the given length in decimal (normal) format (e.g. 2.5). - * - * @param length The length in the current unit of the drawing. - * @param prec Precisision of the value (e.g. 0.001) - & @param showUnit Append unit to the value. - */ -QString Units::formatDecimal(double length, RS2::Unit unit, int prec, bool showUnit) -{ - QString ret; - - // unit appended to value (e.g. 'mm'): - QString unitString = ""; - - if (showUnit) - unitString = unitToSign(unit); - - ret = Math::doubleToString(length, prec); - - if (showUnit) - ret += unitString; - - return ret; -} - -/** - * Formats the given length in engineering format (e.g. 5' 4.5"). - * - * @param length The length in the current unit of the drawing. - * @param prec Precisision of the value (e.g. 0.001 or 1/128 = 0.0078125) - & @param showUnit Append unit to the value. - */ -QString Units::formatEngineering(double length, RS2::Unit /*unit*/, int prec, bool /*showUnit*/) -{ - QString ret; - - bool sign = (length < 0.0); - int feet = (int)floor(fabs(length) / 12); - double inches = fabs(length) - feet * 12; - - QString sInches = Math::doubleToString(inches, prec); - - if (sInches == "12") - { - feet++; - sInches = "0"; - } - - if (feet != 0) - { - ret.sprintf("%d'-%s\"", feet, (const char *)sInches.toLocal8Bit()); - } - else - { - ret.sprintf("%s\"", (const char *)sInches.toLocal8Bit()); - } - - if (sign) - ret = "-" + ret; - - return ret; -} - -/** - * Formats the given length in architectural format (e.g. 5' 4 1/2"). - * - * @param length The length in the current unit of the drawing. - * @param prec Precisision of the value (e.g. 0.001 or 1/128 = 0.0078125) - & @param showUnit Append unit to the value. - */ -QString Units::formatArchitectural(double length, RS2::Unit /*unit*/, int prec, bool showUnit) -{ - QString ret; - bool neg = (length < 0.0); - int feet = (int)floor(fabs(length) / 12); - double inches = fabs(length) - feet * 12; - - QString sInches = formatFractional(inches, RS2::Inch, prec, showUnit); - - if (sInches == "12") - { - feet++; - sInches = "0"; - } - - if (neg) - { - ret.sprintf("-%d'-%s\"", feet, (const char *)sInches.toLocal8Bit()); - } - else - { - ret.sprintf("%d'-%s\"", feet, (const char *)sInches.toLocal8Bit()); - } - - return ret; -} - -/** - * Formats the given length in fractional (barbarian) format (e.g. 5' 3 1/64"). - * - * @param length The length in the current unit of the drawing. - * @param unit Should be inches. - * @param prec Precisision of the value (e.g. 0.001 or 1/128 = 0.0078125) - & @param showUnit Append unit to the value. - */ -QString Units::formatFractional(double length, RS2::Unit /*unit*/, int prec, bool /*showUnit*/) -{ - QString ret; - - int num; // number of complete inches (num' 7/128") - int nominator; // number of fractions (nominator/128) - int denominator; // (4/denominator) - - // sign: - QString neg = ""; - - if (length < 0) - { - neg = "-"; - length = fabs(length); - } - - num = (int)floor(length); - - denominator = (int)Math::pow(2, prec); - nominator = Math::round((length - num) * denominator); - - // fraction rounds up to 1: - if (nominator == denominator) - { - nominator = 0; - denominator = 0; - ++num; - } - - // Simplify the fraction - if (nominator != 0 && denominator != 0) - { - int gcd = Math::findGCD(nominator, denominator); - - if (gcd != 0) - { - nominator = nominator / gcd; - denominator = denominator / gcd; - } - else - { - DEBUG->print(Debug::D_WARNING, "Units::formatFractional: invalid gcd"); - nominator = 0; - denominator = 0; - } - } - - if (num != 0 && nominator != 0) - { - ret.sprintf("%s%d %d/%d", (const char *)neg.toLocal8Bit(), num, nominator, denominator); - } - else if (nominator != 0) - { - ret.sprintf("%s%d/%d", (const char *)neg.toLocal8Bit(), nominator, denominator); - } - else if (num != 0) - { - ret.sprintf("%s%d", (const char *)neg.toLocal8Bit(), num); - } - else - { - ret.sprintf("0"); - } - - return ret; -} - -/** - * Formats the given angle with the given format. - * - * @param angle The angle (always in rad). - * @param format Format of the string. - * @param prec Precisision of the value (e.g. 0.001 or 1/128 = 0.0078125) - * - * @ret String with the formatted angle. - */ -QString Units::formatAngle(double angle, RS2::AngleFormat format, int prec) -{ - QString ret; - double value; - - switch (format) - { - case RS2::DegreesDecimal: - case RS2::DegreesMinutesSeconds: - value = Math::rad2deg(angle); - break; - case RS2::Radians: - value = angle; - break; - case RS2::Gradians: - value = Math::rad2gra(angle); - break; - default: - DEBUG->print(Debug::D_WARNING, "Units::formatAngle: Unknown Angle Unit"); - return ""; - break; - } - - switch (format) - { - case RS2::DegreesDecimal: - case RS2::Radians: - case RS2::Gradians: - ret = Math::doubleToString(value, prec); - - if (format == RS2::DegreesDecimal) - ret += QChar(0xB0); - if (format == RS2::Radians) - ret += "r"; - if (format == RS2::Gradians) - ret += "g"; - break; - - case RS2::DegreesMinutesSeconds: - { - int vDegrees, vMinutes; - double vSeconds; - QString degrees, minutes, seconds; - - vDegrees = (int)floor(value); - vMinutes = (int)floor((value - vDegrees) * 60.0); - vSeconds = (value - vDegrees - (vMinutes / 60.0)) * 3600.0; - - seconds = Math::doubleToString(vSeconds, (prec > 1 ? prec - 2 : 0)); - - if (seconds == "60") - { - seconds = "0"; - ++vMinutes; - - if (vMinutes == 60) - { - vMinutes = 0; - ++vDegrees; - } - } - - if (prec == 0 && vMinutes >= 30.0) - { - vDegrees++; - } - else if (prec == 1 && vSeconds >= 30.0) - { - vMinutes++; - } - - degrees.setNum(vDegrees); - minutes.setNum(vMinutes); - - switch (prec) - { - case 0: - ret = degrees + QChar(0xB0); - break; - case 1: - ret = degrees + QChar(0xB0) + " " + minutes + "'"; - break; - default: - ret = degrees + QChar(0xB0) + " " + minutes + "' " + seconds + "\""; - break; - } - } - break; - - default: - break; - } - - return ret; -} - -/** - * @return Size of the given paper format. - */ -Vector Units::paperFormatToSize(RS2::PaperFormat p) -{ - Vector ret(false); - - switch (p) - { - case RS2::Custom: - ret = Vector(0.0, 0.0); - break; - case RS2::Letter: - ret = Vector(215.9, 279.4); - break; - case RS2::Legal: - ret = Vector(215.9, 355.6); - break; - case RS2::Executive: - ret = Vector(190.5, 254.0); - break; - case RS2::A0: - ret = Vector(841.0, 1189.0); - break; - case RS2::A1: - ret = Vector(594.0, 841.0); - break; - case RS2::A2: - ret = Vector(420.0, 594.0); - break; - case RS2::A3: - ret = Vector(297.0, 420.0); - break; - case RS2::A4: - ret = Vector(210.0, 297.0); - break; - case RS2::A5: - ret = Vector(148.0, 210.0); - break; - case RS2::A6: - ret = Vector(105.0, 148.0); - break; - case RS2::A7: - ret = Vector(74.0, 105.0); - break; - case RS2::A8: - ret = Vector(52.0, 74.0); - break; - case RS2::A9: - ret = Vector(37.0, 52.0); - break; - /*case RS2::A10: - ret = Vector(26.0, 37.0); - break;*/ - case RS2::B0: - ret = Vector(1000.0, 1414.0); - break; - case RS2::B1: - ret = Vector(707.0, 1000.0); - break; - case RS2::B2: - ret = Vector(500.0, 707.0); - break; - case RS2::B3: - ret = Vector(353.0, 500.0); - break; - case RS2::B4: - ret = Vector(250.0, 353.0); - break; - case RS2::B5: - ret = Vector(176.0, 250.0); - break; - case RS2::B6: - ret = Vector(125.0, 176.0); - break; - case RS2::B7: - ret = Vector(88.0, 125.0); - break; - case RS2::B8: - ret = Vector(62.0, 88.0); - break; - case RS2::B9: - ret = Vector(44.0, 62.0); - break; - case RS2::B10: - ret = Vector(31.0, 44.0); - break; - /* - case RS2::C0: - ret = Vector(917.0, 1297.0); - break; - case RS2::C1: - ret = Vector(648.0, 917.0); - break; - case RS2::C2: - ret = Vector(458.0, 648.0); - break; - case RS2::C3: - ret = Vector(324.0, 458.0); - break; - case RS2::C4: - ret = Vector(229.0, 324.0); - break; - case RS2::C5: - ret = Vector(162.0, 229.0); - break; - case RS2::C6: - ret = Vector(114.0, 162.0); - break; - case RS2::C7: - ret = Vector(81.0, 114.0); - break; - case RS2::C8: - ret = Vector(57.0, 81.0); - break; - case RS2::C9: - ret = Vector(40.0, 57.0); - break; - case RS2::C10: - ret = Vector(28.0, 40.0); - break; - */ - case RS2::C5E: - ret = Vector(163.0, 229.0); - break; - case RS2::Comm10E: - ret = Vector(105.0, 241.0); - break; - case RS2::DLE: - ret = Vector(110.0, 220.0); - break; - case RS2::Folio: - ret = Vector(210.0, 330.0); - break; - //case RS2::Ledger: - // ret = Vector(432.0, 279.0); - // break; - case RS2::Tabloid: - ret = Vector(279.0, 432.0); - break; - case RS2::NPageSize: - ret = Vector(0.0, 0.0); - break; - default: - break; - } - - return ret; -} - -/** - * Gets the paper format which matches the given size. If no - * format matches, RS2::Custom is returned. - */ -RS2::PaperFormat Units::paperSizeToFormat(const Vector s) -{ - Vector ts1; - Vector ts2; - - for(int i=(int)RS2::Custom; i<=(int)RS2::NPageSize; ++i) - { - ts1 = Units::paperFormatToSize((RS2::PaperFormat)i); - ts2 = Vector(ts1.y, ts1.x); - - if (ts1.distanceTo(s) < 1.0e-4 || ts2.distanceTo(s) < 1.0e-4) - return (RS2::PaperFormat)i; - } - - return RS2::Custom; -} - -/** - * Converts a paper format to a string (e.g. for a combobox). - */ -QString Units::paperFormatToString(RS2::PaperFormat p) -{ - QString ret = ""; - - switch (p) - { - case RS2::Custom: - ret = "Custom"; - break; - case RS2::Letter: - ret = "Letter"; - break; - case RS2::Legal: - ret = "Legal"; - break; - case RS2::Executive: - ret = "Executive"; - break; - case RS2::A0: - ret = "A0"; - break; - case RS2::A1: - ret = "A1"; - break; - case RS2::A2: - ret = "A2"; - break; - case RS2::A3: - ret = "A3"; - break; - case RS2::A4: - ret = "A4"; - break; - case RS2::A5: - ret = "A5"; - break; - case RS2::A6: - ret = "A6"; - break; - case RS2::A7: - ret = "A7"; - break; - case RS2::A8: - ret = "A8"; - break; - case RS2::A9: - ret = "A9"; - break; - case RS2::B0: - ret = "B0"; - break; - case RS2::B1: - ret = "B1"; - break; - case RS2::B2: - ret = "B2"; - break; - case RS2::B3: - ret = "B3"; - break; - case RS2::B4: - ret = "B4"; - break; - case RS2::B5: - ret = "B5"; - break; - case RS2::B6: - ret = "B6"; - break; - case RS2::B7: - ret = "B7"; - break; - case RS2::B8: - ret = "B8"; - break; - case RS2::B9: - ret = "B9"; - break; - case RS2::B10: - ret = "B10"; - break; - /* - case RS2::C0: - ret = "C0"; - break; - case RS2::C1: - ret = "C1"; - break; - case RS2::C2: - ret = "C2"; - break; - case RS2::C3: - ret = "C3"; - break; - case RS2::C4: - ret = "C4"; - break; - case RS2::C5: - ret = "C5"; - break; - case RS2::C6: - ret = "C6"; - break; - case RS2::C7: - ret = "C7"; - break; - case RS2::C8: - ret = "C8"; - break; - case RS2::C9: - ret = "C9"; - break; - case RS2::C10: - ret = "C10"; - break; - */ - case RS2::C5E: - ret = "C5E"; - break; - case RS2::Comm10E: - ret = "Comm10E"; - break; - case RS2::DLE: - ret = "DLE"; - break; - case RS2::Folio: - ret = "Folio"; - break; - //case RS2::Ledger: - // ret = "Ledger"; - // break; - case RS2::Tabloid: - ret = "Tabloid"; - break; - case RS2::NPageSize: - ret = "NPageSize"; - break; - default: - break; - } - - return ret; -} - -/** - * Converts a string to a paper format. - */ -RS2::PaperFormat Units::stringToPaperFormat(const QString & p) -{ - QString ls = p.toLower(); - RS2::PaperFormat ret = RS2::Custom; - - if (p == "custom") - ret = RS2::Custom; - else if (p == "letter") - ret = RS2::Letter; - else if (p == "legal") - ret = RS2::Legal; - else if (p == "executive") - ret = RS2::Executive; - else if (p == "a0") - ret = RS2::A0; - else if (p == "a1") - ret = RS2::A1; - else if (p == "a2") - ret = RS2::A2; - else if (p == "a3") - ret = RS2::A3; - else if (p == "a4") - ret = RS2::A4; - else if (p == "a5") - ret = RS2::A5; - else if (p == "a6") - ret = RS2::A6; - else if (p == "a7") - ret = RS2::A7; - else if (p == "a8") - ret = RS2::A8; - else if (p == "a9") - ret = RS2::A9; - else if (p == "b0") - ret = RS2::B0; - else if (p == "b1") - ret = RS2::B1; - else if (p == "b2") - ret = RS2::B2; - else if (p == "b3") - ret = RS2::B3; - else if (p == "b4") - ret = RS2::B4; - else if (p == "b5") - ret = RS2::B5; - else if (p == "b6") - ret = RS2::B6; - else if (p == "b7") - ret = RS2::B7; - else if (p == "b8") - ret = RS2::B8; - else if (p == "b9") - ret = RS2::B9; - else if (p == "b10") - ret = RS2::B10; - /*else if (p=="c0") { - ret = RS2::C0; - } else if (p=="c1") { - ret = RS2::C1; - } else if (p=="c2") { - ret = RS2::C2; - } else if (p=="c3") { - ret = RS2::C3; - } else if (p=="c4") { - ret = RS2::C4; - } else if (p=="c5") { - ret = RS2::C5; - } else if (p=="c6") { - ret = RS2::C6; - } else if (p=="c7") { - ret = RS2::C7; - } else if (p=="c8") { - ret = RS2::C8; - } else if (p=="c9") { - ret = RS2::C9; - } else if (p=="c10") { - ret = RS2::C10; - }*/ - else if (p == "c5e") - ret = RS2::C5E; - else if (p == "comm10e") - ret = RS2::Comm10E; - else if (p == "dle") - ret = RS2::DLE; - else if (p == "folio") - ret = RS2::Folio; - //else if (p=="ledger") - // ret = RS2::Ledger; - else if (p == "tabloid") - ret = RS2::Tabloid; - else if (p == "npagesize") - ret = RS2::NPageSize; - - return ret; -} - -/** - * Performs some testing for the math class. - */ -void Units::test() -{ - QString s; - double v; - - /* - std::cout << "Units::test: formatLinear (decimal):\n"; - v = 0.1; - s = Units::formatLinear(v, RS2::Millimeter, RS2::Decimal, - 3, false); - std::cout << "s: " << s << "\n"; - assert(s=="0.1"); - v = 0.01; - s = Units::formatLinear(v, RS2::Millimeter, RS2::Decimal, - 3, false); - std::cout << "s: " << s << "\n"; - assert(s=="0.01"); - v = 0.001; - s = Units::formatLinear(v, RS2::Millimeter, RS2::Decimal, - 3, false); - std::cout << "s: " << s << "\n"; - assert(s=="0.001"); - v = 0.009; - s = Units::formatLinear(v, RS2::Millimeter, RS2::Decimal, - 2, false); - std::cout << "s: " << s << "\n"; - assert(s=="0.01"); - v = 0.005; - s = Units::formatLinear(v, RS2::Millimeter, RS2::Decimal, - 2, false); - std::cout << "s: " << s << "\n"; - assert(s=="0.01"); - v = 0.0049999; - s = Units::formatLinear(v, RS2::Millimeter, RS2::Decimal, - 2, false); - std::cout << "s: " << s << "\n"; - assert(s=="0"); - - v = 0.1; - s = Units::formatLinear(v, RS2::Millimeter, RS2::Decimal, - 4, true); - std::cout << "s: " << s << "\n"; - assert(s=="0.1mm"); - - - std::cout << "Units::test: formatLinear (fractional):\n"; - v = 1.2; - s = Units::formatLinear(v, RS2::Inch, RS2::Fractional, - 6, false); - std::cout << "s: " << s << "\n"; - assert(s=="1 13/64"); - - v = 1.2; - s = Units::formatLinear(v, RS2::Inch, RS2::Fractional, - 8, false); - std::cout << "s: " << s << "\n"; - assert(s=="1 51/256"); - - v = 0.2; - s = Units::formatLinear(v, RS2::Inch, RS2::Fractional, - 8, false); - std::cout << "s: " << s << "\n"; - assert(s=="51/256"); - - v = 4.5; - s = Units::formatLinear(v, RS2::Inch, RS2::Fractional, - 6, true); - std::cout << "s: " << s << "\n"; - assert(s=="4 1/2"); - - v = 0.001; - s = Units::formatLinear(v, RS2::Inch, RS2::Fractional, - 0, false); - std::cout << "s: " << s << "\n"; - assert(s=="0"); - - v = 0.01; - s = Units::formatLinear(v, RS2::Inch, RS2::Fractional, - 8, false); - std::cout << "s: " << s << "\n"; - assert(s=="3/256"); - - v = 0.0078125; - s = Units::formatLinear(v, RS2::Inch, RS2::Fractional, - 8, false); - std::cout << "s: " << s << "\n"; - assert(s=="1/128"); - - v = 0.001; - s = Units::formatLinear(v, RS2::Inch, RS2::Fractional, - 8, false); - std::cout << "s: " << s << "\n"; - assert(s=="0"); - - v = 9.9999; - s = Units::formatLinear(v, RS2::Inch, RS2::Fractional, - 6, false); - std::cout << "s: " << s << "\n"; - assert(s=="10"); - */ - - for(v=11.9999; v<12.0001; v+=0.0000001) - { - for(int prec=0; prec<=6; ++prec) - { - s = Units::formatLinear(v, RS2::Inch, RS2::Architectural, prec, true); - std::cout << "prec: " << prec << " v: " << v << " s: " << s.toAscii().data() << "\n"; - } - } - - /*for (v=0.0; v<10.0; v+=0.001) { - s = Units::formatLinear(v, RS2::Foot, RS2::Fractional, - 1.0/128.0, true); - std::cout << "v: " << v << " s: " << s << "\n"; -}*/ - - /* - std::cout << "Units::test: formatLinear (scientific):\n"; - v = 0.001; - s = Units::formatLinear(v, RS2::Millimeter, RS2::Scientific, - 0.0001, false); - std::cout << "s: " << s << "\n"; - assert(s=="1.0e-3"); - */ - - - /* - std::cout << "Units::test: formatAngle (deg / decimal):\n"; - v = 0.0261799; - s = Units::formatAngle(v, RS2::DegreesDecimal, 2); - std::cout << "s: " << s << "\n"; - assert(s=="1.5�"); - - v = 0; - s = Units::formatAngle(v, RS2::DegreesDecimal, 2); - std::cout << "s: " << s << "\n"; - assert(s=="0�"); - - v = 1.5707963; - s = Units::formatAngle(v, RS2::DegreesDecimal, 2); - std::cout << "s: " << s << "\n"; - assert(s=="90�"); - - std::cout << "Units::test: formatAngle (deg / d/m/s):\n"; - - v = 0.0260926; - s = Units::formatAngle(v, RS2::DegreesMinutesSeconds, 1); - std::cout << "s: " << s << "\n"; - assert(s=="1� 29' 42\""); - - v = 0.0261799; - s = Units::formatAngle(v, RS2::DegreesMinutesSeconds, 1); - std::cout << "s: " << s << "\n"; - assert(s=="1� 30' 0\""); - */ -}