Engauge Digitizer 2
Loading...
Searching...
No Matches
TestTransformation.cpp
Go to the documentation of this file.
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
12
13const double EPSILON = 1.0;
14
16
18 QObject(parent)
19{
20}
21
22void TestTransformation::cleanupTestCase ()
23{
24
25}
26
27double TestTransformation::differenceMagnitude (const QPointF &vector1,
28 const QPointF &vector2) const
29{
31 return qSqrt (difference.x() * difference.x() +
32 difference.y() * difference.y());
33}
34void TestTransformation::initTestCase ()
35{
36 const bool NO_DROP_REGRESSION = false;
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;
45 const bool DEBUG_FLAG = false;
48
49 initializeLogging ("engauge_test",
50 "engauge_test.log",
52
64 w.show ();
65}
66
67void 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
85 t.setModelCoords (modelCoords,
86 modelGeneral,
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
105DocumentModelCoords TestTransformation::modelCoordsDefault() const
106{
107 DocumentModelCoords modelCoords;
108
118 modelCoords.setOriginRadius (0.0);
119
120 return modelCoords;
121}
122
123DocumentModelGeneral TestTransformation::modelGeneralDefault() const
124{
125 DocumentModelGeneral modelGeneral;
126
127 modelGeneral.setCursorSize (5);
128 modelGeneral.setExtraPrecision (1);
129
130 return modelGeneral;
131}
132
133void 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
159void 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
187void 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();
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
215void 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();
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
244void 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
272void 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
302void 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}
@ COORD_SCALE_LINEAR
Definition CoordScale.h:13
@ COORD_SCALE_LOG
Definition CoordScale.h:14
@ COORD_UNITS_DATE_YEAR_MONTH_DAY
@ COORD_UNITS_NON_POLAR_THETA_NUMBER
@ COORD_UNITS_POLAR_THETA_DEGREES
@ COORD_UNITS_TIME_HOUR_MINUTE_SECOND
@ COORDS_TYPE_POLAR
Definition CoordsType.h:14
@ COORDS_TYPE_CARTESIAN
Definition CoordsType.h:13
const int INNER_RADIUS_MIN
const double EPSILON
void initializeLogging(const QString &name, const QString &filename, bool isDebug)
Definition Logger.cpp:21
const bool NO_EXPORT_ONLY
const QStringList NO_COMMAND_LINE
const QString NO_EXTRACT_IMAGE_EXTENSION
const QString NO_ERROR_REPORT_LOG_FILE
const bool NO_GNUPLOT_LOG_FILES
const QString NO_REGRESSION_OPEN_FILE
const QStringList NO_LOAD_STARTUP_FILES
const bool NO_REGRESSION_IMPORT
const bool NO_EXTRACT_IMAGE_ONLY
const bool NO_DROP_REGRESSION
const bool DEBUG_FLAG
const double EPSILON
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 DlgSettingsGeneral and CmdSettingsGeneral.
void setCursorSize(int cursorSize)
Set method for effective cursor size.
void setExtraPrecision(int extraPrecision)
Set method for extra digits of precision.
Model for DlgSettingsMainWindow.
Main window consisting of menu, graphics scene, status bar and optional toolbars as a Single Document...
Definition MainWindow.h:92
Unit test of transformation class. Checking mostly involves verifying forward/reverse are inverses of...
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.