Engauge Digitizer 2
Loading...
Searching...
No Matches
CurvesGraphs Class Reference

Container for all graph curves. The axes point curve is external to this class. More...

#include <CurvesGraphs.h>

Collaboration diagram for CurvesGraphs:
Collaboration graph

Public Member Functions

 CurvesGraphs ()
void addGraphCurveAtEnd (const Curve &curve)
 Append new graph Curve to end of Curve list.
void addPoint (const Point &point)
 Append new Point to the specified Curve.
CurvecurveForCurveName (const QString &curveName)
 Return the axis or graph curve for the specified curve name.
const CurvecurveForCurveName (const QString &curveName) const
 Return the axis or graph curve for the specified curve name.
QStringList curvesGraphsNames () const
 List of graph curve names.
int curvesGraphsNumPoints (const QString &curveName) const
 Point count.
void editPointGraph (bool isX, bool isY, double x, double y, const QStringList &identifiers, const Transformation &transformation)
 Set the x and/or y coordinate values of the specified points.
void iterateThroughCurvePoints (const QString &curveNameWanted, const Functor2wRet< const QString &, const Point &, CallbackSearchReturn > &ftorWithCallback)
 Apply functor to Points in the specified axis or graph Curve.
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 iterateThroughCurvesPoints (const Functor2wRet< const QString &, const Point &, CallbackSearchReturn > &ftorWithCallback)
 Apply functor to Points on all of the Curves.
void iterateThroughCurvesPoints (const Functor2wRet< const QString &, const Point &, CallbackSearchReturn > &ftorWithCallback) const
 Apply functor to Points on all of the Curves.
void loadPreVersion6 (QDataStream &str)
 Load from serialized binary pre-version 6 file.
void loadXml (QXmlStreamReader &reader)
 Load from serialized xml post-version 5 file.
int numCurves () const
 Current number of graphs curves.
void printStream (QString indentation, QTextStream &str) const
 Debugging method that supports print method of this class and printStream method of some other class(es)
void removePoint (const QString &pointIdentifier)
 Remove the Point from its Curve.
void saveXml (QXmlStreamWriter &writer) const
 Serialize curves.
void updatePointOrdinals (const Transformation &transformation)
 Update point ordinals to be consistent with their CurveStyle and x/theta coordinate.

Detailed Description

Container for all graph curves. The axes point curve is external to this class.

Definition at line 24 of file CurvesGraphs.h.

Constructor & Destructor Documentation

◆ CurvesGraphs()

CurvesGraphs::CurvesGraphs ( )

Definition at line 20 of file CurvesGraphs.cpp.

21{
22}

Member Function Documentation

◆ addGraphCurveAtEnd()

void CurvesGraphs::addGraphCurveAtEnd ( const Curve & curve)

Append new graph Curve to end of Curve list.

Definition at line 24 of file CurvesGraphs.cpp.

25{
26 m_curvesGraphs.push_back (curve);
27}

◆ addPoint()

void CurvesGraphs::addPoint ( const Point & point)

Append new Point to the specified Curve.

Definition at line 29 of file CurvesGraphs.cpp.

30{
31 QString curveName = Point::curveNameFromPointIdentifier (point.identifier());
32
33 Curve *curve = curveForCurveName (curveName);
34 curve->addPoint (point);
35}
void addPoint(const Point &point)
Add Point to this Curve.
Definition Curve.cpp:134
Curve * curveForCurveName(const QString &curveName)
Return the axis or graph curve for the specified curve name.
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

◆ curveForCurveName() [1/2]

Curve * CurvesGraphs::curveForCurveName ( const QString & curveName)

Return the axis or graph curve for the specified curve name.

Definition at line 37 of file CurvesGraphs.cpp.

38{
39 // Search for curve with matching name
40 CurveList::iterator itr;
41 for (itr = m_curvesGraphs.begin (); itr != m_curvesGraphs.end (); itr++) {
42
43 Curve &curve = *itr;
44 if (curveName == curve.curveName ()) {
45 return &curve;
46 }
47 }
48
49 return nullptr;
50}
QString curveName() const
Name of this Curve.
Definition Curve.cpp:144

