Engauge Digitizer 2
Loading...
Searching...
No Matches
GraphicsLinesForCurves.cpp
Go to the documentation of this file.
1/******************************************************************************************************
2 * (C) 2014 markummitchell@github.com. This file is part of Engauge Digitizer, which is released *
3 * under GNU General Public License version 2 (GPLv2) or (at your option) any later version. See file *
4 * LICENSE or go to gnu.org/licenses for details. Distribution requires prior written permission. *
5 ******************************************************************************************************/
6
7#include "Curve.h"
8#include "CurveStyles.h"
9#include "DataKey.h"
10#include "EngaugeAssert.h"
13#include "GraphicsPoint.h"
15#include "GraphicsScene.h"
16#include <iostream>
17#include "LineStyle.h"
18#include "Logger.h"
19#include "Point.h"
20#include <QGraphicsItem>
21#include <QPainterPath>
22#include <QTextStream>
23#include "QtToString.h"
24#include "Transformation.h"
25
29
32 double ordinal,
33 GraphicsPoint &point)
34{
35 LOG4CPP_INFO_S ((*mainCat)) << "GraphicsLinesForCurves::addPoint"
36 << " curve=" << curveName.toLatin1().data()
37 << " identifier=" << pointIdentifier.toLatin1().data()
38 << " ordinal=" << ordinal
39 << " pos=" << QPointFToString (point.pos()).toLatin1().data();
40
41 m_graphicsLinesForCurve [curveName]->addPoint (pointIdentifier,
42 ordinal,
43 point);
44}
45
47 const QStringList &curveNames)
48{
49 LOG4CPP_INFO_S ((*mainCat)) << "GraphicsLinesForCurves::addRemoveCurves"
50 << " curveCount=" << m_graphicsLinesForCurve.count();
51
52 // Add new curves
53 QStringList::const_iterator itrC;
54 for (itrC = curveNames.begin (); itrC != curveNames.end (); itrC++) {
55
56 QString curveName = *itrC;
57
58 if (!m_graphicsLinesForCurve.contains (curveName)) {
59
60 GraphicsLinesForCurve *item = new GraphicsLinesForCurve(curveName);
61 scene.addItem (item);
62
63 m_graphicsLinesForCurve [curveName] = item;
64 }
65 }
66
67 // Remove expired curves
68 GraphicsLinesContainer::const_iterator itrG, itrGNext;
69 for (itrG = m_graphicsLinesForCurve.begin (); itrG != m_graphicsLinesForCurve.end (); itrG = itrGNext) {
70
71 const QString curveName = itrG.key ();
73
74 itrGNext = itrG;
75 itrGNext++;
76
77 if (!curveNames.contains (curveName)) {
78
79 delete graphicsLines;
80 m_graphicsLinesForCurve.remove (curveName);
81 }
82 }
83}
84
89{
90 LOG4CPP_INFO_S ((*mainCat)) << "GraphicsLinesForCurves::lineMembershipPurge";
91
92 GraphicsLinesContainer::const_iterator itr;
93 for (itr = m_graphicsLinesForCurve.begin (); itr != m_graphicsLinesForCurve.end (); itr++) {
94
95 const QString curveName = itr.key ();
97
98 graphicsLines->lineMembershipPurge (curveStyles.lineStyle (curveName),
102 }
103}
104
106{
107 LOG4CPP_INFO_S ((*mainCat)) << "GraphicsLinesForCurves::lineMembershipReset";
108
109 GraphicsLinesContainer::const_iterator itr;
110 for (itr = m_graphicsLinesForCurve.begin (); itr != m_graphicsLinesForCurve.end (); itr++) {
111
113
115 }
116}
117
119{
122
123 printStream ("", str);
124 std::cerr << text.toLatin1().data();
125}
126
128 QTextStream &str) const
129{
130 str << indentation << "GraphicsLinesForCurves\n";
131
133
134 GraphicsLinesContainer::const_iterator itr;
135 for (itr = m_graphicsLinesForCurve.begin (); itr != m_graphicsLinesForCurve.end (); itr++) {
136
137 const GraphicsLinesForCurve *graphicsLines = itr.value();
138
140 str);
141 }
142}
143
145{
146 LOG4CPP_INFO_S ((*mainCat)) << "GraphicsLinesForCurves::removePoint"
147 << " point=" << identifier.toLatin1().data ()
148 << " curveCount=" << m_graphicsLinesForCurve.count();
149
150 QString curveName = Point::curveNameFromPointIdentifier(identifier);
151
152 ENGAUGE_ASSERT (m_graphicsLinesForCurve.contains (curveName));
153 double ordinal = m_graphicsLinesForCurve [curveName]->identifierToOrdinal (identifier);
154 m_graphicsLinesForCurve [curveName]->removePoint(ordinal);
155}
156
158{
159 LOG4CPP_INFO_S ((*mainCat)) << "GraphicsLinesForCurves::removeTemporaryPointIfExists";
160
162
163 ENGAUGE_ASSERT (m_graphicsLinesForCurve.contains (curveName));
164 m_graphicsLinesForCurve [curveName]->removeTemporaryPointIfExists ();
165}
166
168{
169 LOG4CPP_INFO_S ((*mainCat)) << "GraphicsLinesForCurves::resetOnLoad";
170
171 GraphicsLinesContainer::iterator itr;
172 for (itr = m_graphicsLinesForCurve.begin(); itr != m_graphicsLinesForCurve.end(); itr++) {
174 delete curve;
175 }
176
177 m_graphicsLinesForCurve.clear();
178}
179
182 const QString &curveName,
183 const Point &point,
185{
186 LOG4CPP_DEBUG_S ((*mainCat)) << "GraphicsLinesForCurves::updateAfterCommand"
187 << " point=" << point.identifier().toLatin1().data()
188 << " curveCount=" << m_graphicsLinesForCurve.count();
189
190 ENGAUGE_ASSERT (m_graphicsLinesForCurve.contains (curveName));
191 m_graphicsLinesForCurve [curveName]->updateAfterCommand (scene,
192 curveStyles.pointStyle(curveName),
193 point,
195}
196
198{
199 LOG4CPP_INFO_S ((*mainCat)) << "GraphicsLinesForCurves::updateCurveStyles";
200
201 GraphicsLinesContainer::const_iterator itr;
202 for (itr = m_graphicsLinesForCurve.begin (); itr != m_graphicsLinesForCurve.end (); itr++) {
203
204 QString curveName = itr.key();
205
206 m_graphicsLinesForCurve [curveName]->updateCurveStyle (modelCurveStyles.curveStyle (curveName));
207 }
208}
209
214{
215 LOG4CPP_INFO_S ((*mainCat)) << "GraphicsLinesForCurves::updateGraphicsLinesToMatchGraphicsPoints";
216
217 GraphicsLinesContainer::const_iterator itr;
218 for (itr = m_graphicsLinesForCurve.begin (); itr != m_graphicsLinesForCurve.end (); itr++) {
219
220 QString curveName = itr.key();
221
222 // This is where we add lines for non-axes curves
223 if (curveName != AXIS_CURVE_NAME) {
224
225 m_graphicsLinesForCurve [curveName]->updateGraphicsLinesToMatchGraphicsPoints(curveStyles.lineStyle (curveName),
229 }
230 }
231}
232
234{
235 LOG4CPP_INFO_S ((*mainCat)) << "GraphicsLinesForCurves::updateHighlightOpacity"
236 << " highlightOpacity=" << highlightOpacity;
237
238 GraphicsLinesContainer::const_iterator itr;
239 for (itr = m_graphicsLinesForCurve.begin (); itr != m_graphicsLinesForCurve.end (); itr++) {
240
241 QString curveName = itr.key();
242
243 m_graphicsLinesForCurve [curveName]->updateHighlightOpacity (highlightOpacity);
244 }
245}
246
248 const Transformation &transformation)
249{
250 LOG4CPP_INFO_S ((*mainCat)) << "GraphicsLinesForCurves::updatePointOrdinalsAfterDrag";
251
252 GraphicsLinesContainer::const_iterator itr;
253 for (itr = m_graphicsLinesForCurve.begin (); itr != m_graphicsLinesForCurve.end (); itr++) {
254
255 QString curveName = itr.key();
257
259 transformation);
260 }
261}
const QString AXIS_CURVE_NAME
const int INNER_RADIUS_MIN
#define ENGAUGE_ASSERT(cond)
Drop in replacement for Q_ASSERT if defined(QT_NO_DEBUG) && !defined(QT_FORCE_ASSERTS) define ENGAUGE...
log4cpp::Category * mainCat
Definition Logger.cpp:14
const QString INDENTATION_DELTA
QString QPointFToString(const QPointF &pos)
Model for DlgSettingsCurveProperties and CmdSettingsCurveProperties.
Definition CurveStyles.h:23
CurveStyle curveStyle(const QString &curveName) const
CurveStyle in specified curve.
Window that displays the geometry information, as a table, for the current curve.
This class stores the GraphicsLine objects for one Curve.
void lineMembershipPurge(const LineStyle &lineStyle, SplineDrawer &splineDrawer, QPainterPath &pathMultiValued, LineStyle &lineMultiValued)
Mark the end of addPoint calls. Remove stale lines, insert missing lines, and draw the graphics lines...
void lineMembershipReset()
Mark points as unwanted. Afterwards, lineMembershipPurge gets called.
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(...
void updateHighlightOpacity(double highlightOpacity)
Update the highlight opacity value. This may or may not affect the current display immediately depend...
GraphicsLinesForCurves()
Single constructor.
void updateAfterCommand(GraphicsScene &scene, const CurveStyles &curveStyles, const QString &curveName, const Point &point, GeometryWindow *geometryWindow)
Update the GraphicsScene with the specified Point from the Document. If it does not exist yet in the ...
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 lineMembershipPurge(const CurveStyles &curveStyles, SplineDrawer &splineDrawer, QPainterPath &pathMultiValued, LineStyle &lineMultiValued)
Mark the end of addPoint calls. Remove stale lines, insert missing lines, and draw the graphics lines...
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 updateGraphicsLinesToMatchGraphicsPoints(const CurveStyles &curveStyles, SplineDrawer &splineDrawer, QPainterPath &pathMultiValued, LineStyle &lineMultiValued)
Calls to moveLinesWithDraggedPoint have finished so update the lines correspondingly.
void lineMembershipReset()
Mark points as unwanted. Afterwards, lineMembershipPurge gets called.
void print() const
Debugging method for printing directly from symbolic debugger.
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.
Details for a specific Line.
Definition LineStyle.h:20
Class that represents one digitized point. The screen-to-graph coordinate transformation is always ex...
Definition Point.h:26
static QString curveNameFromPointIdentifier(const QString &pointIdentifier)
Parse the curve name from the specified point identifier. This does the opposite of uniqueIdentifierG...
Definition Point.cpp:227
QString identifier() const
Unique identifier for a specific Point.
Definition Point.cpp:268
static QString temporaryPointIdentifier()
Point identifier for temporary point that is used by DigitzeStateAxis.
Definition Point.cpp:519
This class takes the output from Spline and uses that to draw the curve in the graphics window,...
Affine transformation between screen and graph coordinates, based on digitized axis points.
#define LOG4CPP_INFO_S(logger)
Definition convenience.h:18
#define LOG4CPP_DEBUG_S(logger)
Definition convenience.h:20