static std::string getUnitString(const Base::Unit & unit) { std::vector<std::string> numerator; std::vector<std::string> denominator; const Base::UnitSignature & sig = unit.getSignature(); // Nominator appendUnit(sig.Length, true, "mm", numerator); appendUnit(sig.Mass, true, "kg", numerator); appendUnit(sig.Time, true, "s", numerator); appendUnit(sig.ElectricCurrent, true, "A", numerator); appendUnit(sig.ThermodynamicTemperature, true, "K", numerator); appendUnit(sig.AmountOfSubstance, true, "mol", numerator); appendUnit(sig.LuminoseIntensity, true, "cd", numerator); appendUnit(sig.Angle, true, "deg", numerator); // Denominator appendUnit(sig.Length, false, "mm", denominator); appendUnit(sig.Mass, false, "kg", denominator); appendUnit(sig.Time, false, "s", denominator); appendUnit(sig.ElectricCurrent, false, "A", denominator); appendUnit(sig.ThermodynamicTemperature, false, "K", denominator); appendUnit(sig.AmountOfSubstance, false, "mol", denominator); appendUnit(sig.LuminoseIntensity, false, "cd", denominator); appendUnit(sig.Angle, false, "deg", denominator); std::string unitStr; if (numerator.size() > 0) { for (std::size_t i = 0; i < numerator.size(); ++i) { if (i > 0) unitStr += "*"; unitStr += numerator[i]; } } if (denominator.size() > 0) { if (numerator.size() == 0) unitStr = "1"; unitStr += "/"; if (denominator.size() > 1) unitStr += "("; for (std::size_t i = 0; i < denominator.size(); ++i) { if (i > 0) unitStr += "*"; unitStr += denominator[i]; } if (denominator.size() > 1) unitStr += ")"; } return unitStr; }
Base::Quantity UnitsSchemaInternal::schemaPrefUnit(const Base::Unit &unit,QString &outUnitString) { if(unit == Unit::Length){ outUnitString = QString::fromAscii("mm"); return Base::Quantity(1.0,Unit::Length); }else{ outUnitString = QString::fromAscii(unit.getString().c_str()); return Base::Quantity(1,unit); } }