Engauge Digitizer  2
TestTransformation.cpp
Go to the documentation of this file.
1 #include "DocumentModelCoords.h"
2 #include "DocumentModelGeneral.h"
3 #include "Logger.h"
4 #include "MainWindow.h"
5 #include "MainWindowModel.h"
6 #include <qmath.h>
7 #include <QtTest/QtTest>
9 #include "Transformation.h"
10 
11 QTEST_MAIN (TestTransformation)
12 
13 const double EPSILON = 1.0;
14 
15 using namespace std;
16 
18  QObject(parent)
19 {
20 }
21 
22 void TestTransformation::cleanupTestCase ()
23 {
24 
25 }
26 
27 double TestTransformation::differenceMagnitude (const QPointF &vector1,
28  const QPointF &vector2) const
29 {
30  QPointF difference = vector1 - vector2;
31  return qSqrt (difference.x() * difference.x() +
32  difference.y() * difference.y());
33 }
34 void TestTransformation::initTestCase ()
35 {
36  const bool NO_DROP_REGRESSION = false;
37  const QString NO_ERROR_REPORT_LOG_FILE;
38  const QString NO_REGRESSION_OPEN_FILE;
39  const bool NO_GNUPLOT_LOG_FILES = false;
40  const bool NO_REGRESSION_IMPORT = false;
41  const bool NO_RESET = false;
42  const bool NO_EXPORT_ONLY = false;
43  const bool NO_EXTRACT_IMAGE_ONLY = false;
44  const QString NO_EXTRACT_IMAGE_EXTENSION;
45  const bool DEBUG_FLAG = false;
46  const QStringList NO_LOAD_STARTUP_FILES;
47  const QStringList NO_COMMAND_LINE;
48 
49  initializeLogging ("engauge_test",
50  "engauge_test.log",
51  DEBUG_FLAG);
52 
58  NO_RESET,
64  w.show ();
65 }
66 
67 void TestTransformation::initTransformation (const QPointF &s0,
68  const QPointF &s1,
69  const QPointF &s2,
70  const QPointF &g0,
71  const QPointF &g1,
72  const QPointF &g2,
73  const DocumentModelCoords &modelCoords,
74  const DocumentModelGeneral &modelGeneral)
75 {
76  QTransform matrixScreen (s0.x(), s1.x(), s2.x(),
77  s0.y(), s1.y(), s2.y(),
78  1.0, 1.0, 1.0);
79  QTransform matrixGraph (g0.x(), g1.x(), g2.x(),
80  g0.y(), g1.y(), g2.y(),
81  1.0, 1.0, 1.0);
82 
84  MainWindowModel mainWindowModel;
85  t.setModelCoords (modelCoords,
86  modelGeneral,
87  mainWindowModel);
88  t.updateTransformFromMatrices(matrixScreen,
89  matrixGraph);
90 
92  m_g0Transformed);
94  m_g1Transformed);
96  m_g2Transformed);
98  m_s0Transformed);
100  m_s1Transformed);
102  m_s2Transformed);
103 }
104 
105 DocumentModelCoords TestTransformation::modelCoordsDefault() const
106 {
107  DocumentModelCoords modelCoords;
108 
111  modelCoords.setCoordsType (COORDS_TYPE_CARTESIAN);
118  modelCoords.setOriginRadius (0.0);
119 
120  return modelCoords;
121 }
122 
123 DocumentModelGeneral TestTransformation::modelGeneralDefault() const
124 {
125  DocumentModelGeneral modelGeneral;
126 
127  modelGeneral.setCursorSize (5);
128  modelGeneral.setExtraPrecision (1);
129 
130  return modelGeneral;
131 }
132 
133 void TestTransformation::testCartesianLinearLinear ()
134 {
135  QPointF s0 (10, 1000);
136  QPointF s1 (1000, 1000);
137  QPointF s2 (10, 10);
138  QPointF g0 (1, 1);
139  QPointF g1 (10, 1);
140  QPointF g2 (1, 10);
141 
142  initTransformation (s0,
143  s1,
144  s2,
145  g0,
146  g1,
147  g2,
148  modelCoordsDefault(),
149  modelGeneralDefault());
150 
151  QVERIFY ((differenceMagnitude (s0, m_s0Transformed) < EPSILON));
152  QVERIFY ((differenceMagnitude (s1, m_s1Transformed) < EPSILON));
153  QVERIFY ((differenceMagnitude (s2, m_s2Transformed) < EPSILON));
154  QVERIFY ((differenceMagnitude (g0, m_g0Transformed) < EPSILON));
155  QVERIFY ((differenceMagnitude (g1, m_g1Transformed) < EPSILON));
156  QVERIFY ((differenceMagnitude (g2, m_g2Transformed) < EPSILON));
157 }
158 
159 void TestTransformation::testCartesianLinearLog ()
160 {
161  QPointF s0 (10, 1000);
162  QPointF s1 (1000, 1000);
163  QPointF s2 (10, 10);
164  QPointF g0 (1, 1);
165  QPointF g1 (10, 1);
166  QPointF g2 (1, 10);
167 
168  DocumentModelCoords modelCoords = modelCoordsDefault();
170  initTransformation (s0,
171  s1,
172  s2,
173  g0,
174  g1,
175  g2,
176  modelCoordsDefault(),
177  modelGeneralDefault());
178 
179  QVERIFY ((differenceMagnitude (s0, m_s0Transformed) < EPSILON));
180  QVERIFY ((differenceMagnitude (s1, m_s1Transformed) < EPSILON));
181  QVERIFY ((differenceMagnitude (s2, m_s2Transformed) < EPSILON));
182  QVERIFY ((differenceMagnitude (g0, m_g0Transformed) < EPSILON));
183  QVERIFY ((differenceMagnitude (g1, m_g1Transformed) < EPSILON));
184  QVERIFY ((differenceMagnitude (g2, m_g2Transformed) < EPSILON));
185 }
186 
187 void TestTransformation::testCartesianLogLinear ()
188 {
189  QPointF s0 (10, 1000);
190  QPointF s1 (1000, 1000);
191  QPointF s2 (10, 10);
192  QPointF g0 (1, 1);
193  QPointF g1 (10, 1);
194  QPointF g2 (1, 10);
195 
196  DocumentModelCoords modelCoords = modelCoordsDefault();
197  modelCoords.setCoordScaleXTheta (COORD_SCALE_LOG);
198  initTransformation (s0,
199  s1,
200  s2,
201  g0,
202  g1,
203  g2,
204  modelCoordsDefault(),
205  modelGeneralDefault());
206 
207  QVERIFY ((differenceMagnitude (s0, m_s0Transformed) < EPSILON));
208  QVERIFY ((differenceMagnitude (s1, m_s1Transformed) < EPSILON));
209  QVERIFY ((differenceMagnitude (s2, m_s2Transformed) < EPSILON));
210  QVERIFY ((differenceMagnitude (g0, m_g0Transformed) < EPSILON));
211  QVERIFY ((differenceMagnitude (g1, m_g1Transformed) < EPSILON));
212  QVERIFY ((differenceMagnitude (g2, m_g2Transformed) < EPSILON));
213 }
214 
215 void TestTransformation::testCartesianLogLog ()
216 {
217  QPointF s0 (10, 1000);
218  QPointF s1 (1000, 1000);
219  QPointF s2 (10, 10);
220  QPointF g0 (1, 1);
221  QPointF g1 (10, 1);
222  QPointF g2 (1, 10);
223 
224  DocumentModelCoords modelCoords = modelCoordsDefault();
225  modelCoords.setCoordScaleXTheta (COORD_SCALE_LOG);
227  initTransformation (s0,
228  s1,
229  s2,
230  g0,
231  g1,
232  g2,
233  modelCoordsDefault(),
234  modelGeneralDefault());
235 
236  QVERIFY ((differenceMagnitude (s0, m_s0Transformed) < EPSILON));
237  QVERIFY ((differenceMagnitude (s1, m_s1Transformed) < EPSILON));
238  QVERIFY ((differenceMagnitude (s2, m_s2Transformed) < EPSILON));
239  QVERIFY ((differenceMagnitude (g0, m_g0Transformed) < EPSILON));
240  QVERIFY ((differenceMagnitude (g1, m_g1Transformed) < EPSILON));
241  QVERIFY ((differenceMagnitude (g2, m_g2Transformed) < EPSILON));
242 }
243 
244 void TestTransformation::testPolarLinear ()
245 {
246  QPointF s0 (500, 1000);
247  QPointF s1 (1000, 500);
248  QPointF s2 (500, 500); // Origin at center
249  QPointF g0 (-90, 100);
250  QPointF g1 (0, 100);
251  QPointF g2 (0, 0);
252 
253  DocumentModelCoords modelCoords = modelCoordsDefault();
254  modelCoords.setCoordsType (COORDS_TYPE_POLAR);
255  initTransformation (s0,
256  s1,
257  s2,
258  g0,
259  g1,
260  g2,
261  modelCoordsDefault(),
262  modelGeneralDefault());
263 
264  QVERIFY ((differenceMagnitude (s0, m_s0Transformed) < EPSILON));
265  QVERIFY ((differenceMagnitude (s1, m_s1Transformed) < EPSILON));
266  QVERIFY ((differenceMagnitude (s2, m_s2Transformed) < EPSILON));
267  QVERIFY ((differenceMagnitude (g0, m_g0Transformed) < EPSILON));
268  QVERIFY ((differenceMagnitude (g1, m_g1Transformed) < EPSILON));
269  QVERIFY ((differenceMagnitude (g2, m_g2Transformed) < EPSILON));
270 }
271 
272 void TestTransformation::testPolarLogOffset1 ()
273 {
274  QPointF s0 (500, 1000);
275  QPointF s1 (1000, 500);
276  QPointF s2 (500, 500); // Origin at center
277  QPointF g0 (-90, 100);
278  QPointF g1 (0, 100);
279  QPointF g2 (0, 1);
280 
281  DocumentModelCoords modelCoords = modelCoordsDefault();
282  modelCoords.setCoordsType (COORDS_TYPE_POLAR);
284  modelCoords.setOriginRadius (1.0);
285  initTransformation (s0,
286  s1,
287  s2,
288  g0,
289  g1,
290  g2,
291  modelCoordsDefault(),
292  modelGeneralDefault());
293 
294  QVERIFY ((differenceMagnitude (s0, m_s0Transformed) < EPSILON));
295  QVERIFY ((differenceMagnitude (s1, m_s1Transformed) < EPSILON));
296  QVERIFY ((differenceMagnitude (s2, m_s2Transformed) < EPSILON));
297  QVERIFY ((differenceMagnitude (g0, m_g0Transformed) < EPSILON));
298  QVERIFY ((differenceMagnitude (g1, m_g1Transformed) < EPSILON));
299  QVERIFY ((differenceMagnitude (g2, m_g2Transformed) < EPSILON));
300 }
301 
302 void TestTransformation::testPolarLogOffset10 ()
303 {
304  QPointF s0 (500, 1000);
305  QPointF s1 (1000, 500);
306  QPointF s2 (500, 500); // Origin at center
307  QPointF g0 (-90, 100);
308  QPointF g1 (0, 100);
309  QPointF g2 (0, 10);
310 
311  DocumentModelCoords modelCoords = modelCoordsDefault();
312  modelCoords.setCoordsType (COORDS_TYPE_POLAR);
314  modelCoords.setOriginRadius (10.0);
315  initTransformation (s0,
316  s1,
317  s2,
318  g0,
319  g1,
320  g2,
321  modelCoordsDefault(),
322  modelGeneralDefault());
323 
324  QVERIFY ((differenceMagnitude (s0, m_s0Transformed) < EPSILON));
325  QVERIFY ((differenceMagnitude (s1, m_s1Transformed) < EPSILON));
326  QVERIFY ((differenceMagnitude (s2, m_s2Transformed) < EPSILON));
327  QVERIFY ((differenceMagnitude (g0, m_g0Transformed) < EPSILON));
328  QVERIFY ((differenceMagnitude (g1, m_g1Transformed) < EPSILON));
329  QVERIFY ((differenceMagnitude (g2, m_g2Transformed) < EPSILON));
330 }
EPSILON
const double EPSILON
Definition: TestTransformation.cpp:13
NO_REGRESSION_OPEN_FILE
const QString NO_REGRESSION_OPEN_FILE
Definition: TestExport.cpp:28
COORD_SCALE_LOG
Definition: CoordScale.h:16
NO_EXPORT_ONLY
const bool NO_EXPORT_ONLY
Definition: TestExport.cpp:32
COORD_SCALE_LINEAR
Definition: CoordScale.h:15
initializeLogging
void initializeLogging(const QString &name, const QString &filename, bool isDebug)
Definition: Logger.cpp:21
DocumentModelCoords::setCoordUnitsDate
void setCoordUnitsDate(CoordUnitsDate coordUnits)
Set method for date units.
Definition: DocumentModelCoords.cpp:241
NO_COMMAND_LINE
const QStringList NO_COMMAND_LINE
Definition: TestExport.cpp:37
DocumentModelCoords::setCoordScaleXTheta
void setCoordScaleXTheta(CoordScale coordScale)
Set method for linear/log scale on x/theta.
Definition: DocumentModelCoords.cpp:226
DocumentModelGeneral.h
MainWindowModel.h
COORD_UNITS_POLAR_THETA_DEGREES
Definition: CoordUnitsPolarTheta.h:14
Transformation::transformRawGraphToScreen
void transformRawGraphToScreen(const QPointF &pointRaw, QPointF &pointScreen) const
Transform from raw graph coordinates to linear cartesian graph coordinates, then to screen coordinate...
Definition: Transformation.cpp:434
NO_DROP_REGRESSION
const bool NO_DROP_REGRESSION
Definition: TestExport.cpp:24
NO_ERROR_REPORT_LOG_FILE
const QString NO_ERROR_REPORT_LOG_FILE
Definition: TestExport.cpp:27
Transformation
Affine transformation between screen and graph coordinates, based on digitized axis points.
Definition: Transformation.h:30
COORDS_TYPE_POLAR
Definition: CoordsType.h:16
DocumentModelCoords::setCoordScaleYRadius
void setCoordScaleYRadius(CoordScale coordScale)
Set method for linear/log scale on y/radius.
Definition: DocumentModelCoords.cpp:231
DocumentModelCoords::setOriginRadius
void setOriginRadius(double originRadius)
Set method for origin radius in polar mode.
Definition: DocumentModelCoords.cpp:271
DocumentModelCoords::setCoordUnitsX
void setCoordUnitsX(CoordUnitsNonPolarTheta coordUnits)
Set method for x units.
Definition: DocumentModelCoords.cpp:261
COORD_UNITS_TIME_HOUR_MINUTE_SECOND
Definition: CoordUnitsTime.h:17
MainWindowModel
Model for DlgSettingsMainWindow.
Definition: MainWindowModel.h:29
DEBUG_FLAG
const bool DEBUG_FLAG
Definition: TestExport.cpp:35
Transformation.h
DocumentModelGeneral::setExtraPrecision
void setExtraPrecision(int extraPrecision)
Set method for extra digits of precision.
Definition: DocumentModelGeneral.cpp:122
DocumentModelGeneral
Model for DlgSettingsGeneral and CmdSettingsGeneral.
Definition: DocumentModelGeneral.h:15
COORD_UNITS_NON_POLAR_THETA_NUMBER
Definition: CoordUnitsNonPolarTheta.h:17
MainWindow
Main window consisting of menu, graphics scene, status bar and optional toolbars as a Single Document...
Definition: MainWindow.h:90
DocumentModelCoords::setCoordUnitsY
void setCoordUnitsY(CoordUnitsNonPolarTheta coordUnits)
Set method for y units.
Definition: DocumentModelCoords.cpp:266
Logger.h
DocumentModelCoords::setCoordUnitsTheta
void setCoordUnitsTheta(CoordUnitsPolarTheta coordUnits)
Set method for theta units.
Definition: DocumentModelCoords.cpp:251
COORDS_TYPE_CARTESIAN
Definition: CoordsType.h:15
NO_EXTRACT_IMAGE_ONLY
const bool NO_EXTRACT_IMAGE_ONLY
Definition: TestExport.cpp:33
COORD_UNITS_DATE_YEAR_MONTH_DAY
Definition: CoordUnitsDate.h:18
DocumentModelCoords::setCoordUnitsRadius
void setCoordUnitsRadius(CoordUnitsNonPolarTheta coordUnits)
Set method for radius units.
Definition: DocumentModelCoords.cpp:246
DocumentModelGeneral::setCursorSize
void setCursorSize(int cursorSize)
Set method for effective cursor size.
Definition: DocumentModelGeneral.cpp:117
TestTransformation
Unit test of transformation class. Checking mostly involves verifying forward/reverse are inverses of...
Definition: TestTransformation.h:10
DocumentModelCoords::setCoordsType
void setCoordsType(CoordsType coordsType)
Set method for coordinates type.
Definition: DocumentModelCoords.cpp:236
MainWindow.h
NO_GNUPLOT_LOG_FILES
const bool NO_GNUPLOT_LOG_FILES
Definition: TestExport.cpp:29
Transformation::transformScreenToRawGraph
void transformScreenToRawGraph(const QPointF &coordScreen, QPointF &coordGraph) const
Transform from cartesian pixel screen coordinates to cartesian/polar graph coordinates.
Definition: Transformation.cpp:453
TestTransformation.h
DocumentModelCoords::setCoordUnitsTime
void setCoordUnitsTime(CoordUnitsTime coordUnits)
Set method for time units.
Definition: DocumentModelCoords.cpp:256
NO_REGRESSION_IMPORT
const bool NO_REGRESSION_IMPORT
Definition: TestExport.cpp:30
DocumentModelCoords
Model for DlgSettingsCoords and CmdSettingsCoords.
Definition: DocumentModelCoords.h:19
DocumentModelCoords.h
NO_LOAD_STARTUP_FILES
const QStringList NO_LOAD_STARTUP_FILES
Definition: TestExport.cpp:36
NO_EXTRACT_IMAGE_EXTENSION
const QString NO_EXTRACT_IMAGE_EXTENSION
Definition: TestExport.cpp:34