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,
56 CurveStyle (LineStyle::defaultGraphCurve (m_curvesGraphs.numCurves ()),
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,
72 CurveStyle (LineStyle::defaultGraphCurve(m_curvesGraphs.numCurves()),
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;
406 m_modelCoords.setCoordUnitsRadius(COORD_UNITS_NON_POLAR_THETA_NUMBER);
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));
419 m_modelExport.setPointsSelectionRelations(EXPORT_POINTS_SELECTION_RELATIONS_RAW); // Best for maps
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.setLineWidthActive(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) {
516 m_modelPointMatch.setPaletteColorCandidate(COLOR_PALETTE_BLUE);
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_GUIDELINES) {
603 m_modelGuideline.loadXml (reader);
604 } else if (tag == DOCUMENT_SERIALIZE_IMAGE) {
605 LOG4CPP_ERROR_S ((*mainCat)) << "CoordSystem::loadVersion6 encountered image out of order";
606 ENGAUGE_ASSERT (false); // The image should have been read before this method was called
607 } else if (tag == DOCUMENT_SERIALIZE_POINT_MATCH) {
608 m_modelPointMatch.loadXml (reader);
609 } else if (tag == DOCUMENT_SERIALIZE_SEGMENTS) {
610 m_modelSegments.loadXml (reader);
611 } else {
612 m_successfulRead = false;
613 m_reasonForUnsuccessfulRead = QString ("%1 '%2' %3")
614 .arg (QObject::tr ("Unexpected xml token"))
615 .arg (tag)
616 .arg ("encountered");
617 break;
618 }
619 }
620 }
621
622 resetSelectedCurveNameIfNecessary ();
623}
624
625void CoordSystem::loadVersions7AndUp (QXmlStreamReader &reader)
626{
627 LOG4CPP_INFO_S ((*mainCat)) << "CoordSystem::loadVersions7AndUp";
628
629 // Import from xml. Loop to end of data or error condition occurs, whichever is first
630 while (!reader.atEnd() &&
631 !reader.hasError()) {
632 QXmlStreamReader::TokenType tokenType = loadNextFromReader(reader);
633
634 if ((reader.name() == DOCUMENT_SERIALIZE_COORD_SYSTEM) &&
635 (tokenType == QXmlStreamReader::EndElement)) {
636
637 // Exit out of loop immediately
638 break;
639 }
640
641 // Iterate to next StartElement
642 if (tokenType == QXmlStreamReader::StartElement) {
643
644 // This is a StartElement, so process it
645 QString tag = reader.name().toString();
647 m_modelAxesChecker.loadXml (reader);
648 } else if (tag == DOCUMENT_SERIALIZE_COORDS) {
649 m_modelCoords.loadXml (reader);
650 } else if (tag == DOCUMENT_SERIALIZE_CURVE) {
651 delete m_curveAxes;
652 m_curveAxes = new Curve (reader);
653 } else if (tag == DOCUMENT_SERIALIZE_CURVES_GRAPHS) {
654 m_curvesGraphs.loadXml (reader);
655 } else if (tag == DOCUMENT_SERIALIZE_DIGITIZE_CURVE) {
656 m_modelDigitizeCurve.loadXml (reader);
657 } else if (tag == DOCUMENT_SERIALIZE_EXPORT) {
658 m_modelExport.loadXml (reader);
659 } else if (tag == DOCUMENT_SERIALIZE_GENERAL || tag == DOCUMENT_SERIALIZE_COMMON) {
660 m_modelGeneral.loadXml (reader);
661 } else if (tag == DOCUMENT_SERIALIZE_GRID_DISPLAY) {
662 m_modelGridDisplay.loadXml (reader);
663 } else if (tag == DOCUMENT_SERIALIZE_GRID_REMOVAL) {
664 m_modelGridRemoval.loadXml (reader);
665 } else if (tag == DOCUMENT_SERIALIZE_GUIDELINES) {
666 m_modelGuideline.loadXml (reader);
667 } else if (tag == DOCUMENT_SERIALIZE_IMAGE) {
668 LOG4CPP_ERROR_S ((*mainCat)) << "CoordSystem::loadVersions7AndUp encountered image out of order";
669 ENGAUGE_ASSERT (false); // The image should have been read before this method was called
670 } else if (tag == DOCUMENT_SERIALIZE_POINT_MATCH) {
671 m_modelPointMatch.loadXml (reader);
672 } else if (tag == DOCUMENT_SERIALIZE_SEGMENTS) {
673 m_modelSegments.loadXml (reader);
674 } else {
675 m_successfulRead = false;
676 m_reasonForUnsuccessfulRead = QString ("Unexpected xml token '%1' encountered").arg (tag);
677 break;
678 }
679 }
680 }
681
682 resetSelectedCurveNameIfNecessary ();
683}
684
686{
687 return m_modelAxesChecker;
688}
689
691{
692 // Construct a curve-specific model
694
695 return modelColorFilter;
696}
697
699{
700 return m_modelCoords;
701}
702
704{
705 // Construct a curve-specific model
707
708 return modelCurveStyles;
709}
710
712{
713 return m_modelDigitizeCurve;
714}
715
717{
718 return m_modelExport;
719}
720
722{
723 return m_modelGeneral;
724}
725
727{
728 return m_modelGridDisplay;
729}
730
732{
733 return m_modelGridRemoval;
734}
735
737{
738 return m_modelGuideline;
739}
740
742{
743 return m_modelPointMatch;
744}
745
747{
748 return m_modelSegments;
749}
750
751void CoordSystem::movePoint (const QString &pointIdentifier,
752 const QPointF &deltaScreen)
753{
754 QString curveName = Point::curveNameFromPointIdentifier (pointIdentifier);
755
756 Curve *curve = curveForCurveName (curveName);
757 ENGAUGE_CHECK_PTR (curve);
758 curve->movePoint (pointIdentifier,
759 deltaScreen);
760}
761
762int CoordSystem::nextOrdinalForCurve (const QString &curveName) const
763{
764 CallbackNextOrdinal ftor (curveName);
765
766 Functor2wRet<const QString &, const Point &, CallbackSearchReturn> ftorWithCallback = functor_ret (ftor,
768
769 if (curveName == AXIS_CURVE_NAME) {
770 m_curveAxes->iterateThroughCurvePoints (ftorWithCallback);
771 } else {
772 m_curvesGraphs.iterateThroughCurvesPoints (ftorWithCallback);
773 }
774
775 return qFloor (ftor.nextOrdinal ());
776}
777
778QPointF CoordSystem::positionGraph (const QString &pointIdentifier) const
779{
780 QString curveName = Point::curveNameFromPointIdentifier (pointIdentifier);
781
782 const Curve *curve = curveForCurveName (curveName);
783 return curve->positionGraph (pointIdentifier);
784}
785
786QPointF CoordSystem::positionScreen (const QString &pointIdentifier) const
787{
788 QString curveName = Point::curveNameFromPointIdentifier (pointIdentifier);
789
790 const Curve *curve = curveForCurveName (curveName);
791 return curve->positionScreen (pointIdentifier);
792}
793
795{
796 QString text;
797 QTextStream str (&text);
798
799 printStream ("",
800 str);
801 std::cerr << text.toLatin1().data();
802}
803
804void CoordSystem::printStream (QString indentation,
805 QTextStream &str) const
806{
807 str << indentation << "Graph\n";
808
809 indentation += INDENTATION_DELTA;
810
811 // str << indentation << "name=" << m_name << "\n";
812 // str << indentation << "pixmap=" << m_pixmap.width() << "x" << m_pixmap.height() << "\n";
813
814 m_curveAxes->printStream (indentation,
815 str);
816 m_curvesGraphs.printStream (indentation,
817 str);
818
819 m_modelAxesChecker.printStream (indentation,
820 str);
821 m_modelCoords.printStream (indentation,
822 str);
823 m_modelDigitizeCurve.printStream (indentation,
824 str);
825 m_modelExport.printStream (indentation,
826 str);
827 m_modelGeneral.printStream (indentation,
828 str);
829 m_modelGridDisplay.printStream (indentation,
830 str);
831 m_modelGridRemoval.printStream (indentation,
832 str);
833 m_modelGuideline.printStream (indentation,
834 str);
835 m_modelPointMatch.printStream (indentation,
836 str);
837 m_modelSegments.printStream (indentation,
838 str);
839}
840
842{
843 ENGAUGE_ASSERT (!m_successfulRead);
844
845 return m_reasonForUnsuccessfulRead;
846}
847
848void CoordSystem::removePointAxis (const QString &identifier)
849{
850 LOG4CPP_INFO_S ((*mainCat)) << "CoordSystem::removePointAxis identifier=" << identifier.toLatin1 ().data ();
851
852 m_curveAxes->removePoint (identifier);
853}
854
855void CoordSystem::removePointGraph (const QString &identifier)
856{
857 LOG4CPP_INFO_S ((*mainCat)) << "CoordSystem::removePointGraph identifier=" << identifier.toLatin1 ().data ();
858
859 m_curvesGraphs.removePoint (identifier);
860}
861
863{
865
866 Functor2wRet<const QString &, const Point &, CallbackSearchReturn> ftorWithCallback = functor_ret (ftor,
868
869 curvesGraphs.iterateThroughCurvesPoints (ftorWithCallback);
870}
871
872void CoordSystem::resetSelectedCurveNameIfNecessary ()
873{
874 if (m_selectedCurveName.isEmpty () ||
875 curveForCurveName (m_selectedCurveName) == nullptr) {
876
877 // Selected curve name is empty, or the curve has been removed so we pick another. The first is arbitrarily picked
878 m_selectedCurveName = m_curvesGraphs.curvesGraphsNames().first();
879 }
880
881}
882
883void CoordSystem::saveXml (QXmlStreamWriter &writer) const
884{
885 writer.writeStartElement(DOCUMENT_SERIALIZE_COORD_SYSTEM);
886
887 // Serialize the Document variables
888 m_modelGeneral.saveXml (writer);
889 m_modelCoords.saveXml (writer);
890 m_modelDigitizeCurve.saveXml (writer);
891 m_modelExport.saveXml (writer);
892 m_modelAxesChecker.saveXml (writer);
893 m_modelGridDisplay.saveXml (writer);
894 m_modelGridRemoval.saveXml (writer);
895 m_modelGuideline.saveXml (writer);
896 m_modelPointMatch.saveXml (writer);
897 m_modelSegments.saveXml (writer);
898 m_curveAxes->saveXml (writer);
899 m_curvesGraphs.saveXml (writer);
900 writer.writeEndElement();
901}
902
904{
905 return m_selectedCurveName;
906}
907
909{
910 LOG4CPP_INFO_S ((*mainCat)) << "CoordSystem::setCurveAxes";
911
912 delete m_curveAxes;
913
914 m_curveAxes = new Curve (curveAxes);
915}
916
918{
919 LOG4CPP_INFO_S ((*mainCat)) << "CoordSystem::setCurvesGraphs";
920
921 m_curvesGraphs = curvesGraphs;
922
923 resetSelectedCurveNameIfNecessary ();
924}
925
930
932{
933 // Save the CurveFilter for each Curve
934 ColorFilterSettingsList::const_iterator itr;
935 for (itr = modelColorFilter.colorFilterSettingsList().constBegin ();
936 itr != modelColorFilter.colorFilterSettingsList().constEnd();
937 itr++) {
938
939 QString curveName = itr.key();
940 const ColorFilterSettings &colorFilterSettings = itr.value();
941
942 Curve *curve = curveForCurveName (curveName);
943 curve->setColorFilterSettings (colorFilterSettings);
944 }
945}
946
948{
949 m_modelCoords = modelCoords;
950}
951
953{
954 // Save the LineStyle and PointStyle for each Curve
955 QStringList curveNames = modelCurveStyles.curveNames();
956 QStringList::iterator itr;
957 for (itr = curveNames.begin(); itr != curveNames.end(); itr++) {
958
959 QString curveName = *itr;
960 const CurveStyle &curveStyle = modelCurveStyles.curveStyle (curveName);
961
962 Curve *curve = curveForCurveName (curveName);
963 curve->setCurveStyle (curveStyle);
964 }
965}
966
971
976
981
986
991
996
1001
1006
1008{
1009 m_selectedCurveName = selectedCurveName;
1010}
1011
1013{
1014 return m_successfulRead;
1015}
1016
1018{
1019 LOG4CPP_INFO_S ((*mainCat)) << "CoordSystem::updatePointOrdinals";
1020
1021 // The graph coordinates of all points in m_curvesGraphs must have already been updated at this point. See applyTransformation
1022 m_curvesGraphs.updatePointOrdinals (transformation);
1023}
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_GUIDELINES
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.
#define ENGAUGE_CHECK_PTR(ptr)
Drop in replacement for Q_CHECK_PTR.
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 DocumentModelGuideline modelGuideline() const
Get method for DocumentModelGuideline.
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 setModelGuideline(const DocumentModelGuideline &modelGuideline)
Set method for DocumentModelGuideline.
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 identifier. Note that PointStyle is not applied to ...
Container for LineStyle and PointStyle for one Curve.
Definition CurveStyle.h:19
Model for DlgSettingsCurveProperties and CmdSettingsCurveProperties.
Definition CurveStyles.h:23
Container for one set of digitized Points.
Definition Curve.h:34
void movePoint(const QString &pointIdentifier, const QPointF &deltaScreen)
Translate the position of a point by the specified distance vector.
Definition Curve.cpp:425
void setCurveStyle(const CurveStyle &curveStyle)
Set curve style.
Definition Curve.cpp:567
void setColorFilterSettings(const ColorFilterSettings &colorFilterSettings)
Set color filter.
Definition Curve.cpp:550
void setCurveName(const QString &curveName)
Change the curve name.
Definition Curve.cpp:555
QPointF positionScreen(const QString &pointIdentifier) const
Return the position, in screen coordinates, of the specified Point.
Definition Curve.cpp:477
QPointF positionGraph(const QString &pointIdentifier) const
Return the position, in graph coordinates, of the specified Point.
Definition Curve.cpp:460
int numPoints() const
Number of points.
Definition Curve.cpp:434
Container for all graph curves. The axes point curve is external to this class.
QStringList curvesGraphsNames() const
List of graph curve names.
Model for DlgSettingsAxesChecker and CmdSettingsAxesChecker.
Model for DlgSettingsColorFilter and CmdSettingsColorFilter.
Model for DlgSettingsCoords and CmdSettingsCoords.
Model for DlgSettingsDigitizeCurve and CmdSettingsDigitizeCurve.
Model for DlgSettingsExportFormat and CmdSettingsExportFormat.
Model for DlgSettingsGeneral and CmdSettingsGeneral.
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.
double stopX() const
Get method for x grid line upper bound (inclusive).
double stopY() const
Get method for y grid line upper bound (inclusive).
double stepY() const
Get method for y grid line increment.
double startY() const
Get method for y grid line lower bound (inclusive).
Model for DlgSettingsGridRemoval and CmdSettingsGridRemoval.
void setStopY(double stopY)
Set method for y stop.
void setCountX(int countX)
Set method for x count.
void setStepX(double stepX)
Set method for x step.
void setStopX(double stopX)
Set method for x stop.
void setStartY(double startY)
Set method for y start.
int countY() const
Get method for y count.
int countX() const
Get method for x count.
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 managing the coordinate values corresponding Guidelines.
Model for DlgSettingsPointMatch and CmdSettingsPointMatch.
Model for DlgSettingsSegments and CmdSettingsSegments.
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
#define LOG4CPP_ERROR_S(logger)
Definition convenience.h:12