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 }
void setCoordUnitsTime(CoordUnitsTime coordUnits)
Set method for time units.
Model for DlgSettingsGeneral and CmdSettingsGeneral.
void setCoordUnitsDate(CoordUnitsDate coordUnits)
Set method for date units.
void setCursorSize(int cursorSize)
Set method for effective cursor size.
void setCoordUnitsY(CoordUnitsNonPolarTheta coordUnits)
Set method for y units.
const bool NO_GNUPLOT_LOG_FILES
Definition: TestExport.cpp:29
void setCoordUnitsX(CoordUnitsNonPolarTheta coordUnits)
Set method for x units.
void setCoordScaleYRadius(CoordScale coordScale)
Set method for linear/log scale on y/radius.
void transformRawGraphToScreen(const QPointF &pointRaw, QPointF &pointScreen) const
Transform from raw graph coordinates to linear cartesian graph coordinates, then to screen coordinate...
const bool NO_REGRESSION_IMPORT
Definition: TestExport.cpp:30
const QString NO_EXTRACT_IMAGE_EXTENSION
Definition: TestExport.cpp:34
Unit test of transformation class. Checking mostly involves verifying forward/reverse are inverses of...
void initializeLogging(const QString &name, const QString &filename, bool isDebug)
Definition: Logger.cpp:21
const QStringList NO_LOAD_STARTUP_FILES
Definition: TestExport.cpp:36
const double EPSILON
Affine transformation between screen and graph coordinates, based on digitized axis points.
Model for DlgSettingsMainWindow.
const QString NO_REGRESSION_OPEN_FILE
Definition: TestExport.cpp:28
void setCoordUnitsTheta(CoordUnitsPolarTheta coordUnits)
Set method for theta units.
const bool NO_EXPORT_ONLY
Definition: TestExport.cpp:32
Model for DlgSettingsCoords and CmdSettingsCoords.
void setOriginRadius(double originRadius)
Set method for origin radius in polar mode.
const QStringList NO_COMMAND_LINE
Definition: TestExport.cpp:37
void setCoordUnitsRadius(CoordUnitsNonPolarTheta coordUnits)
Set method for radius units.
const bool NO_DROP_REGRESSION
Definition: TestExport.cpp:24
void transformScreenToRawGraph(const QPointF &coordScreen, QPointF &coordGraph) const
Transform from cartesian pixel screen coordinates to cartesian/polar graph coordinates.
const QString NO_ERROR_REPORT_LOG_FILE
Definition: TestExport.cpp:27
void setExtraPrecision(int extraPrecision)
Set method for extra digits of precision.
const bool DEBUG_FLAG
Definition: TestExport.cpp:35
Main window consisting of menu, graphics scene, status bar and optional toolbars as a Single Document...
Definition: MainWindow.h:91
void setCoordScaleXTheta(CoordScale coordScale)
Set method for linear/log scale on x/theta.
const bool NO_EXTRACT_IMAGE_ONLY
Definition: TestExport.cpp:33
void setCoordsType(CoordsType coordsType)
Set method for coordinates type.