◆ curveForCurveName() [2/2]

const Curve * CurvesGraphs::curveForCurveName ( const QString & curveName) const

Return the axis or graph curve for the specified curve name.

Definition at line 52 of file CurvesGraphs.cpp.

53{
54 // Search for curve with matching name
55 CurveList::const_iterator itr;
56 for (itr = m_curvesGraphs.begin (); itr != m_curvesGraphs.end (); itr++) {
57
58 const Curve &curve = *itr;
59 if (curveName == curve.curveName ()) {
60 return &curve;
61 }
62 }
63
64 return nullptr;
65}

◆ curvesGraphsNames()

QStringList CurvesGraphs::curvesGraphsNames ( ) const

List of graph curve names.

Definition at line 67 of file CurvesGraphs.cpp.

68{
69 QStringList names;
70
71 CurveList::const_iterator itr;
72 for (itr = m_curvesGraphs.begin (); itr != m_curvesGraphs.end (); itr++) {
73
74 const Curve &curve = *itr;
75 names << curve.curveName ();
76 }
77
78 return names;
79}

◆ curvesGraphsNumPoints()

int CurvesGraphs::curvesGraphsNumPoints ( const QString & curveName) const

Point count.

Definition at line 81 of file CurvesGraphs.cpp.

82{
83 // Search for curve with matching name
84 CurveList::const_iterator itr;
85 for (itr = m_curvesGraphs.begin (); itr != m_curvesGraphs.end (); itr++) {
86
87 const Curve &curve = *itr;
88 if (curve.curveName () == curveName) {
89 return curve.numPoints ();
90 }
91 }
92
93 return 0;
94}
int numPoints() const
Number of points.
Definition Curve.cpp:434

◆ editPointGraph()

void CurvesGraphs::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.

Definition at line 96 of file CurvesGraphs.cpp.

102{
103 CurveList::iterator itr;
104 for (itr = m_curvesGraphs.begin (); itr != m_curvesGraphs.end (); itr++) {
105
106 Curve &curve = *itr;
107 curve.editPointGraph (isX,
108 isY,
109 x,
110 y,
111 identifiers,
112 transformation);
113 }
114}
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. This method does not apply to an axis point.
Definition Curve.cpp:171

◆ iterateThroughCurvePoints()

void CurvesGraphs::iterateThroughCurvePoints ( const QString & curveNameWanted,
const Functor2wRet< const QString &, const Point &, CallbackSearchReturn > & ftorWithCallback )

Apply functor to Points in the specified axis or graph Curve.

Definition at line 116 of file CurvesGraphs.cpp.

118{
119 // Search for curve with matching name
120 CurveList::const_iterator itr;
121 for (itr = m_curvesGraphs.begin (); itr != m_curvesGraphs.end (); itr++) {
122
123 const Curve &curve = *itr;
124 if (curve.curveName () == curveNameWanted) {
125
126 curve.iterateThroughCurvePoints (ftorWithCallback);
127 return;
128 }
129 }
130
131 LOG4CPP_ERROR_S ((*mainCat)) << "CurvesGraphs::iterateThroughCurvePoints encountered unexpected curve "
132 << curveNameWanted.toLatin1().data();
133 ENGAUGE_ASSERT (false);
134}
#define ENGAUGE_ASSERT(cond)
Drop in replacement for Q_ASSERT.
log4cpp::Category * mainCat
Definition Logger.cpp:14
void iterateThroughCurvePoints(const Functor2wRet< const QString &, const Point &, CallbackSearchReturn > &ftorWithCallback) const
Apply functor to Points on Curve.
Definition Curve.cpp:303
#define LOG4CPP_ERROR_S(logger)
Definition convenience.h:12

◆ iterateThroughCurveSegments()

void CurvesGraphs::iterateThroughCurveSegments ( const QString & curveNameWanted,
const Functor2wRet< const Point &, const Point &, CallbackSearchReturn > & ftorWithCallback ) const

Apply functor to segments on the specified axis or graph Curve.

