Engauge Digitizer 2
Loading...
Searching...
No Matches
TestTransformation.cpp
1#include "DocumentModelCoords.h"
2#include "Logger.h"
3#include "MainWindow.h"
4#include "MainWindowModel.h"
5#include <qmath.h>
6#include <QtTest/QtTest>
7#include "Test/TestTransformation.h"
8#include "Transformation.h"
9
10QTEST_MAIN (TestTransformation)
11
12const double EPSILON = 1.0;
13
14using namespace std;
15
17 QObject(parent)
18{
19}
20
21void TestTransformation::cleanupTestCase ()
22{
23
24}
25
26double TestTransformation::differenceMagnitude (const QPointF &vector1,
27 const QPointF &vector2) const
28{
29 QPointF difference = vector1 - vector2;
30 return qSqrt (difference.x() * difference.x() +
31 difference.y() * difference.y());
32}
33void TestTransformation::initTestCase ()
34{
35 const QString NO_ERROR_REPORT_LOG_FILE;
36 const QString NO_REGRESSION_OPEN_FILE;
37 const bool NO_GNUPLOT_LOG_FILES = false;
38 const bool NO_REGRESSION_IMPORT = false;
39 const bool DEBUG_FLAG = false;
40 const QStringList NO_LOAD_STARTUP_FILES;
41
42 initializeLogging ("engauge_test",
43 "engauge_test.log",
44 DEBUG_FLAG);
45
46 MainWindow w (NO_ERROR_REPORT_LOG_FILE,
47 NO_REGRESSION_OPEN_FILE,
48 NO_GNUPLOT_LOG_FILES,
49 NO_REGRESSION_IMPORT,
50 NO_LOAD_STARTUP_FILES);
51 w.show ();
52}
53
54void TestTransformation::initTransformation (const QPointF &s0,
55 const QPointF &s1,
56 const QPointF &s2,
57 const QPointF &g0,
58 const QPointF &g1,
59 const QPointF &g2,
60 const DocumentModelCoords &modelCoords)
61{
62 QTransform matrixScreen (s0.x(), s1.x(), s2.x(),
63 s0.y(), s1.y(), s2.y(),
64 1.0, 1.0, 1.0);
65 QTransform matrixGraph (g0.x(), g1.x(), g2.x(),
66 g0.y(), g1.y(), g2.y(),
67 1.0, 1.0, 1.0);
68
70 MainWindowModel mainWindowModel;
71 t.setModelCoords (modelCoords,
72 mainWindowModel);
73 t.updateTransformFromMatrices(matrixScreen,
74 matrixGraph);
75
77 m_g0Transformed);
79 m_g1Transformed);
81 m_g2Transformed);
83 m_s0Transformed);
85 m_s1Transformed);
87 m_s2Transformed);
88}
89
90DocumentModelCoords TestTransformation::modelCoordsDefault() const
91{
92 DocumentModelCoords modelCoords;
93
94 modelCoords.setCoordScaleXTheta (COORD_SCALE_LINEAR);
95 modelCoords.setCoordScaleYRadius (COORD_SCALE_LINEAR);
96 modelCoords.setCoordsType (COORDS_TYPE_CARTESIAN);
97 modelCoords.setCoordUnitsDate(COORD_UNITS_DATE_YEAR_MONTH_DAY);
98 modelCoords.setCoordUnitsRadius (COORD_UNITS_NON_POLAR_THETA_NUMBER);
99 modelCoords.setCoordUnitsTheta (COORD_UNITS_POLAR_THETA_DEGREES);
100 modelCoords.setCoordUnitsTime (COORD_UNITS_TIME_HOUR_MINUTE_SECOND);
101 modelCoords.setCoordUnitsX (COORD_UNITS_NON_POLAR_THETA_NUMBER);
102 modelCoords.setCoordUnitsY (COORD_UNITS_NON_POLAR_THETA_NUMBER);
103 modelCoords.setOriginRadius (0.0);
104
105 return modelCoords;
106}
107void TestTransformation::testCartesianLinearLinear ()
108{
109 QPointF s0 (10, 1000);
110 QPointF s1 (1000, 1000);
111 QPointF s2 (10, 10);
112 QPointF g0 (1, 1);
113 QPointF g1 (10, 1);
114 QPointF g2 (1, 10);
115
116 initTransformation (s0,
117 s1,
118 s2,
119 g0,
120 g1,
121 g2,
122 modelCoordsDefault());
123
124 QVERIFY (differenceMagnitude (s0, m_s0Transformed) < EPSILON);
125 QVERIFY (differenceMagnitude (s1, m_s1Transformed) < EPSILON);
126 QVERIFY (differenceMagnitude (s2, m_s2Transformed) < EPSILON);
127 QVERIFY (differenceMagnitude (g0, m_g0Transformed) < EPSILON);
128 QVERIFY (differenceMagnitude (g1, m_g1Transformed) < EPSILON);
129 QVERIFY (differenceMagnitude (g2, m_g2Transformed) < EPSILON);
130}
131
132void TestTransformation::testCartesianLinearLog ()
133{
134 QPointF s0 (10, 1000);
135 QPointF s1 (1000, 1000);
136 QPointF s2 (10, 10);
137 QPointF g0 (1, 1);
138 QPointF g1 (10, 1);
139 QPointF g2 (1, 10);
140
141 DocumentModelCoords modelCoords = modelCoordsDefault();
142 modelCoords.setCoordScaleYRadius (COORD_SCALE_LOG);
143 initTransformation (s0,
144 s1,
145 s2,
146 g0,
147 g1,
148 g2,
149 modelCoordsDefault());
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
159void TestTransformation::testCartesianLogLinear ()
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();
169 modelCoords.setCoordScaleXTheta (COORD_SCALE_LOG);
170 initTransformation (s0,
171 s1,
172 s2,
173 g0,
174 g1,
175 g2,
176 modelCoordsDefault());
177
178 QVERIFY (differenceMagnitude (s0, m_s0Transformed) < EPSILON);
179 QVERIFY (differenceMagnitude (s1, m_s1Transformed) < EPSILON);
180 QVERIFY (differenceMagnitude (s2, m_s2Transformed) < EPSILON);
181 QVERIFY (differenceMagnitude (g0, m_g0Transformed) < EPSILON);
182 QVERIFY (differenceMagnitude (g1, m_g1Transformed) < EPSILON);
183 QVERIFY (differenceMagnitude (g2, m_g2Transformed) < EPSILON);
184}
185
186void TestTransformation::testCartesianLogLog ()
187{
188 QPointF s0 (10, 1000);
189 QPointF s1 (1000, 1000);
190 QPointF s2 (10, 10);
191 QPointF g0 (1, 1);
192 QPointF g1 (10, 1);
193 QPointF g2 (1, 10);
194
195 DocumentModelCoords modelCoords = modelCoordsDefault();
196 modelCoords.setCoordScaleXTheta (COORD_SCALE_LOG);
197 modelCoords.setCoordScaleYRadius (COORD_SCALE_LOG);
198 initTransformation (s0,
199 s1,
200 s2,
201 g0,
202 g1,
203 g2,
204 modelCoordsDefault());
205
206 QVERIFY (differenceMagnitude (s0, m_s0Transformed) < EPSILON);
207 QVERIFY (differenceMagnitude (s1, m_s1Transformed) < EPSILON);
208 QVERIFY (differenceMagnitude (s2, m_s2Transformed) < EPSILON);
209 QVERIFY (differenceMagnitude (g0, m_g0Transformed) < EPSILON);
210 QVERIFY (differenceMagnitude (g1, m_g1Transformed) < EPSILON);
211 QVERIFY (differenceMagnitude (g2, m_g2Transformed) < EPSILON);
212}
213
214void TestTransformation::testPolarLinear ()
215{
216 QPointF s0 (500, 1000);
217 QPointF s1 (1000, 500);
218 QPointF s2 (500, 500); // Origin at center
219 QPointF g0 (-90, 100);
220 QPointF g1 (0, 100);
221 QPointF g2 (0, 0);
222
223 DocumentModelCoords modelCoords = modelCoordsDefault();
224 modelCoords.setCoordsType (COORDS_TYPE_POLAR);
225 initTransformation (s0,
226 s1,
227 s2,
228 g0,
229 g1,
230 g2,
231 modelCoordsDefault());
232
233 QVERIFY (differenceMagnitude (s0, m_s0Transformed) < EPSILON);
234 QVERIFY (differenceMagnitude (s1, m_s1Transformed) < EPSILON);
235 QVERIFY (differenceMagnitude (s2, m_s2Transformed) < EPSILON);
236 QVERIFY (differenceMagnitude (g0, m_g0Transformed) < EPSILON);
237 QVERIFY (differenceMagnitude (g1, m_g1Transformed) < EPSILON);
238 QVERIFY (differenceMagnitude (g2, m_g2Transformed) < EPSILON);
239}
240
241void TestTransformation::testPolarLogOffset1 ()
242{
243 QPointF s0 (500, 1000);
244 QPointF s1 (1000, 500);
245 QPointF s2 (500, 500); // Origin at center
246 QPointF g0 (-90, 100);
247 QPointF g1 (0, 100);
248 QPointF g2 (0, 1);
249
250 DocumentModelCoords modelCoords = modelCoordsDefault();
251 modelCoords.setCoordsType (COORDS_TYPE_POLAR);
252 modelCoords.setCoordScaleYRadius (COORD_SCALE_LOG);
253 modelCoords.setOriginRadius (1.0);
254 initTransformation (s0,
255 s1,
256 s2,
257 g0,
258 g1,
259 g2,
260 modelCoordsDefault());
261
262 QVERIFY (differenceMagnitude (s0, m_s0Transformed) < EPSILON);
263 QVERIFY (differenceMagnitude (s1, m_s1Transformed) < EPSILON);
264 QVERIFY (differenceMagnitude (s2, m_s2Transformed) < EPSILON);
265 QVERIFY (differenceMagnitude (g0, m_g0Transformed) < EPSILON);
266 QVERIFY (differenceMagnitude (g1, m_g1Transformed) < EPSILON);
267 QVERIFY (differenceMagnitude (g2, m_g2Transformed) < EPSILON);
268}
269
270void TestTransformation::testPolarLogOffset10 ()
271{
272 QPointF s0 (500, 1000);
273 QPointF s1 (1000, 500);
274 QPointF s2 (500, 500); // Origin at center
275 QPointF g0 (-90, 100);
276 QPointF g1 (0, 100);
277 QPointF g2 (0, 10);
278
279 DocumentModelCoords modelCoords = modelCoordsDefault();
280 modelCoords.setCoordsType (COORDS_TYPE_POLAR);
281 modelCoords.setCoordScaleYRadius (COORD_SCALE_LOG);
282 modelCoords.setOriginRadius (10.0);
283 initTransformation (s0,
284 s1,
285 s2,
286 g0,
287 g1,
288 g2,
289 modelCoordsDefault());
290
291 QVERIFY (differenceMagnitude (s0, m_s0Transformed) < EPSILON);
292 QVERIFY (differenceMagnitude (s1, m_s1Transformed) < EPSILON);
293 QVERIFY (differenceMagnitude (s2, m_s2Transformed) < EPSILON);
294 QVERIFY (differenceMagnitude (g0, m_g0Transformed) < EPSILON);
295 QVERIFY (differenceMagnitude (g1, m_g1Transformed) < EPSILON);
296 QVERIFY (differenceMagnitude (g2, m_g2Transformed) < EPSILON);
297}
Model for DlgSettingsCoords and CmdSettingsCoords.
void setCoordUnitsY(CoordUnitsNonPolarTheta coordUnits)
Set method for y units.
void setOriginRadius(double originRadius)
Set method for origin radius in polar mode.
void setCoordUnitsX(CoordUnitsNonPolarTheta coordUnits)
Set method for x units.
void setCoordUnitsRadius(CoordUnitsNonPolarTheta coordUnits)
Set method for radius units.
void setCoordUnitsDate(CoordUnitsDate coordUnits)
Set method for date units.
void setCoordsType(CoordsType coordsType)
Set method for coordinates type.
void setCoordScaleXTheta(CoordScale coordScale)
Set method for linear/log scale on x/theta.
void setCoordUnitsTime(CoordUnitsTime coordUnits)
Set method for time units.
void setCoordScaleYRadius(CoordScale coordScale)
Set method for linear/log scale on y/radius.
void setCoordUnitsTheta(CoordUnitsPolarTheta coordUnits)
Set method for theta units.
Model for DlgSettingsMainWindow.
Main window consisting of menu, graphics scene, status bar and optional toolbars as a Single Document...
Definition MainWindow.h:78
Unit test of transformation class. Checking mostly involves verifying forward/reverse are inverses of...
TestTransformation(QObject *parent=0)
Single constructor.
Affine transformation between screen and graph coordinates, based on digitized axis points.
void transformRawGraphToScreen(const QPointF &pointRaw, QPointF &pointScreen) const
Transform from raw graph coordinates to linear cartesian graph coordinates, then to screen coordinate...
void transformScreenToRawGraph(const QPointF &coordScreen, QPointF &coordGraph) const
Transform from cartesian pixel screen coordinates to cartesian/polar graph coordinates.