Engauge Digitizer 2
Loading...
Searching...
No Matches
TransformationStateDefined.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
8#include "Checker.h"
9#include "CmdMediator.h"
10#include "Document.h"
11#include "EnumsToQt.h"
12#include "FilterImage.h"
13#include "GridClassifier.h"
14#include "Logger.h"
15#include <QGraphicsScene>
16#include <QImage>
17#include <QTimer>
18#include "Transformation.h"
21
22const int SECONDS_TO_MILLISECONDS = 1000.0;
23
25 QGraphicsScene &scene) :
27 m_axesChecker (new Checker (scene)),
28 m_timer (new QTimer)
29{
30 m_timer->setSingleShot (true);
31 connect (m_timer, SIGNAL (timeout()), this, SLOT (slotTimeout()));
32}
33
35 CmdMediator &cmdMediator,
36 const Transformation &transformation,
37 const QString &selectedGraphCurve)
38{
39 LOG4CPP_INFO_S ((*mainCat)) << "TransformationStateDefined::begin";
40
41 if (!cmdMediator.document().modelGridDisplay().stable()) {
42
43 // Initialize or update the grid display settings since they are not stable yet
44 initializeModelGridDisplay (cmdMediator,
45 transformation);
46
47 }
48
49 if (!cmdMediator.document().modelGridRemoval().stable()) {
50
51 // Initialize or update the grid removal settings since they are not stable yet
52 initializeModelGridRemoval (isGnuplot,
53 cmdMediator,
54 transformation,
55 selectedGraphCurve);
56
57 }
58
59 updateAxesChecker (cmdMediator,
60 transformation);
61}
62
64 const Transformation & /* transformation */)
65{
66 LOG4CPP_INFO_S ((*mainCat)) << "TransformationStateDefined::end";
67
68 m_axesChecker->setVisible (false);
69}
70
71void TransformationStateDefined::initializeModelGridDisplay (CmdMediator &cmdMediator,
72 const Transformation &transformation)
73{
74 cmdMediator.document().initializeGridDisplay (transformation);
75}
76
77void TransformationStateDefined::initializeModelGridRemoval (bool isGnuplot,
78 CmdMediator &cmdMediator,
79 const Transformation &transformation,
80 const QString &selectedGraphCurve)
81{
82 LOG4CPP_INFO_S ((*mainCat)) << "TransformationStateDefined::initializeModelGridRemoval";
83
84 // Generate filtered image
85 FilterImage filterImage;
86 QPixmap pixmapFiltered = filterImage.filter (isGnuplot,
87 cmdMediator.document().pixmap().toImage(),
88 transformation,
89 selectedGraphCurve,
90 cmdMediator.document().modelColorFilter(),
91 cmdMediator.document().modelGridRemoval());
92
93 // Initialize grid removal settings so user does not have to
94 int countX, countY;
95 double startX, startY, stepX, stepY;
97 gridClassifier.classify (context().isGnuplot(),
99 transformation,
100 countX,
101 startX,
102 stepX,
103 countY,
104 startY,
105 stepY);
106 DocumentModelGridRemoval modelGridRemoval (startX,
107 startY,
108 stepX,
109 stepY,
110 countX,
111 countY);
112 cmdMediator.document().setModelGridRemoval (modelGridRemoval);
113}
114
115void TransformationStateDefined::slotTimeout()
116{
117 LOG4CPP_INFO_S ((*mainCat)) << "TransformationStateDefined::slotTimeout";
118
119 m_axesChecker->setVisible (false);
120}
121
122void TransformationStateDefined::startTimer (const DocumentModelAxesChecker &modelAxesChecker)
123{
124 LOG4CPP_INFO_S ((*mainCat)) << "TransformationStateDefined::startTimer";
125
126 m_axesChecker->setVisible (modelAxesChecker.checkerMode () != CHECKER_MODE_NEVER);
127
128 if (modelAxesChecker.checkerMode () == CHECKER_MODE_N_SECONDS) {
129
130 // Start timer
131 int milliseconds = modelAxesChecker.checkerSeconds() * SECONDS_TO_MILLISECONDS;
132 m_timer->start (milliseconds);
133 }
134}
135
137 const Transformation &transformation)
138{
143
144 m_axesChecker->prepareForDisplay (ftor.points(),
146 cmdMediator.document().modelAxesChecker(),
147 cmdMediator.document().modelCoords(),
148 transformation,
149 cmdMediator.document().documentAxesPointsRequired());
150 m_axesChecker->setVisible (true);
151 startTimer (cmdMediator.document().modelAxesChecker());
152}
const QString AXIS_CURVE_NAME
@ CHECKER_MODE_NEVER
Definition CheckerMode.h:15
@ CHECKER_MODE_N_SECONDS
Definition CheckerMode.h:16
const int INNER_RADIUS_MIN
log4cpp::Category * mainCat
Definition Logger.cpp:14
const int SECONDS_TO_MILLISECONDS
Callback for positioning the axes indicator according to the axes points.
CallbackSearchReturn callback(const QString &curveName, const Point &point)
Callback method.
Box shape that is drawn through the three axis points, to temporarily (usually) or permanently (rarel...
Definition Checker.h:34
void prepareForDisplay(const QPolygonF &polygon, int pointRadius, const DocumentModelAxesChecker &modelAxesChecker, const DocumentModelCoords &modelCoords, DocumentAxesPointsRequired documentAxesPointsRequired)
Create the polygon from current information, including pixel coordinates, just prior to display.
Definition Checker.cpp:135
void setVisible(bool visible)
Show/hide this axes checker.
Definition Checker.cpp:247
Command queue stack.
Definition CmdMediator.h:24
void iterateThroughCurvePointsAxes(const Functor2wRet< const QString &, const Point &, CallbackSearchReturn > &ftorWithCallback)
See Curve::iterateThroughCurvePoints, for the single axes curve.
Document & document()
Provide the Document to commands, primarily for undo/redo processing.
int pointRadius(const QString &curveName) const
Get method for curve point radius.
Model for DlgSettingsAxesChecker and CmdSettingsAxesChecker.
int checkerSeconds() const
Get method for checker lifetime in seconds.
CheckerMode checkerMode() const
Get method for checker lifetime mode.
bool stable() const
Get method for stable flag.
Model for DlgSettingsGridRemoval and CmdSettingsGridRemoval. The settings are unstable until the user...
bool stable() const
Get method for stable flag.
void setModelGridRemoval(const DocumentModelGridRemoval &modelGridRemoval)
Set method for DocumentModelGridRemoval.
QPixmap pixmap() const
Return the image that is being digitized.
Definition Document.cpp:817
void initializeGridDisplay(const Transformation &transformation)
Initialize grid display. This is called immediately after the transformation has been defined for the...
Definition Document.cpp:411
DocumentModelAxesChecker modelAxesChecker() const
Get method for DocumentModelAxesChecker.
Definition Document.cpp:681
DocumentModelCoords modelCoords() const
Get method for DocumentModelCoords.
Definition Document.cpp:695
DocumentModelColorFilter modelColorFilter() const
Get method for DocumentModelColorFilter.
Definition Document.cpp:688
CurveStyles modelCurveStyles() const
Get method for CurveStyles.
Definition Document.cpp:702
DocumentAxesPointsRequired documentAxesPointsRequired() const
Get method for DocumentAxesPointsRequired.
Definition Document.cpp:363
DocumentModelGridRemoval modelGridRemoval() const
Get method for DocumentModelGridRemoval.
Definition Document.cpp:737
DocumentModelGridDisplay modelGridDisplay() const
Get method for DocumentModelGridDisplay.
Definition Document.cpp:730
Filters an image using a combination of color filtering and grid removal.
Definition FilterImage.h:19
QPixmap filter(bool isGnuplot, const QImage &imageUnfiltered, const Transformation &transformation, const QString &curveSelected, const DocumentModelColorFilter &modelColorFilter, const DocumentModelGridRemoval &modelGridRemoval) const
Filter original unfiltered image into filtered pixmap.
Classify the grid pattern in an original image.
void classify(bool isGnuplot, const QPixmap &originalPixmap, const Transformation &transformation, int &countX, double &startX, double &stepX, int &countY, double &startY, double &stepY)
Classify the specified image, and return the most probably x and y grid settings.
Base class for all transformation states. This serves as an interface to TransformationStateContext.
TransformationStateContext & context()
Reference to the TransformationStateContext that contains all the TransformationStateAbstractBase sub...
Context class for transformation state machine.
virtual void updateAxesChecker(CmdMediator &cmdMediator, const Transformation &transformation)
Apply the new DocumentModelAxesChecker.
TransformationStateDefined(TransformationStateContext &context, QGraphicsScene &scene)
Single constructor.
virtual void begin(bool isGnuplot, CmdMediator &cmdMediator, const Transformation &transformation, const QString &selectedGraphCurve)
Method that is called at the exact moment a state is entered. Typically called just after end for the...
virtual void end(CmdMediator &cmdMediator, const Transformation &transformation)
Method that is called at the exact moment a state is exited. Typically called just before begin for t...
Affine transformation between screen and graph coordinates, based on digitized axis points.
#define LOG4CPP_INFO_S(logger)
Definition convenience.h:18