void FormatCoordsUnits::formattedToUnformatted (const QString &xThetaFormatted, const QString &yRadiusFormatted, const DocumentModelCoords &modelCoords, double &xThetaUnformatted, double &yRadiusUnformatted) const { LOG4CPP_DEBUG_S ((*mainCat)) << "FormatCoordsUnits::formattedToUnformatted"; FormatCoordsUnitsStrategyNonPolarTheta formatNonPolarTheta; FormatCoordsUnitsStrategyPolarTheta formatPolarTheta; if (modelCoords.coordsType() == COORDS_TYPE_CARTESIAN) { xThetaUnformatted = formatNonPolarTheta.formattedToUnformatted (xThetaFormatted, modelCoords.coordUnitsX(), modelCoords.coordUnitsDate(), modelCoords.coordUnitsTime()); yRadiusUnformatted = formatNonPolarTheta.formattedToUnformatted (yRadiusFormatted, modelCoords.coordUnitsY(), modelCoords.coordUnitsDate(), modelCoords.coordUnitsTime()); } else { xThetaUnformatted = formatPolarTheta.formattedToUnformatted (xThetaFormatted, modelCoords.coordUnitsTheta()); yRadiusUnformatted = formatNonPolarTheta.formattedToUnformatted (yRadiusFormatted, modelCoords.coordUnitsRadius(), modelCoords.coordUnitsDate(), modelCoords.coordUnitsTime()); } }
void FormatCoordsUnits::unformattedToFormatted (double xThetaUnformatted, double yRadiusUnformatted, const DocumentModelCoords &modelCoords, QString &xThetaFormatted, QString &yRadiusFormatted, const Transformation &transformation) const { LOG4CPP_DEBUG_S ((*mainCat)) << "FormatCoordsUnits::unformattedToFormatted"; FormatCoordsUnitsStrategyNonPolarTheta formatNonPolarTheta; FormatCoordsUnitsStrategyPolarTheta formatPolarTheta; if (modelCoords.coordsType() == COORDS_TYPE_CARTESIAN) { xThetaFormatted = formatNonPolarTheta.unformattedToFormatted (xThetaUnformatted, modelCoords.coordUnitsX(), modelCoords.coordUnitsDate(), modelCoords.coordUnitsTime(), IS_X_THETA, transformation, yRadiusUnformatted); yRadiusFormatted = formatNonPolarTheta.unformattedToFormatted (yRadiusUnformatted, modelCoords.coordUnitsY(), modelCoords.coordUnitsDate(), modelCoords.coordUnitsTime(), IS_NOT_X_THETA, transformation, xThetaUnformatted); } else { xThetaFormatted = formatPolarTheta.unformattedToFormatted (xThetaUnformatted, modelCoords.coordUnitsTheta(), transformation, yRadiusUnformatted); yRadiusFormatted = formatNonPolarTheta.unformattedToFormatted (yRadiusUnformatted, modelCoords.coordUnitsRadius(), modelCoords.coordUnitsDate(), modelCoords.coordUnitsTime(), IS_NOT_X_THETA, transformation, xThetaUnformatted); } }
QPointF Transformation::cartesianFromCartesianOrPolar (const DocumentModelCoords &modelCoords, const QPointF &posGraphIn) { // Initialize assuming input coordinates are already cartesian QPointF posGraphCartesian = posGraphIn; if (modelCoords.coordsType() == COORDS_TYPE_POLAR) { // Input coordinates are polar so convert them double angleRadians = 0; // Initialized to prevent compiler warning switch (modelCoords.coordUnitsTheta()) { case COORD_UNITS_POLAR_THETA_DEGREES: case COORD_UNITS_POLAR_THETA_DEGREES_MINUTES: case COORD_UNITS_POLAR_THETA_DEGREES_MINUTES_SECONDS: case COORD_UNITS_POLAR_THETA_DEGREES_MINUTES_SECONDS_NSEW: angleRadians = posGraphIn.x () * PI / 180.0; break; case COORD_UNITS_POLAR_THETA_GRADIANS: angleRadians = posGraphIn.x () * PI / 200.0; break; case COORD_UNITS_POLAR_THETA_RADIANS: angleRadians = posGraphIn.x (); break; case COORD_UNITS_POLAR_THETA_TURNS: angleRadians = posGraphIn.x () * 2.0 * PI; break; default: ENGAUGE_ASSERT (false); } double radius = posGraphIn.y (); posGraphCartesian.setX (radius * cos (angleRadians)); posGraphCartesian.setY (radius * sin (angleRadians)); } return posGraphCartesian; }
QPointF Transformation::cartesianOrPolarFromCartesian (const DocumentModelCoords &modelCoords, const QPointF &posGraphIn) { // Initialize assuming output coordinates are to be cartesian QPointF posGraphCartesianOrPolar = posGraphIn; if (modelCoords.coordsType() == COORDS_TYPE_POLAR) { // Output coordinates are to be polar so convert them double angleRadians = qAtan2 (posGraphIn.y (), posGraphIn.x ()); switch (modelCoords.coordUnitsTheta()) { case COORD_UNITS_POLAR_THETA_DEGREES: case COORD_UNITS_POLAR_THETA_DEGREES_MINUTES: case COORD_UNITS_POLAR_THETA_DEGREES_MINUTES_SECONDS: case COORD_UNITS_POLAR_THETA_DEGREES_MINUTES_SECONDS_NSEW: posGraphCartesianOrPolar.setX (angleRadians * 180.0 / PI); break; case COORD_UNITS_POLAR_THETA_GRADIANS: posGraphCartesianOrPolar.setX (angleRadians * 200.0 / PI); break; case COORD_UNITS_POLAR_THETA_RADIANS: posGraphCartesianOrPolar.setX (angleRadians); break; case COORD_UNITS_POLAR_THETA_TURNS: posGraphCartesianOrPolar.setX (angleRadians / 2.0 / PI); break; default: ENGAUGE_ASSERT (false); } double radius = qSqrt (posGraphIn.x () * posGraphIn.x () + posGraphIn.y () * posGraphIn.y ()); posGraphCartesianOrPolar.setY (radius); } return posGraphCartesianOrPolar; }