Engauge Digitizer 2
Loading...
Searching...
No Matches
CoordSystem.cpp
Go to the documentation of this file.
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
10#include "CallbackNextOrdinal.h"
12#include "CoordSystem.h"
13#include "Curve.h"
14#include "CurvesGraphs.h"
15#include "CurveStyles.h"
16#include "DocumentSerialize.h"
17#include "EngaugeAssert.h"
18#include "EnumsToQt.h"
19#include <iostream>
20#include "Logger.h"
21#include "OrdinalGenerator.h"
22#include "Point.h"
23#include <QByteArray>
24#include <QDataStream>
25#include <QDebug>
26#include <QFile>
27#include <QImage>
28#include <qmath.h>
29#include <QtToString.h>
30#include <QXmlStreamReader>
31#include <QXmlStreamWriter>
32#include "SettingsForGraph.h"
33#include "Transformation.h"
34#include "Version.h"
35#include "Xml.h"
36
37const int FOUR_BYTES = 4;
38
40 m_curveAxes (new Curve (AXIS_CURVE_NAME,
41 ColorFilterSettings::defaultFilter (),
42 CurveStyle (LineStyle::defaultAxesCurve(),
43 PointStyle::defaultAxesCurve ())))
44{
45 LOG4CPP_INFO_S ((*mainCat)) << "CoordSystem::CoordSystem";
46
47 SettingsForGraph settingsForGraph;
48
49 // Create one curve, or as many curve as specified in the configuration file, whichever is greater
50 for (int indexOneBased = 1; indexOneBased <= settingsForGraph.numberOfCurvesForImport (); indexOneBased++) {
51
52 QString curveName = settingsForGraph.defaultCurveName (indexOneBased,
54 m_curvesGraphs.addGraphCurveAtEnd (Curve (curveName,
57 PointStyle::defaultGraphCurve (m_curvesGraphs.numCurves ()))));
58
59 resetSelectedCurveNameIfNecessary ();
60 }
61}
62
64{
65 delete m_curveAxes;
66}
67
68void CoordSystem::addGraphCurveAtEnd (const QString &curveName)
69{
70 m_curvesGraphs.addGraphCurveAtEnd (Curve (curveName,
73 PointStyle::defaultGraphCurve(m_curvesGraphs.numCurves()))));
74
75 resetSelectedCurveNameIfNecessary ();
76}
77
79 const QPointF &posGraph,
80 QString &identifier,
81 double ordinal,
82 bool isXOnly)
83{
85 posScreen,
86 posGraph,
87 ordinal,
88 isXOnly);
89 m_curveAxes->addPoint (point);
90
91 identifier = point.identifier();
92
93 LOG4CPP_INFO_S ((*mainCat)) << "CoordSystem::addPointAxisWithGeneratedIdentifier"
94 << " ordinal=" << ordinal
95 << " posScreen=" << QPointFToString (posScreen).toLatin1 ().data ()
96 << " posGraph=" << QPointFToString (posGraph).toLatin1 ().data ()
97 << " identifier=" << identifier.toLatin1 ().data ();
98}
99
101 const QPointF &posGraph,
102 const QString &identifier,
103 double ordinal,
104 bool isXOnly)
105{
106 Point point (AXIS_CURVE_NAME,
107 identifier,
108 posScreen,
109 posGraph,
110 ordinal,
111 isXOnly);
112 m_curveAxes->addPoint (point);
113
114 LOG4CPP_INFO_S ((*mainCat)) << "CoordSystem::addPointAxisWithSpecifiedIdentifier"
115 << " ordinal=" << ordinal
116 << " posScreen=" << QPointFToString (posScreen).toLatin1 ().data ()
117 << " posGraph=" << QPointFToString (posGraph).toLatin1 ().data ()
118 << " identifier=" << identifier.toLatin1 ().data ();
119}
120
122 const QPointF &posScreen,
123 QString &identifier,
124 double ordinal)
125{
126 Point point (curveName,
127 posScreen,
128 ordinal);
129 m_curvesGraphs.addPoint (point);
130
131 identifier = point.identifier();
132
133 LOG4CPP_INFO_S ((*mainCat)) << "CoordSystem::addPointGraphWithGeneratedIdentifier"
134 << " ordinal=" << ordinal
135 << " posScreen=" << QPointFToString (posScreen).toLatin1 ().data ()
136 << " identifier=" << identifier.toLatin1 ().data ();
137}
138
140 const QPointF &posScreen,
141 const QString &identifier,
142 double ordinal)
143{
144 Point point (curveName,
145 identifier,
146 posScreen,
147 ordinal);
148 m_curvesGraphs.addPoint (point);
149
150 LOG4CPP_INFO_S ((*mainCat)) << "CoordSystem::addPointGraphWithSpecifiedIdentifier"
151 << " ordinal=" << ordinal
152 << " posScreen=" << QPointFToString (posScreen).toLatin1 ().data ()
153 << " identifier=" << identifier.toLatin1 ().data ();
154}
155
157{
159
160 Functor2wRet<const QString &, const Point &, CallbackSearchReturn> ftorWithCallback = functor_ret (ftor,
162
163 curvesGraphs.iterateThroughCurvesPoints (ftorWithCallback);
164}
165
166bool CoordSystem::bytesIndicatePreVersion6 (const QByteArray &bytes) const
167{
168 QByteArray preVersion6MagicNumber;
169 preVersion6MagicNumber.resize (FOUR_BYTES);
170
171 // Windows compiler gives warning if 0x## is used instead of '\x##' below
172 preVersion6MagicNumber[0] = '\x00';
173 preVersion6MagicNumber[1] = '\x00';
174 preVersion6MagicNumber[2] = '\xCA';
175 preVersion6MagicNumber[3] = '\xFE';
176
177 return (bytes == preVersion6MagicNumber);
178}
179
180void CoordSystem::checkAddPointAxis (const QPointF &posScreen,
181 const QPointF &posGraph,
182 bool &isError,
183 QString &errorMessage,
184 bool isXOnly,
185 DocumentAxesPointsRequired documentAxesPointsRequired)
186{
187 LOG4CPP_INFO_S ((*mainCat)) << "CoordSystem::checkAddPointAxis"
188 << " posScreen=" << QPointFToString (posScreen).toLatin1 ().data ()
189 << " posGraph=" << QPointFToString (posGraph).toLatin1 ().data ();
190
191 CallbackCheckAddPointAxis ftor (m_modelCoords,
192 posScreen,
193 posGraph,
194 documentAxesPointsRequired,
195 isXOnly);
196
197 Functor2wRet<const QString &, const Point &, CallbackSearchReturn> ftorWithCallback = functor_ret (ftor,
199 m_curveAxes->iterateThroughCurvePoints (ftorWithCallback);
200
201 isError = ftor.isError ();
202 errorMessage = ftor.errorMessage ();
203}
204
205void CoordSystem::checkEditPointAxis (const QString &pointIdentifier,
206 const QPointF &posScreen,
207 const QPointF &posGraph,
208 bool &isError,
209 QString &errorMessage,
210 DocumentAxesPointsRequired documentAxesPointsRequired)
211{
212 LOG4CPP_INFO_S ((*mainCat)) << "CoordSystem::checkEditPointAxis"
213 << " posGraph=" << QPointFToString (posGraph).toLatin1 ().data ();
214
215 CallbackCheckEditPointAxis ftor (m_modelCoords,
216 pointIdentifier,
217 posScreen,
218 posGraph,
219 documentAxesPointsRequired);
220
221 Functor2wRet<const QString &, const Point &, CallbackSearchReturn> ftorWithCallback = functor_ret (ftor,
223 m_curveAxes->iterateThroughCurvePoints (ftorWithCallback);
224
225 isError = ftor.isError ();
226 errorMessage = ftor.errorMessage ();
227}
228
230{
231 ENGAUGE_CHECK_PTR (m_curveAxes);
232
233 return *m_curveAxes;
234}
235
236Curve *CoordSystem::curveForCurveName (const QString &curveName)
237{
238 if (curveName == AXIS_CURVE_NAME) {
239
240 return m_curveAxes;
241
242 } else {
243
244 return m_curvesGraphs.curveForCurveName (curveName);
245
246 }
247}
248
249const Curve *CoordSystem::curveForCurveName (const QString &curveName) const
250{
251 if (curveName == AXIS_CURVE_NAME) {
252
253 return m_curveAxes;
254
255 } else {
256
257 return m_curvesGraphs.curveForCurveName (curveName);
258
259 }
260}
261
263{
264 return m_curvesGraphs;
265}
266
268{
269 return m_curvesGraphs.curvesGraphsNames();
270}
271
272int CoordSystem::curvesGraphsNumPoints(const QString &curveName) const
273{
274 return m_curvesGraphs.curvesGraphsNumPoints(curveName);
275}
276
277void CoordSystem::editPointAxis (const QPointF &posGraph,
278 const QString &identifier)
279{
280 LOG4CPP_INFO_S ((*mainCat)) << "CoordSystem::editPointAxis"
281 << " posGraph=(" << posGraph.x () << ", " << posGraph.y () << ") identifier="
282 << " identifier=" << identifier.toLatin1 ().data ();
283
284 m_curveAxes->editPointAxis (posGraph,
285 identifier);
286}
287
289 bool isY,
290 double x,
291 double y,
292 const QStringList &identifiers,
293 const Transformation &transformation)
294{
295 LOG4CPP_INFO_S ((*mainCat)) << "CoordSystem::editPointGraph posGraph=("
296 << " x=" << (isX ? QString::number (x).toLatin1().data() : "")
297 << " y=" << (isY ? QString::number (y).toLatin1().data() : "")
298 << ") identifiers=" << identifiers.join(" ").toLatin1 ().data ();
299
300 m_curvesGraphs.editPointGraph (isX,
301 isY,
302 x,
303 y,
304 identifiers,
305 transformation);
306}
307
308void CoordSystem::initializeUnsetGridRemovalFromGridDisplay (double version)
309{
310 // In issue #273 a broken dig file was encountered with grid removal values that were apparently
311 // corrupted, from version 4.1. This code was inserted to accomodate that file and other files presumably having
312 // the same issue. Newer versions are assumed to be properly initialized, and this code is not applied
313 // so it does not interfere with properly set values
314
315 if (version < 5) {
316
317 // Most reliable indicator of a problem is very unrealistic values for counts
318 if (m_modelGridRemoval.countX () < 2 ||
319 m_modelGridRemoval.countY () < 2 ||
320 m_modelGridRemoval.countX () > 100 ||
321 m_modelGridRemoval.countY () > 100) {
322
323 // Problem found. Prevent issues later by copying values from m_modelGridDisplay
324 m_modelGridRemoval.setStartX (m_modelGridDisplay.startX ());
325 m_modelGridRemoval.setStartY (m_modelGridDisplay.startY ());
326 m_modelGridRemoval.setStepX (m_modelGridDisplay.stepX ());
327 m_modelGridRemoval.setStepY (m_modelGridDisplay.stepY ());
328 m_modelGridRemoval.setStopX (m_modelGridDisplay.stopX ());
329 m_modelGridRemoval.setStopY (m_modelGridDisplay.stopY ());
330 m_modelGridRemoval.setCountX (signed (m_modelGridDisplay.countX ()));
331 m_modelGridRemoval.setCountY (signed (m_modelGridDisplay.countY ()));
332 }
333 }
334}
335
336bool CoordSystem::isXOnly (const QString &pointIdentifier) const
337{
338 return m_curveAxes->isXOnly (pointIdentifier);
339}
340
341void CoordSystem::iterateThroughCurvePointsAxes (const Functor2wRet<const QString &, const Point &, CallbackSearchReturn> &ftorWithCallback)
342{
343 ENGAUGE_CHECK_PTR (m_curveAxes);
344
345 m_curveAxes->iterateThroughCurvePoints (ftorWithCallback);
346}
347
348void CoordSystem::iterateThroughCurvePointsAxes (const Functor2wRet<const QString &, const Point &, CallbackSearchReturn> &ftorWithCallback) const
349{
350 ENGAUGE_CHECK_PTR (m_curveAxes);
351
352 m_curveAxes->iterateThroughCurvePoints (ftorWithCallback);
353}
354
355void CoordSystem::iterateThroughCurveSegments (const QString &curveName,
356 const Functor2wRet<const Point &, const Point &, CallbackSearchReturn> &ftorWithCallback) const
357{
358 if (curveName == AXIS_CURVE_NAME) {
359 m_curveAxes->iterateThroughCurveSegments(ftorWithCallback);
360 } else {
361 m_curvesGraphs.iterateThroughCurveSegments(curveName,
362 ftorWithCallback);
363 }
364}
365
366void CoordSystem::iterateThroughCurvesPointsGraphs (const Functor2wRet<const QString &, const Point &, CallbackSearchReturn> &ftorWithCallback)
367{
368 ENGAUGE_CHECK_PTR (m_curveAxes);
369
370 m_curvesGraphs.iterateThroughCurvesPoints (ftorWithCallback);
371}
372
373void CoordSystem::iterateThroughCurvesPointsGraphs (const Functor2wRet<const QString &, const Point &, CallbackSearchReturn> &ftorWithCallback) const
374{
375 ENGAUGE_CHECK_PTR (m_curveAxes);
376
377 m_curvesGraphs.iterateThroughCurvesPoints (ftorWithCallback);
378}
379
380bool CoordSystem::loadCurvesFile(const QString & /* curvesFile */)
381{
382 LOG4CPP_INFO_S ((*mainCat)) << "CoordSystem::loadCurvesFile";
383
384 return true;
385}
386
387void CoordSystem::loadPreVersion6 (QDataStream &str,
388 double version,
389 DocumentAxesPointsRequired &documentAxesPointsRequired)
390{
391 LOG4CPP_INFO_S ((*mainCat)) << "CoordSystem::loadPreVersion6";
392
393 qint32 int32;
394 double dbl, radius = 0.0;
395 QString st;
396
397 str >> st; // CurveCmbText selection
398 str >> st; // MeasureCmbText selection
399 str >> int32;
400 m_modelCoords.setCoordsType(static_cast<CoordsType> (int32));
401 if (version >= 3) {
402 str >> static_cast<double &> (radius);
403 }
404 m_modelCoords.setOriginRadius(radius);
405 str >> int32;
407 m_modelCoords.setCoordUnitsTheta(static_cast<CoordUnitsPolarTheta> (int32));
408 str >> int32;
409 m_modelCoords.setCoordScaleXTheta(static_cast<CoordScale> (int32));
410 str >> int32;
411 m_modelCoords.setCoordScaleYRadius(static_cast<CoordScale> (int32));
412
413 str >> int32;
414 m_modelExport.setDelimiter(static_cast<ExportDelimiter> (int32));
415 str >> int32;
416 m_modelExport.setLayoutFunctions(static_cast<ExportLayoutFunctions> (int32));
417 str >> int32;
418 m_modelExport.setPointsSelectionFunctions(static_cast<ExportPointsSelectionFunctions> (int32));
420 m_modelExport.setPointsIntervalUnitsFunctions(static_cast<ExportPointsIntervalUnits> (int32));
421 m_modelExport.setPointsIntervalUnitsRelations(static_cast<ExportPointsIntervalUnits> (int32));
422 str >> int32;
423 m_modelExport.setHeader(static_cast<ExportHeader> (int32));
424 if (version >= 5.1) {
425 str >> st; // X label
426 if (m_modelCoords.coordsType() == COORDS_TYPE_CARTESIAN) {
427 m_modelExport.setXLabel(st);
428 }
429 str >> st; // Theta label
430 if (m_modelCoords.coordsType() == COORDS_TYPE_POLAR) {
431 m_modelExport.setXLabel(st);
432 }
433 }
434
435 // Stable flag in m_modelGridRemoval is set below after points are read in
436 str >> int32; // Remove thin lines parallel to axes
437 str >> dbl; // Thin thickness
438 str >> int32;
439 m_modelGridRemoval.setRemoveDefinedGridLines(int32);
440 str >> int32; // Initialized
441 str >> int32;
442 m_modelGridRemoval.setCountX(int32);
443 str >> int32;
444 m_modelGridRemoval.setCountY(int32);
445 str >> int32;
446 m_modelGridRemoval.setGridCoordDisableX(static_cast<GridCoordDisable> (int32));
447 str >> int32;
448 m_modelGridRemoval.setGridCoordDisableY(static_cast<GridCoordDisable> (int32));
449 str >> dbl;
450 m_modelGridRemoval.setStartX(dbl);
451 str >> dbl;
452 m_modelGridRemoval.setStartY(dbl);
453 str >> dbl;
454 m_modelGridRemoval.setStepX(dbl);
455 str >> dbl;
456 m_modelGridRemoval.setStepY(dbl);
457 str >> dbl;
458 m_modelGridRemoval.setStopX(dbl);
459 str >> dbl;
460 m_modelGridRemoval.setStopY(dbl);
461 str >> dbl;
462 m_modelGridRemoval.setCloseDistance(dbl);
463 str >> int32; // Boolean remove color flag
464 if (version >= 5) {
465 QColor color;
466 str >> color;
467 } else {
468 str >> int32; // Rgb color
469 }
470 str >> int32; // Foreground threshold low
471 str >> int32; // Foreground threshold high
472 str >> dbl; // Gap separation
473
474 str >> int32;
475 m_modelGridDisplay.setStable(int32);
476 str >> int32;
477 m_modelGridDisplay.setCountX(unsigned (int32));
478 str >> int32;
479 m_modelGridDisplay.setCountY(unsigned (int32));
480 str >> int32;
481 m_modelGridDisplay.setDisableX(static_cast<GridCoordDisable> (int32));
482 str >> int32;
483 m_modelGridDisplay.setDisableY(static_cast<GridCoordDisable> (int32));
484 str >> dbl;
485 m_modelGridDisplay.setStartX (dbl);
486 str >> dbl;
487 m_modelGridDisplay.setStartY (dbl);
488 str >> dbl;
489 m_modelGridDisplay.setStepX (dbl);
490 str >> dbl;
491 m_modelGridDisplay.setStepY (dbl);
492 str >> dbl;
493 m_modelGridDisplay.setStopX (dbl);
494 str >> dbl;
495 m_modelGridDisplay.setStopY (dbl);
496
497 initializeUnsetGridRemovalFromGridDisplay (version);
498
499 str >> int32;
500 m_modelSegments.setMinLength(int32);
501 str >> int32;
502 m_modelSegments.setPointSeparation(int32);
503 str >> int32;
504 m_modelSegments.setLineWidth(int32);
505 str >> int32;
506 m_modelSegments.setLineColor(static_cast<ColorPalette> (int32));
507
508 str >> int32; // Point separation
509 str >> int32;
510 m_modelPointMatch.setMaxPointSize(int32);
511 str >> int32;
512 m_modelPointMatch.setPaletteColorAccepted(static_cast<ColorPalette> (int32));
513 str >> int32;
514 m_modelPointMatch.setPaletteColorRejected(static_cast<ColorPalette> (int32));
515 if (version < 4) {
517 } else {
518 str >> int32;
519 m_modelPointMatch.setPaletteColorCandidate(static_cast<ColorPalette> (int32));
520 }
521
522 str >> int32; // Discretize method
523 str >> int32; // Intensity threshold low
524 str >> int32; // Intensity threshold high
525 str >> int32; // Foreground threshold low
526 str >> int32; // Foreground threshold high
527 str >> int32; // Hue threshold low
528 str >> int32; // Hue threshold high
529 str >> int32; // Saturation threshold low
530 str >> int32; // Saturation threshold high
531 str >> int32; // Value threshold low
532 str >> int32; // Value threshold high
533
534 // Old versions have two Curve objects for 3 point axes and 2 point scales. New version picks one Curve
535 Curve *curveAxesIn = new Curve (str);
536 Curve *curveScaleIn = new Curve (str);
537 if (curveScaleIn->numPoints() == 2) {
538 // Nondefault case is map with scale bar
539 documentAxesPointsRequired = DOCUMENT_AXES_POINTS_REQUIRED_2;
540 delete m_curveAxes;
541 m_curveAxes = curveScaleIn;
542 m_curveAxes->setCurveName (AXIS_CURVE_NAME); // Override existing "Scale" name
543 delete curveAxesIn;
544 } else {
545 // Default case is graph with axes
546 documentAxesPointsRequired = DOCUMENT_AXES_POINTS_REQUIRED_3;
547 delete m_curveAxes;
548 m_curveAxes = curveAxesIn;
549 delete curveScaleIn;
550 }
551 m_curvesGraphs.loadPreVersion6 (str);
552
553 // Information from curves and points can affect some data structures that were (mostly) set earlier
554 if (m_curveAxes->numPoints () >= documentAxesPointsRequired) {
555 m_modelGridRemoval.setStable();
556 }
557
558 resetSelectedCurveNameIfNecessary ();
559}
560
561void CoordSystem::loadVersion6 (QXmlStreamReader &reader,
562 DocumentAxesPointsRequired &documentAxesPointsRequired)
563{
564 LOG4CPP_INFO_S ((*mainCat)) << "CoordSystem::loadVersion6";
565
566 documentAxesPointsRequired = DOCUMENT_AXES_POINTS_REQUIRED_3;
567
568 // Import from xml. Loop to end of data or error condition occurs, whichever is first
569 while (!reader.atEnd() &&
570 !reader.hasError()) {
571 QXmlStreamReader::TokenType tokenType = loadNextFromReader(reader);
572
573 if ((reader.name() == DOCUMENT_SERIALIZE_DOCUMENT) &&
574 (tokenType == QXmlStreamReader::EndElement)) {
575
576 // Exit out of loop immediately
577 break;
578 }
579
580 // Iterate to next StartElement
581 if (tokenType == QXmlStreamReader::StartElement) {
582
583 // This is a StartElement, so process it
584 QString tag = reader.name().toString();
586 m_modelAxesChecker.loadXml (reader);
587 } else if (tag == DOCUMENT_SERIALIZE_COORDS) {
588 m_modelCoords.loadXml (reader);
589 } else if (tag == DOCUMENT_SERIALIZE_CURVE) {
590 delete m_curveAxes;
591 m_curveAxes = new Curve (reader);
592 } else if (tag == DOCUMENT_SERIALIZE_CURVES_GRAPHS) {
593 m_curvesGraphs.loadXml (reader);
594 } else if (tag == DOCUMENT_SERIALIZE_DIGITIZE_CURVE) {
595 m_modelDigitizeCurve.loadXml (reader);
596 } else if (tag == DOCUMENT_SERIALIZE_EXPORT) {
597 m_modelExport.loadXml (reader);
598 } else if (tag == DOCUMENT_SERIALIZE_GENERAL || tag == DOCUMENT_SERIALIZE_COMMON) {
599 m_modelGeneral.loadXml (reader);
600 } else if (tag == DOCUMENT_SERIALIZE_GRID_REMOVAL) {
601 m_modelGridRemoval.loadXml (reader);
602 } else if (tag == DOCUMENT_SERIALIZE_IMAGE) {
603 ENGAUGE_ASSERT (false); // The image should have been read before this method was called
604 } else if (tag == DOCUMENT_SERIALIZE_POINT_MATCH) {
605 m_modelPointMatch.loadXml (reader);
606 } else if (tag == DOCUMENT_SERIALIZE_SEGMENTS) {
607 m_modelSegments.loadXml (reader);
608 } else {
609 m_successfulRead = false;
610 m_reasonForUnsuccessfulRead = QString ("%1 '%2' %3")
611 .arg (QObject::tr ("Unexpected xml token"))
612 .arg (tag)
613 .arg ("encountered");
614 break;
615 }
616 }
617 }
618
619 resetSelectedCurveNameIfNecessary ();
620}
621
622void CoordSystem::loadVersions7AndUp (QXmlStreamReader &reader)
623{
624 LOG4CPP_INFO_S ((*mainCat)) << "CoordSystem::loadVersions7AndUp";
625
626 // Import from xml. Loop to end of data or error condition occurs, whichever is first
627 while (!reader.atEnd() &&
628 !reader.hasError()) {
629 QXmlStreamReader::TokenType tokenType = loadNextFromReader(reader);
630
631 if ((reader.name() == DOCUMENT_SERIALIZE_COORD_SYSTEM) &&
632 (tokenType == QXmlStreamReader::EndElement)) {
633
634 // Exit out of loop immediately
635 break;
636 }
637
638 // Iterate to next StartElement
639 if (tokenType == QXmlStreamReader::StartElement) {
640
641 // This is a StartElement, so process it
642 QString tag = reader.name().toString();
644 m_modelAxesChecker.loadXml (reader);
645 } else if (tag == DOCUMENT_SERIALIZE_COORDS) {
646 m_modelCoords.loadXml (reader);
647 } else if (tag == DOCUMENT_SERIALIZE_CURVE) {
648 delete m_curveAxes;
649 m_curveAxes = new Curve (reader);
650 } else if (tag == DOCUMENT_SERIALIZE_CURVES_GRAPHS) {
651 m_curvesGraphs.loadXml (reader);
652 } else if (tag == DOCUMENT_SERIALIZE_DIGITIZE_CURVE) {
653 m_modelDigitizeCurve.loadXml (reader);
654 } else if (tag == DOCUMENT_SERIALIZE_EXPORT) {
655 m_modelExport.loadXml (reader);
656 } else if (tag == DOCUMENT_SERIALIZE_GENERAL || tag == DOCUMENT_SERIALIZE_COMMON) {
657 m_modelGeneral.loadXml (reader);
658 } else if (tag == DOCUMENT_SERIALIZE_GRID_DISPLAY) {
659 m_modelGridDisplay.loadXml (reader);
660 } else if (tag == DOCUMENT_SERIALIZE_GRID_REMOVAL) {
661 m_modelGridRemoval.loadXml (reader);
662 } else if (tag == DOCUMENT_SERIALIZE_IMAGE) {
663 ENGAUGE_ASSERT (false); // The image should have been read before this method was called
664 } else if (tag == DOCUMENT_SERIALIZE_POINT_MATCH) {
665 m_modelPointMatch.loadXml (reader);
666 } else if (tag == DOCUMENT_SERIALIZE_SEGMENTS) {
667 m_modelSegments.loadXml (reader);
668 } else {
669 m_successfulRead = false;
670 m_reasonForUnsuccessfulRead = QString ("Unexpected xml token '%1' encountered").arg (tag);
671 break;
672 }
673 }
674 }
675
676 resetSelectedCurveNameIfNecessary ();
677}
678
680{
681 return m_modelAxesChecker;
682}
683
685{
686 // Construct a curve-specific model
688
689 return modelColorFilter;
690}
691
693{
694 return m_modelCoords;
695}
696
698{
699 // Construct a curve-specific model
701
702 return modelCurveStyles;
703}
704
706{
707 return m_modelDigitizeCurve;
708}
709
711{
712 return m_modelExport;
713}
714
716{
717 return m_modelGeneral;
718}
719
721{
722 return m_modelGridDisplay;
723}
724
726{
727 return m_modelGridRemoval;
728}
729
731{
732 return m_modelPointMatch;
733}
734
736{
737 return m_modelSegments;
738}
739
740void CoordSystem::movePoint (const QString &pointIdentifier,
741 const QPointF &deltaScreen)
742{
743 QString curveName = Point::curveNameFromPointIdentifier (pointIdentifier);
744
745 Curve *curve = curveForCurveName (curveName);
746 ENGAUGE_CHECK_PTR (curve);
747 curve->movePoint (pointIdentifier,
748 deltaScreen);
749}
750
751int CoordSystem::nextOrdinalForCurve (const QString &curveName) const
752{
753 CallbackNextOrdinal ftor (curveName);
754
755 Functor2wRet<const QString &, const Point &, CallbackSearchReturn> ftorWithCallback = functor_ret (ftor,
757
758 if (curveName == AXIS_CURVE_NAME) {
759 m_curveAxes->iterateThroughCurvePoints (ftorWithCallback);
760 } else {
761 m_curvesGraphs.iterateThroughCurvesPoints (ftorWithCallback);
762 }
763
764 return qFloor (ftor.nextOrdinal ());
765}
766
767QPointF CoordSystem::positionGraph (const QString &pointIdentifier) const
768{
769 QString curveName = Point::curveNameFromPointIdentifier (pointIdentifier);
770
771 const Curve *curve = curveForCurveName (curveName);
772 return curve->positionGraph (pointIdentifier);
773}
774
775QPointF CoordSystem::positionScreen (const QString &pointIdentifier) const
776{
777 QString curveName = Point::curveNameFromPointIdentifier (pointIdentifier);
778
779 const Curve *curve = curveForCurveName (curveName);
780 return curve->positionScreen (pointIdentifier);
781}
782
784{
785 QString text;
786 QTextStream str (&text);
787
788 printStream ("",
789 str);
790 std::cerr << text.toLatin1().data();
791}
792
793void CoordSystem::printStream (QString indentation,
794 QTextStream &str) const
795{
796 str << indentation << "Graph\n";
797
798 indentation += INDENTATION_DELTA;
799
800 // str << indentation << "name=" << m_name << "\n";
801 // str << indentation << "pixmap=" << m_pixmap.width() << "x" << m_pixmap.height() << "\n";
802
803 m_curveAxes->printStream (indentation,
804 str);
805 m_curvesGraphs.printStream (indentation,
806 str);
807
808 m_modelAxesChecker.printStream (indentation,
809 str);
810 m_modelCoords.printStream (indentation,
811 str);
812 m_modelDigitizeCurve.printStream (indentation,
813 str);
814 m_modelExport.printStream (indentation,
815 str);
816 m_modelGeneral.printStream (indentation,
817 str);
818 m_modelGridDisplay.printStream (indentation,
819 str);
820 m_modelGridRemoval.printStream (indentation,
821 str);
822 m_modelPointMatch.printStream (indentation,
823 str);
824 m_modelSegments.printStream (indentation,
825 str);
826}
827
829{
830 ENGAUGE_ASSERT (!m_successfulRead);
831
832 return m_reasonForUnsuccessfulRead;
833}
834
835void CoordSystem::removePointAxis (const QString &identifier)
836{
837 LOG4CPP_INFO_S ((*mainCat)) << "CoordSystem::removePointAxis identifier=" << identifier.toLatin1 ().data ();
838
839 m_curveAxes->removePoint (identifier);
840}
841
842void CoordSystem::removePointGraph (const QString &identifier)
843{
844 LOG4CPP_INFO_S ((*mainCat)) << "CoordSystem::removePointGraph identifier=" << identifier.toLatin1 ().data ();
845
846 m_curvesGraphs.removePoint (identifier);
847}
848
850{
852
853 Functor2wRet<const QString &, const Point &, CallbackSearchReturn> ftorWithCallback = functor_ret (ftor,
855
856 curvesGraphs.iterateThroughCurvesPoints (ftorWithCallback);
857}
858
859void CoordSystem::resetSelectedCurveNameIfNecessary ()
860{
861 if (m_selectedCurveName.isEmpty () ||
862 curveForCurveName (m_selectedCurveName) == nullptr) {
863
864 // Selected curve name is empty, or the curve has been removed so we pick another. The first is arbitrarily picked
865 m_selectedCurveName = m_curvesGraphs.curvesGraphsNames().first();
866 }
867
868}
869
870void CoordSystem::saveXml (QXmlStreamWriter &writer) const
871{
872 writer.writeStartElement(DOCUMENT_SERIALIZE_COORD_SYSTEM);
873
874 // Serialize the Document variables
875 m_modelGeneral.saveXml (writer);
876 m_modelCoords.saveXml (writer);
877 m_modelDigitizeCurve.saveXml (writer);
878 m_modelExport.saveXml (writer);
879 m_modelAxesChecker.saveXml (writer);
880 m_modelGridDisplay.saveXml (writer);
881 m_modelGridRemoval.saveXml (writer);
882 m_modelPointMatch.saveXml (writer);
883 m_modelSegments.saveXml (writer);
884 m_curveAxes->saveXml (writer);
885 m_curvesGraphs.saveXml (writer);
886 writer.writeEndElement();
887}
888
890{
891 return m_selectedCurveName;
892}
893
894void CoordSystem::setCurveAxes (const Curve &curveAxes)
895{
896 LOG4CPP_INFO_S ((*mainCat)) << "CoordSystem::setCurveAxes";
897
898 delete m_curveAxes;
899
900 m_curveAxes = new Curve (curveAxes);
901}
902
904{
905 LOG4CPP_INFO_S ((*mainCat)) << "CoordSystem::setCurvesGraphs";
906
907 m_curvesGraphs = curvesGraphs;
908
909 resetSelectedCurveNameIfNecessary ();
910}
911
913{
914 m_modelAxesChecker = modelAxesChecker;
915}
916
918{
919 // Save the CurveFilter for each Curve
920 ColorFilterSettingsList::const_iterator itr;
921 for (itr = modelColorFilter.colorFilterSettingsList().constBegin ();
922 itr != modelColorFilter.colorFilterSettingsList().constEnd();
923 itr++) {
924
925 QString curveName = itr.key();
926 const ColorFilterSettings &colorFilterSettings = itr.value();
927
928 Curve *curve = curveForCurveName (curveName);
929 curve->setColorFilterSettings (colorFilterSettings);
930 }
931}
932
934{
935 m_modelCoords = modelCoords;
936}
937
939{
940 // Save the LineStyle and PointStyle for each Curve
941 QStringList curveNames = modelCurveStyles.curveNames();
942 QStringList::iterator itr;
943 for (itr = curveNames.begin(); itr != curveNames.end(); itr++) {
944
945 QString curveName = *itr;
946 const CurveStyle &curveStyle = modelCurveStyles.curveStyle (curveName);
947
948 Curve *curve = curveForCurveName (curveName);
949 curve->setCurveStyle (curveStyle);
950 }
951}
952
954{
955 m_modelDigitizeCurve = modelDigitizeCurve;
956}
957
959{
960 m_modelExport = modelExport;
961}
962
964{
965 m_modelGeneral = modelGeneral;
966}
967
969{
970 m_modelGridDisplay = modelGridDisplay;
971}
972
974{
975 m_modelGridRemoval = modelGridRemoval;
976}
977
979{
980 m_modelPointMatch = modelPointMatch;
981}
982
984{
985 m_modelSegments = modelSegments;
986}
987
988void CoordSystem::setSelectedCurveName(const QString &selectedCurveName)
989{
990 m_selectedCurveName = selectedCurveName;
991}
992
994{
995 return m_successfulRead;
996}
997
999{
1000 LOG4CPP_INFO_S ((*mainCat)) << "CoordSystem::updatePointOrdinals";
1001
1002 // The graph coordinates of all points in m_curvesGraphs must have already been updated at this point. See applyTransformation
1003 m_curvesGraphs.updatePointOrdinals (transformation);
1004}
const QString AXIS_CURVE_NAME
ColorPalette
@ COLOR_PALETTE_BLUE
CoordScale
Definition CoordScale.h:12
const int FOUR_BYTES
@ COORD_UNITS_NON_POLAR_THETA_NUMBER
CoordUnitsPolarTheta
CoordsType
Definition CoordsType.h:12
@ COORDS_TYPE_POLAR
Definition CoordsType.h:14
@ COORDS_TYPE_CARTESIAN
Definition CoordsType.h:13
const QString DEFAULT_GRAPH_CURVE_NAME
@ DOCUMENT_AXES_POINTS_REQUIRED_3
@ DOCUMENT_AXES_POINTS_REQUIRED_2
const QString DOCUMENT_SERIALIZE_CURVES_GRAPHS
const QString DOCUMENT_SERIALIZE_AXES_CHECKER
const QString DOCUMENT_SERIALIZE_GRID_DISPLAY
const QString DOCUMENT_SERIALIZE_COORD_SYSTEM
const QString DOCUMENT_SERIALIZE_COMMON
const QString DOCUMENT_SERIALIZE_IMAGE
const QString DOCUMENT_SERIALIZE_GENERAL
const QString DOCUMENT_SERIALIZE_EXPORT
const QString DOCUMENT_SERIALIZE_DOCUMENT
const QString DOCUMENT_SERIALIZE_GRID_REMOVAL
const QString DOCUMENT_SERIALIZE_SEGMENTS
const QString DOCUMENT_SERIALIZE_CURVE
const QString DOCUMENT_SERIALIZE_DIGITIZE_CURVE
const QString DOCUMENT_SERIALIZE_COORDS
const QString DOCUMENT_SERIALIZE_POINT_MATCH
#define ENGAUGE_ASSERT(cond)
Drop in replacement for Q_ASSERT if defined(QT_NO_DEBUG) && !defined(QT_FORCE_ASSERTS) define ENGAUGE...
#define ENGAUGE_CHECK_PTR(ptr)
#endif
ExportDelimiter
Delimiter values that may or may not be overridden by DOCUMENT_SERIALIZE_EXPORT_DELIMITER_OVERRIDE_CS...
ExportHeader
ExportLayoutFunctions
@ EXPORT_POINTS_SELECTION_RELATIONS_RAW
GridCoordDisable
log4cpp::Category * mainCat
Definition Logger.cpp:14
const QString INDENTATION_DELTA
QString QPointFToString(const QPointF &pos)
QXmlStreamReader::TokenType loadNextFromReader(QXmlStreamReader &reader)
Load next token from xml reader.
Definition Xml.cpp:14
Callback that is used when iterating through a read-only CurvesGraphs to add corresponding points in ...
CallbackSearchReturn callback(const QString &curveName, const Point &point)
Callback method.
CallbackSearchReturn callback(const QString &curveName, const Point &point)
Callback method.
Callback for sanity checking the screen and graph coordinates of an axis point, before it is added to...
bool isError() const
True if an error occurred during iteration.
QString errorMessage() const
Error message that explains the problem indicated by isError.
Callback for sanity checking the screen and graph coordinates of an axis point that is in the axes cu...
bool isError() const
True if an error occurred during iteration.
QString errorMessage() const
Error message that explains the problem indicated by isError.
Callback for computing the next ordinal for a new point.
double nextOrdinal() const
Computed next ordinal.
CallbackSearchReturn callback(const QString &curveName, const Point &point)
Callback method.
Callback that is used when iterating through a read-only CurvesGraphs to remove corresponding points ...
CallbackSearchReturn callback(const QString &curveName, const Point &point)
Callback method.
Color filter parameters for one curve. For a class, this is handled the same as LineStyle and PointSt...
static ColorFilterSettings defaultFilter()
Initial default for any Curve.
virtual bool loadCurvesFile(const QString &curvesFile)
Load the curve names in the specified Engauge file into the current graph. This is called near the en...
virtual CurveStyles modelCurveStyles() const
Get method for CurveStyles.
virtual void print() const
Debugging method for printing directly from symbolic debugger.
virtual void updatePointOrdinals(const Transformation &transformation)
Update point ordinals after point addition/removal or dragging.
virtual void addPointGraphWithGeneratedIdentifier(const QString &curveName, const QPointF &posScreen, QString &generatedIentifier, double ordinal)
Add a single graph point with a generated point identifier.
virtual DocumentModelGridRemoval modelGridRemoval() const
Get method for DocumentModelGridRemoval.
virtual QPointF positionScreen(const QString &pointIdentifier) const
See Curve::positionScreen.
virtual DocumentModelPointMatch modelPointMatch() const
Get method for DocumentModelPointMatch.
virtual void setCurvesGraphs(const CurvesGraphs &curvesGraphs)
Let CmdAbstract classes overwrite CurvesGraphs. Applies to current coordinate system.
virtual int curvesGraphsNumPoints(const QString &curveName) const
See CurvesGraphs::curvesGraphsNumPoints.
virtual void movePoint(const QString &pointIdentifier, const QPointF &deltaScreen)
See Curve::movePoint.
virtual DocumentModelCoords modelCoords() const
Get method for DocumentModelCoords.
virtual void setModelExport(const DocumentModelExportFormat &modelExport)
Set method for DocumentModelExportFormat.
virtual void printStream(QString indentation, QTextStream &str) const
Debugging method that supports print method of this class and printStream method of some other class(...
virtual void setModelAxesChecker(const DocumentModelAxesChecker &modelAxesChecker)
Set method for DocumentModelAxesChecker.
virtual void removePointGraph(const QString &identifier)
Perform the opposite of addPointGraph.
void setModelPointMatch(const DocumentModelPointMatch &modelPointMatch)
Set method for DocumentModelPointMatch.
virtual void iterateThroughCurvesPointsGraphs(const Functor2wRet< const QString &, const Point &, CallbackSearchReturn > &ftorWithCallback)
See Curve::iterateThroughCurvePoints, for all the graphs curves.
virtual void addPointsInCurvesGraphs(CurvesGraphs &curvesGraphs)
Add all points identified in the specified CurvesGraphs. See also removePointsInCurvesGraphs.
virtual void editPointAxis(const QPointF &posGraph, const QString &identifier)
Edit the graph coordinates of a single axis point. Call this after checkAddPointAxis to guarantee suc...
virtual void removePointsInCurvesGraphs(CurvesGraphs &curvesGraphs)
Remove all points identified in the specified CurvesGraphs. See also addPointsInCurvesGraphs.
virtual QPointF positionGraph(const QString &pointIdentifier) const
See Curve::positionGraph.
virtual void iterateThroughCurvePointsAxes(const Functor2wRet< const QString &, const Point &, CallbackSearchReturn > &ftorWithCallback)
See Curve::iterateThroughCurvePoints, for the axes curve.
bool isXOnly(const QString &pointIdentifier) const
Return true if y coordinate is undefined, otherwise x coordinae is undefined in DOCUMENT_AXES_POINT_R...
virtual void checkEditPointAxis(const QString &pointIdentifier, const QPointF &posScreen, const QPointF &posGraph, bool &isError, QString &errorMessage, DocumentAxesPointsRequired documentAxesPointsRequired)
Check before calling editPointAxis.
virtual DocumentModelDigitizeCurve modelDigitizeCurve() const
Get method for DocumentModelDigitizeCurve.
virtual DocumentModelAxesChecker modelAxesChecker() const
Get method for DocumentModelAxesChecker.
virtual DocumentModelGeneral modelGeneral() const
Get method for DocumentModelGeneral.
void loadVersions7AndUp(QXmlStreamReader &reader)
Load from file in versions 7 and 8 formats. Number of axes points is already defined at Document leve...
virtual DocumentModelSegments modelSegments() const
Get method for DocumentModelSegments.
virtual void setModelGeneral(const DocumentModelGeneral &modelGeneral)
Set method for DocumentModelGeneral.
virtual DocumentModelColorFilter modelColorFilter() const
Get method for DocumentModelColorFilter.
virtual void setSelectedCurveName(const QString &selectedCurveName)
Save curve name that is selected for the current coordinate system, for the next time the coordinate ...
void loadVersion6(QXmlStreamReader &reader, DocumentAxesPointsRequired &documentAxesPointsRequired)
Load from file in version 6 format. Number of axes points is read in and passed to Document.
CoordSystem()
Single constructor.
virtual Curve * curveForCurveName(const QString &curveName)
See CurvesGraphs::curveForCurveName, although this also works for AXIS_CURVE_NAME.
virtual void addPointAxisWithGeneratedIdentifier(const QPointF &posScreen, const QPointF &posGraph, QString &identifier, double ordinal, bool isXOnly)
Add a single axis point with a generated point identifier.
virtual void removePointAxis(const QString &identifier)
Perform the opposite of addPointAxis.
virtual const Curve & curveAxes() const
Get method for axis curve.
virtual QString selectedCurveName() const
Currently selected curve name. This is used to set the selected curve combobox in MainWindow.
virtual void setModelSegments(const DocumentModelSegments &modelSegments)
Set method for DocumentModelSegments.
virtual void setCurveAxes(const Curve &curveAxes)
Let CmdAbstract classes overwrite axes Curve. Applies to current coordinate system.
virtual void editPointGraph(bool isX, bool isY, double x, double y, const QStringList &identifiers, const Transformation &transformation)
Edit the graph coordinates of one or more graph points.
virtual QStringList curvesGraphsNames() const
See CurvesGraphs::curvesGraphsNames.
virtual int nextOrdinalForCurve(const QString &curveName) const
Default next ordinal value for specified curve.
virtual DocumentModelGridDisplay modelGridDisplay() const
Get method for DocumentModelGridDisplay.
virtual void addGraphCurveAtEnd(const QString &curveName)
Add new graph curve to the list of existing graph curves.
virtual const CurvesGraphs & curvesGraphs() const
Make all Curves available, read only, for CmdAbstract classes only.
virtual void setModelCoords(const DocumentModelCoords &modelCoords)
Set method for DocumentModelCoords.
virtual void saveXml(QXmlStreamWriter &writer) const
Save graph to xml.
virtual void iterateThroughCurveSegments(const QString &curveName, const Functor2wRet< const Point &, const Point &, CallbackSearchReturn > &ftorWithCallback) const
See Curve::iterateThroughCurveSegments, for any axes or graph curve.
virtual QString reasonForUnsuccessfulRead() const
Return an informative text message explaining why startup loading failed. Applies if successfulRead r...
virtual void setModelGridRemoval(const DocumentModelGridRemoval &modelGridRemoval)
Set method for DocumentModelGridRemoval.
virtual void setModelCurveStyles(const CurveStyles &modelCurveStyles)
Set method for CurveStyles.
virtual void checkAddPointAxis(const QPointF &posScreen, const QPointF &posGraph, bool &isError, QString &errorMessage, bool isXOnly, DocumentAxesPointsRequired documentAxesPointsRequired)
Check before calling addPointAxis. Also returns the next available ordinal number (to prevent clashes...
virtual void setModelGridDisplay(const DocumentModelGridDisplay &modelGridDisplay)
Set method for DocumentModelGridDisplay.
virtual void addPointAxisWithSpecifiedIdentifier(const QPointF &posScreen, const QPointF &posGraph, const QString &identifier, double ordinal, bool isXOnly)
Add a single axis point with the specified point identifier.
virtual void setModelDigitizeCurve(const DocumentModelDigitizeCurve &modelDigitizeCurve)
Set method for DocumentModelDigitizeCurve.
virtual void setModelColorFilter(const DocumentModelColorFilter &modelColorFilter)
Set method for DocumentModelColorFilter.
void loadPreVersion6(QDataStream &str, double version, DocumentAxesPointsRequired &documentAxesPointsRequired)
Load from file in pre-version 6 format. Number of axes points is read in and passed to Document.
virtual DocumentModelExportFormat modelExport() const
Get method for DocumentModelExportFormat.
virtual bool successfulRead() const
Return true if startup loading succeeded. If the loading failed then reasonForUnsuccessfulRed will ex...
virtual void addPointGraphWithSpecifiedIdentifier(const QString &curveName, const QPointF &posScreen, const QString &identifier, double ordinal)
Add a single graph point with the specified point identifer. Note that PointStyle is not applied to t...
Container for LineStyle and PointStyle for one Curve.
Definition CurveStyle.h:19
Model for DlgSettingsCurveProperties and CmdSettingsCurveProperties.
Definition CurveStyles.h:23
CurveStyle curveStyle(const QString &curveName) const
CurveStyle in specified curve.
QStringList curveNames() const
List of all curve names.
Container for one set of digitized Points.
Definition Curve.h:34
bool isXOnly(const QString &pointIdentifier) const
Determine if specified point has just x coordinate. Otherwise has just y coordinate,...
Definition Curve.cpp:285
void saveXml(QXmlStreamWriter &writer) const
Serialize curve.
Definition Curve.cpp:523
void movePoint(const QString &pointIdentifier, const QPointF &deltaScreen)
Translate the position of a point by the specified distance vector.
Definition Curve.cpp:423
void printStream(QString indentation, QTextStream &str) const
Debugging method that supports print method of this class and printStream method of some other class(...
Definition Curve.cpp:490
void setCurveStyle(const CurveStyle &curveStyle)
Set curve style.
Definition Curve.cpp:563
void editPointAxis(const QPointF &posGraph, const QString &identifier)
Edit the graph coordinates of an axis point. This method does not apply to a graph point.
Definition Curve.cpp:154
void removePoint(const QString &identifier)
Perform the opposite of addPointAtEnd.
Definition Curve.cpp:510
void setColorFilterSettings(const ColorFilterSettings &colorFilterSettings)
Set color filter.
Definition Curve.cpp:546
void addPoint(const Point &point)
Add Point to this Curve.
Definition Curve.cpp:134
void setCurveName(const QString &curveName)
Change the curve name.
Definition Curve.cpp:551
QPointF positionScreen(const QString &pointIdentifier) const
Return the position, in screen coordinates, of the specified Point.
Definition Curve.cpp:473
void iterateThroughCurvePoints(const Functor2wRet< const QString &, const Point &, CallbackSearchReturn > &ftorWithCallback) const
Apply functor to Points on Curve.
Definition Curve.cpp:301
QPointF positionGraph(const QString &pointIdentifier) const
Return the position, in graph coordinates, of the specified Point.
Definition Curve.cpp:456
void iterateThroughCurveSegments(const Functor2wRet< const Point &, const Point &, CallbackSearchReturn > &ftorWithCallback) const
Apply functor to successive Points, as line segments, on Curve. This could be a bit slow.
Definition Curve.cpp:316
int numPoints() const
Number of points.
Definition Curve.cpp:432
Container for all graph curves. The axes point curve is external to this class.
void saveXml(QXmlStreamWriter &writer) const
Serialize curves.
Curve * curveForCurveName(const QString &curveName)
Return the axis or graph curve for the specified curve name.
int curvesGraphsNumPoints(const QString &curveName) const
Point count.
void loadXml(QXmlStreamReader &reader)
Load from serialized xml post-version 5 file.
int numCurves() const
Current number of graphs curves.
void loadPreVersion6(QDataStream &str)
Load from serialized binary pre-version 6 file.
void printStream(QString indentation, QTextStream &str) const
Debugging method that supports print method of this class and printStream method of some other class(...
void updatePointOrdinals(const Transformation &transformation)
Update point ordinals to be consistent with their CurveStyle and x/theta coordinate.
void addGraphCurveAtEnd(const Curve &curve)
Append new graph Curve to end of Curve list.
void iterateThroughCurveSegments(const QString &curveNameWanted, const Functor2wRet< const Point &, const Point &, CallbackSearchReturn > &ftorWithCallback) const
Apply functor to segments on the specified axis or graph Curve.
void removePoint(const QString &pointIdentifier)
Remove the Point from its Curve.
QStringList curvesGraphsNames() const
List of graph curve names.
void editPointGraph(bool isX, bool isY, double x, double y, const QStringList &identifiers, const Transformation &transformation)
Set the x and/or y coordinate values of the specified points.
void addPoint(const Point &point)
Append new Point to the specified Curve.
void iterateThroughCurvesPoints(const Functor2wRet< const QString &, const Point &, CallbackSearchReturn > &ftorWithCallback)
Apply functor to Points on all of the Curves.
Model for DlgSettingsAxesChecker and CmdSettingsAxesChecker.
void printStream(QString indentation, QTextStream &str) const
Debugging method that supports print method of this class and printStream method of some other class(...
virtual void saveXml(QXmlStreamWriter &writer) const
Save entire model as xml into stream.
virtual void loadXml(QXmlStreamReader &reader)
Load model from serialized xml.
Model for DlgSettingsColorFilter and CmdSettingsColorFilter.
const ColorFilterSettingsList & colorFilterSettingsList() const
Get method for copying all color filters in one step.
Model for DlgSettingsCoords and CmdSettingsCoords.
virtual void saveXml(QXmlStreamWriter &writer) const
Save entire model as xml into stream.
void setOriginRadius(double originRadius)
Set method for origin radius in polar mode.
void setCoordUnitsRadius(CoordUnitsNonPolarTheta coordUnits)
Set method for radius units.
void printStream(QString indentation, QTextStream &str) const
Debugging method that supports print method of this class and printStream method of some other class(...
void setCoordsType(CoordsType coordsType)
Set method for coordinates type.
CoordsType coordsType() const
Get method for coordinates type.
void setCoordScaleXTheta(CoordScale coordScale)
Set method for linear/log scale on x/theta.
void setCoordScaleYRadius(CoordScale coordScale)
Set method for linear/log scale on y/radius.
void setCoordUnitsTheta(CoordUnitsPolarTheta coordUnits)
Set method for theta units.
virtual void loadXml(QXmlStreamReader &reader)
Load model from serialized xml.
Model for DlgSettingsDigitizeCurve and CmdSettingsDigitizeCurve.
virtual void loadXml(QXmlStreamReader &reader)
Load model from serialized xml.
void printStream(QString indentation, QTextStream &str) const
Debugging method that supports print method of this class and printStream method of some other class(...
virtual void saveXml(QXmlStreamWriter &writer) const
Save entire model as xml into stream.
Model for DlgSettingsExportFormat and CmdSettingsExportFormat.
virtual void loadXml(QXmlStreamReader &reader)
Load model from serialized xml.
void setLayoutFunctions(ExportLayoutFunctions exportLayoutFunctions)
Set method for functions layout.
void setXLabel(const QString &xLabel)
Set method for x label.
void setHeader(ExportHeader exportHeader)
Set method for header.
void setDelimiter(ExportDelimiter exportDelimiter)
Set method for delimiter.
void setPointsSelectionRelations(ExportPointsSelectionRelations exportPointsSelectionRelations)
Set method for point selection for relations.
void setPointsSelectionFunctions(ExportPointsSelectionFunctions exportPointsSelectionFunctions)
Set method for point selection for functions.
void printStream(QString indentation, QTextStream &str) const
Debugging method that supports print method of this class and printStream method of some other class(...
void setPointsIntervalUnitsFunctions(ExportPointsIntervalUnits pointsIntervalUnitsFunctions)
Set method for points interval units for functions.
virtual void saveXml(QXmlStreamWriter &writer) const
Save entire model as xml into stream.
void setPointsIntervalUnitsRelations(ExportPointsIntervalUnits pointsIntervalUnitsRelations)
Set method for points interval units for relations.
Model for DlgSettingsGeneral and CmdSettingsGeneral.
virtual void saveXml(QXmlStreamWriter &writer) const
Save entire model as xml into stream.
virtual void loadXml(QXmlStreamReader &reader)
Load model from serialized xml.
void printStream(QString indentation, QTextStream &str) const
Debugging method that supports print method of this class and printStream method of some other class(...
Model for DlgSettingsGridDisplay and CmdSettingsGridDisplay.
unsigned int countX() const
Get method for x grid line count.
double startX() const
Get method for x grid line lower bound (inclusive).
unsigned int countY() const
Get method for y grid line count.
double stepX() const
Get method for x grid line increment.
virtual void loadXml(QXmlStreamReader &reader)
Load model from serialized xml.
void setStepX(double stepX)
Set method for x grid line increment.
double stopX() const
Get method for x grid line upper bound (inclusive).
double stopY() const
Get method for y grid line upper bound (inclusive).
void setStepY(double yStep)
Set method for y grid line increment.
void setStopX(double stopX)
Set method for x grid line upper bound (inclusive).
virtual void saveXml(QXmlStreamWriter &writer) const
Save entire model as xml into stream.
void setDisableX(GridCoordDisable disableX)
Set method for x grid line disabled variable.
void setStopY(double yStop)
Set method for y grid line upper bound (inclusive).
void setDisableY(GridCoordDisable disableY)
Set method for y grid line disabled variable.
void printStream(QString indentation, QTextStream &str) const
Debugging method that supports print method of this class and printStream method of some other class(...
double stepY() const
Get method for y grid line increment.
void setCountX(unsigned int countX)
Set method for x grid line count.
void setStartX(double startX)
Set method for x grid line lower bound (inclusive).
void setStable(bool stable)
Set method for stable flag.
double startY() const
Get method for y grid line lower bound (inclusive).
void setStartY(double yStart)
Set method for y grid line lower bound (inclusive).
void setCountY(unsigned int countY)
Set method for y grid line count.
Model for DlgSettingsGridRemoval and CmdSettingsGridRemoval. The settings are unstable until the user...
virtual void loadXml(QXmlStreamReader &reader)
Load model from serialized xml.
void setCloseDistance(double closeDistance)
Set method for close distance.
void setStopY(double stopY)
Set method for y stop.
void setCountX(int countX)
Set method for x count.
void setGridCoordDisableY(GridCoordDisable gridCoordDisable)
Set method for y coord parameter to disable.
void setStable()
Set the stable flag to true. This public version has no argument since it cannot be undone.
void setGridCoordDisableX(GridCoordDisable gridCoordDisable)
Set method for x coord parameter to disable.
void setStepX(double stepX)
Set method for x step.
void setStopX(double stopX)
Set method for x stop.
void printStream(QString indentation, QTextStream &str) const
Debugging method that supports print method of this class and printStream method of some other class(...
void setStartY(double startY)
Set method for y start.
virtual void saveXml(QXmlStreamWriter &writer) const
Save entire model as xml into stream.
int countY() const
Get method for y count.
int countX() const
Get method for x count.
void setRemoveDefinedGridLines(bool removeDefinedGridLines)
Set method for removing defined grid lines.
void setStepY(double stepY)
Set method for y step.
void setStartX(double startX)
Set method for x start.
void setCountY(int countY)
Set method for y count.
Model for DlgSettingsPointMatch and CmdSettingsPointMatch.
void setMaxPointSize(double maxPointSize)
Set method for max point size.
virtual void loadXml(QXmlStreamReader &reader)
Load model from serialized xml.
void setPaletteColorCandidate(ColorPalette paletteColorCandidate)
Set method for candidate color.
virtual void saveXml(QXmlStreamWriter &writer) const
Save entire model as xml into stream.
void setPaletteColorAccepted(ColorPalette paletteColorAccepted)
Set method for accepted color.
void printStream(QString indentation, QTextStream &str) const
Debugging method that supports print method of this class and printStream method of some other class(...
void setPaletteColorRejected(ColorPalette paletteColorRejected)
Set method for rejected color.
Model for DlgSettingsSegments and CmdSettingsSegments.
virtual void loadXml(QXmlStreamReader &reader)
Load model from serialized xml.
void setPointSeparation(double pointSeparation)
Set method for point separation.
void printStream(QString indentation, QTextStream &str) const
Debugging method that supports print method of this class and printStream method of some other class(...
void setLineColor(ColorPalette lineColor)
Set method for line color.
virtual void saveXml(QXmlStreamWriter &writer) const
Save entire model as xml into stream.
void setLineWidth(double lineWidth)
Set method for line width.
void setMinLength(double minLength)
Set method for min length.
Details for a specific Line.
Definition LineStyle.h:20
static LineStyle defaultGraphCurve(int index)
Initial default for index'th graph curve.
Definition LineStyle.cpp:84
Details for a specific Point.
Definition PointStyle.h:21
static PointStyle defaultGraphCurve(int index)
Initial default for index'th graph curve.
Class that represents one digitized point. The screen-to-graph coordinate transformation is always ex...
Definition Point.h:26
static QString curveNameFromPointIdentifier(const QString &pointIdentifier)
Parse the curve name from the specified point identifier. This does the opposite of uniqueIdentifierG...
Definition Point.cpp:227
QString identifier() const
Unique identifier for a specific Point.
Definition Point.cpp:268
Manage storage and retrieval of the settings for the curves.
QString defaultCurveName(int indexOneBased, const QString &defaultName) const
Default graph name for the specified curve index.
int numberOfCurvesForImport() const
Return the number of curve names to be generated. Value is maximum of 1 and the number in the configu...
Affine transformation between screen and graph coordinates, based on digitized axis points.
#define LOG4CPP_INFO_S(logger)
Definition convenience.h:18