Engauge Digitizer  2
FormatCoordsUnits.cpp
1 /******************************************************************************************************
2  * (C) 2014 markummitchell@github.com. This file is part of Engauge Digitizer, which is released *
3  * under GNU General Public License version 2 (GPLv2) or (at your option) any later version. See file *
4  * LICENSE or go to gnu.org/licenses for details. Distribution requires prior written permission. *
5  ******************************************************************************************************/
6 
7 #include "DocumentModelCoords.h"
8 #include "DocumentModelGeneral.h"
9 #include "FormatCoordsUnits.h"
10 #include "FormatCoordsUnitsStrategyNonPolarTheta.h"
11 #include "FormatCoordsUnitsStrategyPolarTheta.h"
12 #include "Logger.h"
13 #include "MainWindowModel.h"
14 #include "Transformation.h"
15 
16 const bool IS_X_THETA = true;
17 const bool IS_NOT_X_THETA = false;
18 
20 {
21  LOG4CPP_DEBUG_S ((*mainCat)) << "FormatCoordsUnits::FormatCoordsUnits";
22 }
23 
24 void FormatCoordsUnits::formattedToUnformatted (const QString &xThetaFormatted,
25  const QString &yRadiusFormatted,
26  const DocumentModelCoords &modelCoords,
27  const MainWindowModel &mainWindowModel,
28  double &xThetaUnformatted,
29  double &yRadiusUnformatted) const
30 {
31  LOG4CPP_DEBUG_S ((*mainCat)) << "FormatCoordsUnits::formattedToUnformatted";
32 
33  FormatCoordsUnitsStrategyNonPolarTheta formatNonPolarTheta;
34  FormatCoordsUnitsStrategyPolarTheta formatPolarTheta;
35 
36  if (modelCoords.coordsType() == COORDS_TYPE_CARTESIAN) {
37 
38  xThetaUnformatted = formatNonPolarTheta.formattedToUnformatted (xThetaFormatted,
39  mainWindowModel.locale(),
40  modelCoords.coordUnitsX(),
41  modelCoords.coordUnitsDate(),
42  modelCoords.coordUnitsTime());
43  yRadiusUnformatted = formatNonPolarTheta.formattedToUnformatted (yRadiusFormatted,
44  mainWindowModel.locale(),
45  modelCoords.coordUnitsY(),
46  modelCoords.coordUnitsDate(),
47  modelCoords.coordUnitsTime());
48 
49  } else {
50 
51  xThetaUnformatted = formatPolarTheta.formattedToUnformatted (xThetaFormatted,
52  mainWindowModel.locale(),
53  modelCoords.coordUnitsTheta());
54  yRadiusUnformatted = formatNonPolarTheta.formattedToUnformatted (yRadiusFormatted,
55  mainWindowModel.locale(),
56  modelCoords.coordUnitsRadius(),
57  modelCoords.coordUnitsDate(),
58  modelCoords.coordUnitsTime());
59 
60  }
61 }
62 
63 void FormatCoordsUnits::unformattedToFormatted (double xThetaUnformatted,
64  double yRadiusUnformatted,
65  const DocumentModelCoords &modelCoords,
66  const DocumentModelGeneral &modelGeneral,
67  const MainWindowModel &mainWindowModel,
68  QString &xThetaFormatted,
69  QString &yRadiusFormatted,
70  const Transformation &transformation) const
71 {
72  LOG4CPP_DEBUG_S ((*mainCat)) << "FormatCoordsUnits::unformattedToFormatted";
73 
74  FormatCoordsUnitsStrategyNonPolarTheta formatNonPolarTheta;
75  FormatCoordsUnitsStrategyPolarTheta formatPolarTheta;
76 
77  if (modelCoords.coordsType() == COORDS_TYPE_CARTESIAN) {
78 
79  xThetaFormatted = formatNonPolarTheta.unformattedToFormatted (xThetaUnformatted,
80  mainWindowModel.locale(),
81  modelCoords.coordUnitsX(),
82  modelCoords.coordUnitsDate(),
83  modelCoords.coordUnitsTime(),
84  IS_X_THETA,
85  modelGeneral,
86  transformation,
87  yRadiusUnformatted);
88  yRadiusFormatted = formatNonPolarTheta.unformattedToFormatted (yRadiusUnformatted,
89  mainWindowModel.locale(),
90  modelCoords.coordUnitsY(),
91  modelCoords.coordUnitsDate(),
92  modelCoords.coordUnitsTime(),
93  IS_NOT_X_THETA,
94  modelGeneral,
95  transformation,
96  xThetaUnformatted);
97 
98  } else {
99 
100  xThetaFormatted = formatPolarTheta.unformattedToFormatted (xThetaUnformatted,
101  mainWindowModel.locale(),
102  modelCoords.coordUnitsTheta(),
103  modelGeneral,
104  transformation,
105  yRadiusUnformatted);
106  yRadiusFormatted = formatNonPolarTheta.unformattedToFormatted (yRadiusUnformatted,
107  mainWindowModel.locale(),
108  modelCoords.coordUnitsRadius(),
109  modelCoords.coordUnitsDate(),
110  modelCoords.coordUnitsTime(),
111  IS_NOT_X_THETA,
112  modelGeneral,
113  transformation,
114  xThetaUnformatted);
115  }
116 }
Model for DlgSettingsGeneral and CmdSettingsGeneral.
CoordUnitsNonPolarTheta coordUnitsRadius() const
Get method for radius units.
double formattedToUnformatted(const QString &string, const QLocale &locale, CoordUnitsPolarTheta coordUnits) const
Convert formatted string to simple unformatted number.
void formattedToUnformatted(const QString &xThetaFormatted, const QString &yRadiusFormatted, const DocumentModelCoords &modelCoords, const MainWindowModel &mainWindowModel, double &xThetaUnformatted, double &yRadiusUnformatted) const
Convert formatted string to unformatted numeric value.
FormatCoordsUnits()
Single constructor.
CoordUnitsNonPolarTheta coordUnitsY() const
Get method for x units.
double formattedToUnformatted(const QString &string, const QLocale &locale, CoordUnitsNonPolarTheta coordUnits, CoordUnitsDate coordUnitsDate, CoordUnitsTime coordUnitsTime) const
Convert formatted string to simple unformatted number.
CoordUnitsPolarTheta coordUnitsTheta() const
Get method for theta unit.
void unformattedToFormatted(double xThetaUnformatted, double yRadiusUnformatted, const DocumentModelCoords &modelCoords, const DocumentModelGeneral &modelGeneral, const MainWindowModel &mainWindowModel, QString &xThetaFormatted, QString &yRadiusFormatted, const Transformation &transformation) const
Convert unformatted numeric value to formatted string. Transformation is used to determine best resol...
Affine transformation between screen and graph coordinates, based on digitized axis points...
CoordUnitsTime coordUnitsTime() const
Get method for time format when used.
Model for DlgSettingsMainWindow.
Format conversions between unformatted and formatted for CoordUnitsNonPolarTheta. ...
QString unformattedToFormatted(double valueUnformatted, const QLocale &locale, CoordUnitsPolarTheta coordUnits, const DocumentModelGeneral &modelGeneral, const Transformation &transformation, double valueUnformattedOther) const
Convert simple unformatted number to formatted string.
CoordUnitsDate coordUnitsDate() const
Get method for date format when used.
Model for DlgSettingsCoords and CmdSettingsCoords.
QString unformattedToFormatted(double valueUnformatted, const QLocale &locale, CoordUnitsNonPolarTheta coordUnits, CoordUnitsDate coordUnitsDate, CoordUnitsTime coordUnitsTime, bool isXTheta, const DocumentModelGeneral &modelGeneral, const Transformation &transformation, double valueUnformattedOther) const
Convert simple unformatted number to formatted string.
QLocale locale() const
Get method for locale.
CoordsType coordsType() const
Get method for coordinates type.
CoordUnitsNonPolarTheta coordUnitsX() const
Get method for x units.
Format conversions between unformatted and formatted for CoordUnitsStrategyPolarTheta.