Engauge Digitizer 2
Loading...
Searching...
No Matches
GraphicsLinesForCurves.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 "Curve.h"
8#include "CurveStyles.h"
9#include "DataKey.h"
10#include "EngaugeAssert.h"
11#include "GraphicsLinesForCurve.h"
12#include "GraphicsLinesForCurves.h"
13#include "GraphicsPoint.h"
14#include "GraphicsPointAbstractBase.h"
15#include "GraphicsScene.h"
16#include <iostream>
17#include "Logger.h"
18#include "Point.h"
19#include <QGraphicsItem>
20#include <QTextStream>
21#include "QtToString.h"
22#include "Transformation.h"
23
27
28void GraphicsLinesForCurves::addPoint (const QString &curveName,
29 const QString &pointIdentifier,
30 double ordinal,
31 GraphicsPoint &point)
32{
33 LOG4CPP_INFO_S ((*mainCat)) << "GraphicsLinesForCurves::addPoint"
34 << " curve=" << curveName.toLatin1().data()
35 << " identifier=" << pointIdentifier.toLatin1().data()
36 << " ordinal=" << ordinal
37 << " pos=" << QPointFToString (point.pos()).toLatin1().data();
38
39 m_graphicsLinesForCurve [curveName]->addPoint (pointIdentifier,
40 ordinal,
41 point);
42}
43
45 const QStringList &curveNames)
46{
47 LOG4CPP_INFO_S ((*mainCat)) << "GraphicsLinesForCurves::addRemoveCurves"
48 << " curveCount=" << m_graphicsLinesForCurve.count();
49
50 // Add new curves
51 QStringList::const_iterator itrC;
52 for (itrC = curveNames.begin (); itrC != curveNames.end (); itrC++) {
53
54 QString curveName = *itrC;
55
56 if (!m_graphicsLinesForCurve.contains (curveName)) {
57
58 GraphicsLinesForCurve *item = new GraphicsLinesForCurve(curveName);
59 scene.addItem (item);
60
61 m_graphicsLinesForCurve [curveName] = item;
62 }
63 }
64
65 // Remove expired curves
66 GraphicsLinesContainer::const_iterator itrG, itrGNext;
67 for (itrG = m_graphicsLinesForCurve.begin (); itrG != m_graphicsLinesForCurve.end (); itrG = itrGNext) {
68
69 const QString curveName = itrG.key ();
70 GraphicsLinesForCurve *graphicsLines = itrG.value();
71
72 itrGNext = itrG;
73 itrGNext++;
74
75 if (!curveNames.contains (curveName)) {
76
77 delete graphicsLines;
78 m_graphicsLinesForCurve.remove (curveName);
79 }
80 }
81}
82
84{
85 LOG4CPP_INFO_S ((*mainCat)) << "GraphicsLinesForCurves::lineMembershipPurge";
86
87 GraphicsLinesContainer::const_iterator itr;
88 for (itr = m_graphicsLinesForCurve.begin (); itr != m_graphicsLinesForCurve.end (); itr++) {
89
90 const QString curveName = itr.key ();
91 GraphicsLinesForCurve *graphicsLines = itr.value();
92
93 graphicsLines->lineMembershipPurge (curveStyles.lineStyle (curveName));
94 }
95}
96
98{
99 LOG4CPP_INFO_S ((*mainCat)) << "GraphicsLinesForCurves::lineMembershipReset";
100
101 GraphicsLinesContainer::const_iterator itr;
102 for (itr = m_graphicsLinesForCurve.begin (); itr != m_graphicsLinesForCurve.end (); itr++) {
103
104 GraphicsLinesForCurve *graphicsLines = itr.value();
105
106 graphicsLines->lineMembershipReset ();
107 }
108}
109
111{
112 QString text;
113 QTextStream str (&text);
114
115 printStream ("", str);
116 std::cerr << text.toLatin1().data();
117}
118
119void GraphicsLinesForCurves::printStream (QString indentation,
120 QTextStream &str) const
121{
122 str << indentation << "GraphicsLinesForCurves\n";
123
124 indentation += INDENTATION_DELTA;
125
126 GraphicsLinesContainer::const_iterator itr;
127 for (itr = m_graphicsLinesForCurve.begin (); itr != m_graphicsLinesForCurve.end (); itr++) {
128
129 const GraphicsLinesForCurve *graphicsLines = itr.value();
130
131 graphicsLines->printStream (indentation,
132 str);
133 }
134}
135
136void GraphicsLinesForCurves::removePoint(const QString &identifier)
137{
138 LOG4CPP_INFO_S ((*mainCat)) << "GraphicsLinesForCurves::removePoint"
139 << " point=" << identifier.toLatin1().data ()
140 << " curveCount=" << m_graphicsLinesForCurve.count();
141
142 QString curveName = Point::curveNameFromPointIdentifier(identifier);
143
144 ENGAUGE_ASSERT (m_graphicsLinesForCurve.contains (curveName));
145 double ordinal = m_graphicsLinesForCurve [curveName]->identifierToOrdinal (identifier);
146 m_graphicsLinesForCurve [curveName]->removePoint(ordinal);
147}
148
150{
151 LOG4CPP_INFO_S ((*mainCat)) << "GraphicsLinesForCurves::removeTemporaryPointIfExists";
152
154
155 ENGAUGE_ASSERT (m_graphicsLinesForCurve.contains (curveName));
156 m_graphicsLinesForCurve [curveName]->removeTemporaryPointIfExists ();
157}
158
160{
161 LOG4CPP_INFO_S ((*mainCat)) << "GraphicsLinesForCurves::resetOnLoad";
162
163 GraphicsLinesContainer::iterator itr;
164 for (itr = m_graphicsLinesForCurve.begin(); itr != m_graphicsLinesForCurve.end(); itr++) {
165 GraphicsLinesForCurve *curve = itr.value();
166 delete curve;
167 }
168
169 m_graphicsLinesForCurve.clear();
170}
171
173 const CurveStyles &curveStyles,
174 const QString &curveName,
175 const Point &point)
176{
177 LOG4CPP_DEBUG_S ((*mainCat)) << "GraphicsLinesForCurves::updateAfterCommand"
178 << " point=" << point.identifier().toLatin1().data()
179 << " curveCount=" << m_graphicsLinesForCurve.count();
180
181 ENGAUGE_ASSERT (m_graphicsLinesForCurve.contains (curveName));
182 m_graphicsLinesForCurve [curveName]->updateAfterCommand (scene,
183 curveStyles.pointStyle(curveName),
184 point);
185}
186
188{
189 LOG4CPP_INFO_S ((*mainCat)) << "GraphicsLinesForCurves::updateCurveStyles";
190
191 GraphicsLinesContainer::const_iterator itr;
192 for (itr = m_graphicsLinesForCurve.begin (); itr != m_graphicsLinesForCurve.end (); itr++) {
193
194 QString curveName = itr.key();
195
196 m_graphicsLinesForCurve [curveName]->updateCurveStyle (modelCurveStyles.curveStyle (curveName));
197 }
198}
199
201{
202 LOG4CPP_INFO_S ((*mainCat)) << "GraphicsLinesForCurves::updateGraphicsLinesToMatchGraphicsPoints";
203
204 GraphicsLinesContainer::const_iterator itr;
205 for (itr = m_graphicsLinesForCurve.begin (); itr != m_graphicsLinesForCurve.end (); itr++) {
206
207 QString curveName = itr.key();
208
209 // This is where we add lines for non-axes curves
210 if (curveName != AXIS_CURVE_NAME) {
211
212 m_graphicsLinesForCurve [curveName]->updateGraphicsLinesToMatchGraphicsPoints(curveStyles.lineStyle (curveName));
213 }
214 }
215}
216
218 const Transformation &transformation)
219{
220 LOG4CPP_INFO_S ((*mainCat)) << "GraphicsLinesForCurves::updatePointOrdinalsAfterDrag";
221
222 GraphicsLinesContainer::const_iterator itr;
223 for (itr = m_graphicsLinesForCurve.begin (); itr != m_graphicsLinesForCurve.end (); itr++) {
224
225 QString curveName = itr.key();
226 GraphicsLinesForCurve *graphicsLines = itr.value();
227
228 graphicsLines->updatePointOrdinalsAfterDrag (curveStyles.lineStyle (curveName),
229 transformation);
230 }
231}
Model for DlgSettingsCurveProperties and CmdSettingsCurveProperties.
Definition CurveStyles.h:23
const LineStyle lineStyle(const QString &curveName) const
Get method for copying one line style in one step.
CurveStyle curveStyle(const QString &curveName) const
CurveStyle in specified curve.
const PointStyle pointStyle(const QString &curveName) const
Get method for copying one point style. Cannot return just a reference or else there is a warning abo...
This class stores the GraphicsLine objects for one Curve.
void lineMembershipReset()
Mark points as unwanted. Afterwards, lineMembershipPurge gets called.
void lineMembershipPurge(const LineStyle &lineStyle)
Mark the end of addPoint calls. Remove stale lines, insert missing lines, and draw the graphics lines...
void updatePointOrdinalsAfterDrag(const LineStyle &lineStyle, const Transformation &transformation)
See GraphicsScene::updateOrdinalsAfterDrag. Pretty much the same steps as Curve::updatePointOrdinals.
void printStream(QString indentation, QTextStream &str) const
Debugging method that supports print method of this class and printStream method of some other class(...
GraphicsLinesForCurves()
Single constructor.
void updatePointOrdinalsAfterDrag(const CurveStyles &curveStyles, const Transformation &transformation)
See GraphicsScene::updateOrdinalsAfterDrag.
void removePoint(const QString &identifier)
Remove the specified point. The act of deleting it will automatically remove it from the GraphicsScen...
void updateCurveStyles(const CurveStyles &modelCurveStyles)
Update the curve style for every curve.
void printStream(QString indentation, QTextStream &str) const
Debugging method that supports print method of this class and printStream method of some other class(...
void resetOnLoad()
Reset, when loading a document after the first, to same state that first document was at when loaded.
void removeTemporaryPointIfExists()
Remove temporary point if it exists.
void updateAfterCommand(GraphicsScene &scene, const CurveStyles &curveStyles, const QString &curveName, const Point &point)
Update the GraphicsScene with the specified Point from the Document. If it does not exist yet in the ...
void updateGraphicsLinesToMatchGraphicsPoints(const CurveStyles &curveStyles)
Calls to moveLinesWithDraggedPoint have finished so update the lines correspondingly.
void addRemoveCurves(GraphicsScene &scene, const QStringList &curveNames)
Add new curves and remove expired curves to match the specified list.
void addPoint(const QString &curveName, const QString &pointIdentifier, double ordinal, GraphicsPoint &point)
Add new point.
void lineMembershipReset()
Mark points as unwanted. Afterwards, lineMembershipPurge gets called.
void print() const
Debugging method for printing directly from symbolic debugger.
void lineMembershipPurge(const CurveStyles &curveStyles)
Mark the end of addPoint calls. Remove stale lines, insert missing lines, and draw the graphics lines...
Graphics item for drawing a circular or polygonal Point.
QPointF pos() const
Proxy method for QGraphicsItem::pos.
Add point and line handling to generic QGraphicsScene.
Class that represents one digitized point. The screen-to-graph coordinate transformation is always ex...
Definition Point.h:24
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:256
static QString temporaryPointIdentifier()
Point identifier for temporary point that is used by DigitzeStateAxis.
Definition Point.cpp:501
Affine transformation between screen and graph coordinates, based on digitized axis points.