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