Definition at line 136 of file CurvesGraphs.cpp.

138{
139 // Search for curve with matching name
140 CurveList::const_iterator itr;
141 for (itr = m_curvesGraphs.begin (); itr != m_curvesGraphs.end (); itr++) {
142
143 const Curve &curve = *itr;
144 if (curve.curveName () == curveNameWanted) {
145
146 curve.iterateThroughCurveSegments (ftorWithCallback);
147 return;
148 }
149 }
150
151 LOG4CPP_ERROR_S ((*mainCat)) << "CurvesGraphs::iterateThroughCurveSegments encountered unexpected curve "
152 << curveNameWanted.toLatin1().data();
153 ENGAUGE_ASSERT (false);
154}
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:318

◆ iterateThroughCurvesPoints() [1/2]

void CurvesGraphs::iterateThroughCurvesPoints ( const Functor2wRet< const QString &, const Point &, CallbackSearchReturn > & ftorWithCallback)

Apply functor to Points on all of the Curves.

Definition at line 156 of file CurvesGraphs.cpp.

157{
158 CurveList::const_iterator itr;
159 for (itr = m_curvesGraphs.begin (); itr != m_curvesGraphs.end (); itr++) {
160
161 const Curve &curve = *itr;
162 curve.iterateThroughCurvePoints (ftorWithCallback);
163 }
164}

◆ iterateThroughCurvesPoints() [2/2]

void CurvesGraphs::iterateThroughCurvesPoints ( const Functor2wRet< const QString &, const Point &, CallbackSearchReturn > & ftorWithCallback) const

Apply functor to Points on all of the Curves.

Definition at line 166 of file CurvesGraphs.cpp.

167{
168 CurveList::const_iterator itr;
169 for (itr = m_curvesGraphs.begin (); itr != m_curvesGraphs.end (); itr++) {
170
171 const Curve &curve = *itr;
172 curve.iterateThroughCurvePoints (ftorWithCallback);
173 }
174}

◆ loadPreVersion6()

void CurvesGraphs::loadPreVersion6 ( QDataStream & str)

Load from serialized binary pre-version 6 file.

Definition at line 176 of file CurvesGraphs.cpp.

177{
178 LOG4CPP_INFO_S ((*mainCat)) << "CurvesGraphs::loadPreVersion6";
179
180 int i;
181
182 // Remove previous Curves. There is a DEFAULT_GRAPH_CURVE_NAME by default
183 m_curvesGraphs.clear();
184
185 qint32 numberCurvesGraphs;
186 str >> numberCurvesGraphs;
187 for (i = 0; i < numberCurvesGraphs; i++) {
188 Curve curve (str);
189 m_curvesGraphs.append (curve);
190 }
191
192 qint32 numberCurvesMeasures;
193 str >> numberCurvesMeasures;
194 for (i = 0; i < numberCurvesMeasures; i++) {
195 Curve curve (str);
196
197 // Measures get dropped on the floor
198 }
199}
#define LOG4CPP_INFO_S(logger)
Definition convenience.h:18

◆ loadXml()

void CurvesGraphs::loadXml ( QXmlStreamReader & reader)

Load from serialized xml post-version 5 file.

Definition at line 201 of file CurvesGraphs.cpp.

