Engauge Digitizer  2
CoordSystem.h
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 
7 #ifndef COORD_SYSTEM_H
8 #define COORD_SYSTEM_H
9 
10 #include "CoordSystemInterface.h"
11 #include "CurvesGraphs.h"
12 #include "CurveStyles.h"
16 #include "DocumentModelCoords.h"
19 #include "DocumentModelGeneral.h"
23 #include "DocumentModelSegments.h"
24 #include "PointStyle.h"
25 #include <QList>
26 #include <QPixmap>
27 #include <QString>
28 #include <QStringList>
29 #include <QXmlStreamReader>
30 
31 class Curve;
32 class QByteArray;
33 class QDataStream;
34 class QImage;
35 class QTransform;
36 class QXmlStreamReader;
37 class QXmlStreamWriter;
38 class Transformation;
39 
42 class CoordSystem : public CoordSystemInterface
43 {
44 public:
46  CoordSystem ();
47  ~CoordSystem ();
48 
50  CoordSystem (const QString &fileName);
51 
52  virtual void addGraphCurveAtEnd (const QString &curveName);
53  virtual void addPointAxisWithGeneratedIdentifier (const QPointF &posScreen,
54  const QPointF &posGraph,
55  QString &identifier,
56  double ordinal,
57  bool isXOnly);
58  virtual void addPointAxisWithSpecifiedIdentifier (const QPointF &posScreen,
59  const QPointF &posGraph,
60  const QString &identifier,
61  double ordinal,
62  bool isXOnly);
63  virtual void addPointGraphWithGeneratedIdentifier (const QString &curveName,
64  const QPointF &posScreen,
65  QString &generatedIentifier,
66  double ordinal);
67  virtual void addPointGraphWithSpecifiedIdentifier (const QString &curveName,
68  const QPointF &posScreen,
69  const QString &identifier,
70  double ordinal);
72  virtual void checkAddPointAxis (const QPointF &posScreen,
73  const QPointF &posGraph,
74  bool &isError,
75  QString &errorMessage,
76  bool isXOnly,
77  DocumentAxesPointsRequired documentAxesPointsRequired);
78  virtual void checkEditPointAxis (const QString &pointIdentifier,
79  const QPointF &posScreen,
80  const QPointF &posGraph,
81  bool &isError,
82  QString &errorMessage,
83  DocumentAxesPointsRequired documentAxesPointsRequired);
84  virtual const Curve &curveAxes () const;
85  virtual Curve *curveForCurveName (const QString &curveName);
86  virtual const Curve *curveForCurveName (const QString &curveName) const;
87  virtual const CurvesGraphs &curvesGraphs () const;
88  virtual QStringList curvesGraphsNames () const;
89  virtual int curvesGraphsNumPoints (const QString &curveName) const;
90  virtual void editPointAxis (const QPointF &posGraph,
91  const QString &identifier);
92  virtual void editPointGraph (bool isX,
93  bool isY,
94  double x,
95  double y,
96  const QStringList &identifiers,
97  const Transformation &transformation);
98 
101  bool isXOnly (const QString &pointIdentifier) const;
102 
103  virtual void iterateThroughCurvePointsAxes (const Functor2wRet<const QString &, const Point &, CallbackSearchReturn> &ftorWithCallback);
104  virtual void iterateThroughCurvePointsAxes (const Functor2wRet<const QString &, const Point &, CallbackSearchReturn> &ftorWithCallback) const;
105  virtual void iterateThroughCurveSegments (const QString &curveName,
106  const Functor2wRet<const Point &, const Point &, CallbackSearchReturn> &ftorWithCallback) const;
107  virtual void iterateThroughCurvesPointsGraphs (const Functor2wRet<const QString &, const Point &, CallbackSearchReturn> &ftorWithCallback);
108  virtual void iterateThroughCurvesPointsGraphs (const Functor2wRet<const QString &, const Point &, CallbackSearchReturn> &ftorWithCallback) const;
109  virtual bool loadCurvesFile (const QString &curvesFile);
110 
112  void loadPreVersion6 (QDataStream &str,
113  double version,
114  DocumentAxesPointsRequired &documentAxesPointsRequired);
116  void loadVersion6 (QXmlStreamReader &reader,
117  DocumentAxesPointsRequired &documentAxesPointsRequired);
119  void loadVersions7AndUp (QXmlStreamReader &reader);
120 
123  virtual DocumentModelCoords modelCoords () const;
124  virtual CurveStyles modelCurveStyles() const;
126  virtual DocumentModelExportFormat modelExport() const;
127  virtual DocumentModelGeneral modelGeneral() const;
131  virtual DocumentModelSegments modelSegments() const;
132  virtual void movePoint (const QString &pointIdentifier,
133  const QPointF &deltaScreen);
134  virtual int nextOrdinalForCurve (const QString &curveName) const;
135  virtual QPointF positionGraph (const QString &pointIdentifier) const;
136  virtual QPointF positionScreen (const QString &pointIdentifier) const;
137  virtual void print () const;
138  virtual void printStream (QString indentation,
139  QTextStream &str) const;
140  virtual QString reasonForUnsuccessfulRead () const;
141  virtual void removePointAxis (const QString &identifier);
142  virtual void removePointGraph (const QString &identifier);
144  virtual void saveXml (QXmlStreamWriter &writer) const;
145  virtual QString selectedCurveName () const;
146  virtual void setCurveAxes (const Curve &curveAxes);
147  virtual void setCurvesGraphs (const CurvesGraphs &curvesGraphs);
150  virtual void setModelCoords (const DocumentModelCoords &modelCoords);
151  virtual void setModelCurveStyles(const CurveStyles &modelCurveStyles);
154  virtual void setModelGeneral (const DocumentModelGeneral &modelGeneral);
159  virtual void setSelectedCurveName(const QString &selectedCurveName);
160  virtual bool successfulRead () const;
161  virtual void updatePointOrdinals (const Transformation &transformation);
162 
163 private:
164 
165  bool bytesIndicatePreVersion6 (const QByteArray &bytes) const;
166  void initializeUnsetGridRemovalFromGridDisplay (double version);
167  void resetSelectedCurveNameIfNecessary ();
168 
169  // Read variables
170  bool m_successfulRead;
171  QString m_reasonForUnsuccessfulRead;
172 
173  // Curves
174  Curve *m_curveAxes;
175  CurvesGraphs m_curvesGraphs;
176 
177  // Model objects for the various settings
178  DocumentModelAxesChecker m_modelAxesChecker;
179  // DocumentModelColorFilter is not here since filtering settings are stored inside the Curve class
180  DocumentModelCoords m_modelCoords;
181  // CurveStyles is not here since curve properties are stored inside the Curve class
182  DocumentModelDigitizeCurve m_modelDigitizeCurve;
183  DocumentModelExportFormat m_modelExport;
184  DocumentModelGeneral m_modelGeneral;
185  DocumentModelGridDisplay m_modelGridDisplay;
186  DocumentModelGridRemoval m_modelGridRemoval;
187  DocumentModelPointMatch m_modelPointMatch;
188  DocumentModelSegments m_modelSegments;
189 
190  // Each coordinate systems manages its own selected curve name
191  QString m_selectedCurveName;
192 };
193 
194 #endif // COORD_SYSTEM_H
CoordSystem::modelGridDisplay
virtual DocumentModelGridDisplay modelGridDisplay() const
Get method for DocumentModelGridDisplay.
Definition: CoordSystem.cpp:720
DocumentModelAxesChecker.h
CoordSystem::modelGeneral
virtual DocumentModelGeneral modelGeneral() const
Get method for DocumentModelGeneral.
Definition: CoordSystem.cpp:715
CurvesGraphs.h
CoordSystem::loadVersions7AndUp
void loadVersions7AndUp(QXmlStreamReader &reader)
Load from file in versions 7 and 8 formats. Number of axes points is already defined at Document leve...
Definition: CoordSystem.cpp:622
CoordSystem::editPointAxis
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...
Definition: CoordSystem.cpp:277
DocumentModelGridRemoval.h
CoordSystem::updatePointOrdinals
virtual void updatePointOrdinals(const Transformation &transformation)
Update point ordinals after point addition/removal or dragging.
Definition: CoordSystem.cpp:998
DocumentModelGeneral.h
PointStyle.h
DocumentModelGridDisplay.h
CoordSystem::setSelectedCurveName
virtual void setSelectedCurveName(const QString &selectedCurveName)
Save curve name that is selected for the current coordinate system, for the next time the coordinate ...
Definition: CoordSystem.cpp:988
CoordSystem::CoordSystem
CoordSystem()
Single constructor.
Definition: CoordSystem.cpp:39
DocumentModelGridDisplay
Model for DlgSettingsGridDisplay and CmdSettingsGridDisplay.
Definition: DocumentModelGridDisplay.h:17
DocumentAxesPointsRequired
DocumentAxesPointsRequired
Definition: DocumentAxesPointsRequired.h:9
CoordSystem::modelSegments
virtual DocumentModelSegments modelSegments() const
Get method for DocumentModelSegments.
Definition: CoordSystem.cpp:735
DocumentModelExportFormat.h
CoordSystem::setModelSegments
virtual void setModelSegments(const DocumentModelSegments &modelSegments)
Set method for DocumentModelSegments.
Definition: CoordSystem.cpp:983
CoordSystem::iterateThroughCurveSegments
virtual void iterateThroughCurveSegments(const QString &curveName, const Functor2wRet< const Point &, const Point &, CallbackSearchReturn > &ftorWithCallback) const
See Curve::iterateThroughCurveSegments, for any axes or graph curve.
Definition: CoordSystem.cpp:355
Transformation
Affine transformation between screen and graph coordinates, based on digitized axis points.
Definition: Transformation.h:30
CoordSystem::modelAxesChecker
virtual DocumentModelAxesChecker modelAxesChecker() const
Get method for DocumentModelAxesChecker.
Definition: CoordSystem.cpp:679
CoordSystem::setCurvesGraphs
virtual void setCurvesGraphs(const CurvesGraphs &curvesGraphs)
Let CmdAbstract classes overwrite CurvesGraphs. Applies to current coordinate system.
Definition: CoordSystem.cpp:903
CurveStyles.h
CoordSystem::loadVersion6
void loadVersion6(QXmlStreamReader &reader, DocumentAxesPointsRequired &documentAxesPointsRequired)
Load from file in version 6 format. Number of axes points is read in and passed to Document.
Definition: CoordSystem.cpp:561
Curve
Container for one set of digitized Points.
Definition: Curve.h:32
DocumentModelDigitizeCurve.h
CoordSystem::curvesGraphs
virtual const CurvesGraphs & curvesGraphs() const
Make all Curves available, read only, for CmdAbstract classes only.
Definition: CoordSystem.cpp:262
DocumentModelColorFilter
Model for DlgSettingsColorFilter and CmdSettingsColorFilter.
Definition: DocumentModelColorFilter.h:20
CoordSystem::setModelGridDisplay
virtual void setModelGridDisplay(const DocumentModelGridDisplay &modelGridDisplay)
Set method for DocumentModelGridDisplay.
Definition: CoordSystem.cpp:968
CoordSystem::printStream
virtual void printStream(QString indentation, QTextStream &str) const
Debugging method that supports print method of this class and printStream method of some other class(...
Definition: CoordSystem.cpp:793
CoordSystem::setModelPointMatch
void setModelPointMatch(const DocumentModelPointMatch &modelPointMatch)
Set method for DocumentModelPointMatch.
Definition: CoordSystem.cpp:978
CoordSystem::setModelExport
virtual void setModelExport(const DocumentModelExportFormat &modelExport)
Set method for DocumentModelExportFormat.
Definition: CoordSystem.cpp:958
DocumentModelGeneral
Model for DlgSettingsGeneral and CmdSettingsGeneral.
Definition: DocumentModelGeneral.h:15
CoordSystem::modelPointMatch
virtual DocumentModelPointMatch modelPointMatch() const
Get method for DocumentModelPointMatch.
Definition: CoordSystem.cpp:730
DocumentAxesPointsRequired.h
CoordSystem::editPointGraph
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.
Definition: CoordSystem.cpp:288
CoordSystem::addPointsInCurvesGraphs
virtual void addPointsInCurvesGraphs(CurvesGraphs &curvesGraphs)
Add all points identified in the specified CurvesGraphs. See also removePointsInCurvesGraphs.
Definition: CoordSystem.cpp:156
CoordSystem::curvesGraphsNames
virtual QStringList curvesGraphsNames() const
See CurvesGraphs::curvesGraphsNames.
Definition: CoordSystem.cpp:267
CoordSystem::modelExport
virtual DocumentModelExportFormat modelExport() const
Get method for DocumentModelExportFormat.
Definition: CoordSystem.cpp:710
CoordSystem::curveForCurveName
virtual Curve * curveForCurveName(const QString &curveName)
See CurvesGraphs::curveForCurveName, although this also works for AXIS_CURVE_NAME.
Definition: CoordSystem.cpp:236
CoordSystem::removePointAxis
virtual void removePointAxis(const QString &identifier)
Perform the opposite of addPointAxis.
Definition: CoordSystem.cpp:835
CoordSystem::positionScreen
virtual QPointF positionScreen(const QString &pointIdentifier) const
See Curve::positionScreen.
Definition: CoordSystem.cpp:775
CoordSystem::isXOnly
bool isXOnly(const QString &pointIdentifier) const
Return true if y coordinate is undefined, otherwise x coordinae is undefined in DOCUMENT_AXES_POINT_R...
Definition: CoordSystem.cpp:336
CoordSystem::print
virtual void print() const
Debugging method for printing directly from symbolic debugger.
Definition: CoordSystem.cpp:783
CoordSystem::setModelCurveStyles
virtual void setModelCurveStyles(const CurveStyles &modelCurveStyles)
Set method for CurveStyles.
Definition: CoordSystem.cpp:938
CoordSystem::movePoint
virtual void movePoint(const QString &pointIdentifier, const QPointF &deltaScreen)
See Curve::movePoint.
Definition: CoordSystem.cpp:740
CoordSystem::modelDigitizeCurve
virtual DocumentModelDigitizeCurve modelDigitizeCurve() const
Get method for DocumentModelDigitizeCurve.
Definition: CoordSystem.cpp:705
CoordSystem::nextOrdinalForCurve
virtual int nextOrdinalForCurve(const QString &curveName) const
Default next ordinal value for specified curve.
Definition: CoordSystem.cpp:751
CoordSystem::modelCoords
virtual DocumentModelCoords modelCoords() const
Get method for DocumentModelCoords.
Definition: CoordSystem.cpp:692
CoordSystem::modelCurveStyles
virtual CurveStyles modelCurveStyles() const
Get method for CurveStyles.
Definition: CoordSystem.cpp:697
DocumentModelExportFormat
Model for DlgSettingsExportFormat and CmdSettingsExportFormat.
Definition: DocumentModelExportFormat.h:22
DocumentModelSegments
Model for DlgSettingsSegments and CmdSettingsSegments.
Definition: DocumentModelSegments.h:16
CoordSystem::setModelGridRemoval
virtual void setModelGridRemoval(const DocumentModelGridRemoval &modelGridRemoval)
Set method for DocumentModelGridRemoval.
Definition: CoordSystem.cpp:973
CoordSystem::curveAxes
virtual const Curve & curveAxes() const
Get method for axis curve.
Definition: CoordSystem.cpp:229
CurvesGraphs
Container for all graph curves. The axes point curve is external to this class.
Definition: CurvesGraphs.h:23
CoordSystem::setCurveAxes
virtual void setCurveAxes(const Curve &curveAxes)
Let CmdAbstract classes overwrite axes Curve. Applies to current coordinate system.
Definition: CoordSystem.cpp:894
CoordSystem::addPointAxisWithSpecifiedIdentifier
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:100
CoordSystemInterface
Interface common to CoordSystemContext and CoordSystem classes.
Definition: CoordSystemInterface.h:33
CoordSystem::addPointGraphWithGeneratedIdentifier
virtual void addPointGraphWithGeneratedIdentifier(const QString &curveName, const QPointF &posScreen, QString &generatedIentifier, double ordinal)
Add a single graph point with a generated point identifier.
Definition: CoordSystem.cpp:121
CoordSystem::iterateThroughCurvePointsAxes
virtual void iterateThroughCurvePointsAxes(const Functor2wRet< const QString &, const Point &, CallbackSearchReturn > &ftorWithCallback)
See Curve::iterateThroughCurvePoints, for the axes curve.
Definition: CoordSystem.cpp:341
CoordSystem::saveXml
virtual void saveXml(QXmlStreamWriter &writer) const
Save graph to xml.
Definition: CoordSystem.cpp:870
CoordSystem::setModelColorFilter
virtual void setModelColorFilter(const DocumentModelColorFilter &modelColorFilter)
Set method for DocumentModelColorFilter.
Definition: CoordSystem.cpp:917
CoordSystem::setModelCoords
virtual void setModelCoords(const DocumentModelCoords &modelCoords)
Set method for DocumentModelCoords.
Definition: CoordSystem.cpp:933
CoordSystem::setModelGeneral
virtual void setModelGeneral(const DocumentModelGeneral &modelGeneral)
Set method for DocumentModelGeneral.
Definition: CoordSystem.cpp:963
DocumentModelDigitizeCurve
Model for DlgSettingsDigitizeCurve and CmdSettingsDigitizeCurve.
Definition: DocumentModelDigitizeCurve.h:17
CoordSystem::removePointGraph
virtual void removePointGraph(const QString &identifier)
Perform the opposite of addPointGraph.
Definition: CoordSystem.cpp:842
DocumentModelPointMatch
Model for DlgSettingsPointMatch and CmdSettingsPointMatch.
Definition: DocumentModelPointMatch.h:16
CoordSystem::selectedCurveName
virtual QString selectedCurveName() const
Currently selected curve name. This is used to set the selected curve combobox in MainWindow.
Definition: CoordSystem.cpp:889
DocumentModelAxesChecker
Model for DlgSettingsAxesChecker and CmdSettingsAxesChecker.
Definition: DocumentModelAxesChecker.h:17
CoordSystem::~CoordSystem
~CoordSystem()
Definition: CoordSystem.cpp:63
CoordSystem::removePointsInCurvesGraphs
virtual void removePointsInCurvesGraphs(CurvesGraphs &curvesGraphs)
Remove all points identified in the specified CurvesGraphs. See also addPointsInCurvesGraphs.
Definition: CoordSystem.cpp:849
DocumentModelPointMatch.h
CoordSystem::positionGraph
virtual QPointF positionGraph(const QString &pointIdentifier) const
See Curve::positionGraph.
Definition: CoordSystem.cpp:767
CoordSystem::modelColorFilter
virtual DocumentModelColorFilter modelColorFilter() const
Get method for DocumentModelColorFilter.
Definition: CoordSystem.cpp:684
CoordSystem::checkEditPointAxis
virtual void checkEditPointAxis(const QString &pointIdentifier, const QPointF &posScreen, const QPointF &posGraph, bool &isError, QString &errorMessage, DocumentAxesPointsRequired documentAxesPointsRequired)
Check before calling editPointAxis.
Definition: CoordSystem.cpp:205
CoordSystem::setModelDigitizeCurve
virtual void setModelDigitizeCurve(const DocumentModelDigitizeCurve &modelDigitizeCurve)
Set method for DocumentModelDigitizeCurve.
Definition: CoordSystem.cpp:953
DocumentModelGridRemoval
Model for DlgSettingsGridRemoval and CmdSettingsGridRemoval. The settings are unstable until the user...
Definition: DocumentModelGridRemoval.h:16
DocumentModelColorFilter.h
CurveStyles
Model for DlgSettingsCurveProperties and CmdSettingsCurveProperties.
Definition: CurveStyles.h:21
CoordSystemInterface.h
DocumentModelCoords
Model for DlgSettingsCoords and CmdSettingsCoords.
Definition: DocumentModelCoords.h:19
CoordSystem::modelGridRemoval
virtual DocumentModelGridRemoval modelGridRemoval() const
Get method for DocumentModelGridRemoval.
Definition: CoordSystem.cpp:725
CoordSystem::loadCurvesFile
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...
Definition: CoordSystem.cpp:380
CoordSystem::addPointAxisWithGeneratedIdentifier
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:78
DocumentModelCoords.h
CoordSystem
Storage of data belonging to one coordinate system.
Definition: CoordSystem.h:41
CoordSystem::loadPreVersion6
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.
Definition: CoordSystem.cpp:387
CoordSystem::reasonForUnsuccessfulRead
virtual QString reasonForUnsuccessfulRead() const
Return an informative text message explaining why startup loading failed. Applies if successfulRead r...
Definition: CoordSystem.cpp:828
CoordSystem::setModelAxesChecker
virtual void setModelAxesChecker(const DocumentModelAxesChecker &modelAxesChecker)
Set method for DocumentModelAxesChecker.
Definition: CoordSystem.cpp:912
CoordSystem::iterateThroughCurvesPointsGraphs
virtual void iterateThroughCurvesPointsGraphs(const Functor2wRet< const QString &, const Point &, CallbackSearchReturn > &ftorWithCallback)
See Curve::iterateThroughCurvePoints, for all the graphs curves.
Definition: CoordSystem.cpp:366
DocumentModelSegments.h
CoordSystem::curvesGraphsNumPoints
virtual int curvesGraphsNumPoints(const QString &curveName) const
See CurvesGraphs::curvesGraphsNumPoints.
Definition: CoordSystem.cpp:272
CoordSystem::successfulRead
virtual bool successfulRead() const
Return true if startup loading succeeded. If the loading failed then reasonForUnsuccessfulRed will ex...
Definition: CoordSystem.cpp:993
CoordSystem::addGraphCurveAtEnd
virtual void addGraphCurveAtEnd(const QString &curveName)
Add new graph curve to the list of existing graph curves.
Definition: CoordSystem.cpp:68
CoordSystem::checkAddPointAxis
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...
Definition: CoordSystem.cpp:180
CoordSystem::addPointGraphWithSpecifiedIdentifier
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...
Definition: CoordSystem.cpp:139