202{
203 LOG4CPP_INFO_S ((*mainCat)) << "CurvesGraphs::loadXml";
204
205 bool success = true;
206
207 // Remove previous Curves. There is a DEFAULT_GRAPH_CURVE_NAME by default
208 m_curvesGraphs.clear();
209
210 // Read until end of this subtree
211 while ((reader.tokenType() != QXmlStreamReader::EndElement) ||
212 (reader.name() != DOCUMENT_SERIALIZE_CURVES_GRAPHS)){
213
214 loadNextFromReader(reader);
215 if (reader.atEnd()) {
216 success = false;
217 break;
218 }
219
220 if ((reader.tokenType() == QXmlStreamReader::StartElement) &&
221 (reader.name () == DOCUMENT_SERIALIZE_CURVE)) {
222
223 Curve curve (reader);
224
225 // Version 6 of Engauge let users create multiple curves with the same name. Reading a file with duplicate
226 // curve names can result in crashes and/or corruption, so we deconflict duplicate curve names here
227 QString DUPLICATE = QString ("-%1").arg (QObject::tr ("DUPLICATE"));
228 QString curveName = curve.curveName();
229 while (curvesGraphsNames().contains (curveName)) {
230 curveName += DUPLICATE;
231 }
232 curve.setCurveName (curveName); // No effect if curve name was not a duplicate
233
234 // Add the curve
235 m_curvesGraphs.push_back (curve);
236
237 }
238 }
239
240 if (!success) {
241 reader.raiseError (QObject::tr ("Cannot read graph curves data"));
242 }
243}
const QString DOCUMENT_SERIALIZE_CURVES_GRAPHS
const QString DOCUMENT_SERIALIZE_CURVE
QXmlStreamReader::TokenType loadNextFromReader(QXmlStreamReader &reader)
Load next token from xml reader.
Definition Xml.cpp:14
QStringList curvesGraphsNames() const
List of graph curve names.

◆ numCurves()

int CurvesGraphs::numCurves ( ) const

Current number of graphs curves.

Definition at line 245 of file CurvesGraphs.cpp.

246{
247 return m_curvesGraphs.count ();
248}

◆ printStream()

void CurvesGraphs::printStream ( QString indentation,
QTextStream & str ) const

Debugging method that supports print method of this class and printStream method of some other class(es)

Definition at line 250 of file CurvesGraphs.cpp.

252{
253 str << indentation << "CurvesGraphs\n";
254
255 indentation += INDENTATION_DELTA;
256
257 CurveList::const_iterator itr;
258 for (itr = m_curvesGraphs.begin (); itr != m_curvesGraphs.end (); itr++) {
259
260 const Curve &curve = *itr;
261 curve.printStream (indentation,
262 str);
263 }
264}
const QString INDENTATION_DELTA
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:494

◆ removePoint()

void CurvesGraphs::removePoint ( const QString & pointIdentifier)

Remove the Point from its Curve.

Definition at line 266 of file CurvesGraphs.cpp.

267{
268 QString curveName = Point::curveNameFromPointIdentifier(pointIdentifier);
269
270 Curve *curve = curveForCurveName (curveName);
271 curve->removePoint (pointIdentifier);
272}
void removePoint(const QString &identifier)
Perform the opposite of addPointAtEnd.
Definition Curve.cpp:514

◆ saveXml()

void CurvesGraphs::saveXml ( QXmlStreamWriter & writer) const

Serialize curves.

Definition at line 274 of file CurvesGraphs.cpp.

275{
276 LOG4CPP_INFO_S ((*mainCat)) << "CurvesGraphs::saveXml";
277
278 writer.writeStartElement(DOCUMENT_SERIALIZE_CURVES_GRAPHS);
279
280 CurveList::const_iterator itr;
281 for (itr = m_curvesGraphs.begin (); itr != m_curvesGraphs.end (); itr++) {
282
283 const Curve &curve = *itr;
284 curve.saveXml (writer);
285 }
286
287 writer.writeEndElement();
288}
void saveXml(QXmlStreamWriter &writer) const
Serialize curve.
Definition Curve.cpp:527

◆ updatePointOrdinals()

void CurvesGraphs::updatePointOrdinals ( const Transformation & transformation)

Update point ordinals to be consistent with their CurveStyle and x/theta coordinate.

Definition at line 290 of file CurvesGraphs.cpp.

291{
292 LOG4CPP_INFO_S ((*mainCat)) << "CurvesGraphs::updatePointOrdinals";
293
294 CurveList::iterator itr;
295 for (itr = m_curvesGraphs.begin (); itr != m_curvesGraphs.end (); itr++) {
296
297 Curve &curve = *itr;
298 curve.updatePointOrdinals (transformation);
299 }
300}
void updatePointOrdinals(const Transformation &transformation)
See CurveGraphs::updatePointOrdinals.
Definition Curve.cpp:572

The documentation for this class was generated from the following files: