Engauge Digitizer  2
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 
22 const 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 
34 void TransformationStateDefined::begin(bool isGnuplot,
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 
63 void TransformationStateDefined::end(CmdMediator & /* cmdMediator */,
64  const Transformation & /* transformation */)
65 {
66  LOG4CPP_INFO_S ((*mainCat)) << "TransformationStateDefined::end";
67 
68  m_axesChecker->setVisible (false);
69 }
70 
71 void TransformationStateDefined::initializeModelGridDisplay (CmdMediator &cmdMediator,
72  const Transformation &transformation)
73 {
74  cmdMediator.document().initializeGridDisplay (transformation);
75 }
76 
77 void 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;
96  GridClassifier gridClassifier;
97  gridClassifier.classify (context().isGnuplot(),
98  pixmapFiltered,
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 
115 void TransformationStateDefined::slotTimeout()
116 {
117  LOG4CPP_INFO_S ((*mainCat)) << "TransformationStateDefined::slotTimeout";
118 
119  m_axesChecker->setVisible (false);
120 }
121 
122 void 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 {
140  Functor2wRet<const QString &, const Point&, CallbackSearchReturn> ftorWithCallback = functor_ret (ftor,
142  cmdMediator.iterateThroughCurvePointsAxes (ftorWithCallback);
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 }
Document::pixmap
QPixmap pixmap() const
Return the image that is being digitized.
Definition: Document.cpp:817
Document::documentAxesPointsRequired
DocumentAxesPointsRequired documentAxesPointsRequired() const
Get method for DocumentAxesPointsRequired.
Definition: Document.cpp:363
FilterImage.h
FilterImage
Filters an image using a combination of color filtering and grid removal.
Definition: FilterImage.h:17
CHECKER_MODE_NEVER
Definition: CheckerMode.h:17
FilterImage::filter
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.
Definition: FilterImage.cpp:21
DocumentModelAxesChecker::checkerMode
CheckerMode checkerMode() const
Get method for checker lifetime mode.
Definition: DocumentModelAxesChecker.cpp:52
TransformationStateDefined.h
AXIS_CURVE_NAME
const QString AXIS_CURVE_NAME
Document::setModelGridRemoval
void setModelGridRemoval(const DocumentModelGridRemoval &modelGridRemoval)
Set method for DocumentModelGridRemoval.
Definition: Document.cpp:1028
Document::modelColorFilter
DocumentModelColorFilter modelColorFilter() const
Get method for DocumentModelColorFilter.
Definition: Document.cpp:688
DocumentModelGridDisplay::stable
bool stable() const
Get method for stable flag.
Definition: DocumentModelGridDisplay.cpp:267
Document::modelGridRemoval
DocumentModelGridRemoval modelGridRemoval() const
Get method for DocumentModelGridRemoval.
Definition: Document.cpp:737
Checker
Box shape that is drawn through the three axis points, to temporarily (usually) or permanently (rarel...
Definition: Checker.h:32
CmdMediator.h
TransformationStateDefined::begin
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...
Definition: TransformationStateDefined.cpp:33
Transformation
Affine transformation between screen and graph coordinates, based on digitized axis points.
Definition: Transformation.h:30
Document.h
TransformationStateAbstractBase
Base class for all transformation states. This serves as an interface to TransformationStateContext.
Definition: TransformationStateAbstractBase.h:24
Checker::prepareForDisplay
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
GridClassifier
Classify the grid pattern in an original image.
Definition: GridClassifier.h:25
CallbackAxesCheckerFromAxesPoints::callback
CallbackSearchReturn callback(const QString &curveName, const Point &point)
Callback method.
Definition: CallbackAxesCheckerFromAxesPoints.cpp:14
Transformation.h
CurveStyles::pointRadius
int pointRadius(const QString &curveName) const
Get method for curve point radius.
Definition: CurveStyles.cpp:165
GridClassifier.h
Document::modelGridDisplay
DocumentModelGridDisplay modelGridDisplay() const
Get method for DocumentModelGridDisplay.
Definition: Document.cpp:730
Logger.h
TransformationStateContext
Context class for transformation state machine.
Definition: TransformationStateContext.h:20
CmdMediator::document
Document & document()
Provide the Document to commands, primarily for undo/redo processing.
Definition: CmdMediator.cpp:72
CallbackAxesCheckerFromAxesPoints
Callback for positioning the axes indicator according to the axes points.
Definition: CallbackAxesCheckerFromAxesPoints.h:16
LOG4CPP_INFO_S
#define LOG4CPP_INFO_S(logger)
Definition: convenience.h:18
CallbackAxesCheckerFromAxesPoints::points
Points points() const
Return the collected points as a polygon, in screen coordinates.
Definition: CallbackAxesCheckerFromAxesPoints.cpp:22
Document::initializeGridDisplay
void initializeGridDisplay(const Transformation &transformation)
Initialize grid display. This is called immediately after the transformation has been defined for the...
Definition: Document.cpp:411
GridClassifier::classify
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.
Definition: GridClassifier.cpp:50
CmdMediator::iterateThroughCurvePointsAxes
void iterateThroughCurvePointsAxes(const Functor2wRet< const QString &, const Point &, CallbackSearchReturn > &ftorWithCallback)
See Curve::iterateThroughCurvePoints, for the single axes curve.
Definition: CmdMediator.cpp:87
DocumentModelGridRemoval::stable
bool stable() const
Get method for stable flag.
Definition: DocumentModelGridRemoval.cpp:319
mainCat
log4cpp::Category * mainCat
Definition: Logger.cpp:14
TransformationStateDefined::end
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...
Definition: TransformationStateDefined.cpp:62
Checker.h
CmdMediator
Command queue stack.
Definition: CmdMediator.h:22
DocumentModelAxesChecker::checkerSeconds
int checkerSeconds() const
Get method for checker lifetime in seconds.
Definition: DocumentModelAxesChecker.cpp:57
DocumentModelAxesChecker
Model for DlgSettingsAxesChecker and CmdSettingsAxesChecker.
Definition: DocumentModelAxesChecker.h:17
CallbackAxesCheckerFromAxesPoints.h
Document::modelCoords
DocumentModelCoords modelCoords() const
Get method for DocumentModelCoords.
Definition: Document.cpp:695
TransformationStateAbstractBase::context
TransformationStateContext & context()
Reference to the TransformationStateContext that contains all the TransformationStateAbstractBase sub...
Definition: TransformationStateAbstractBase.cpp:19
Document::modelAxesChecker
DocumentModelAxesChecker modelAxesChecker() const
Get method for DocumentModelAxesChecker.
Definition: Document.cpp:681
EnumsToQt.h
TransformationStateContext.h
CHECKER_MODE_N_SECONDS
Definition: CheckerMode.h:18
DocumentModelGridRemoval
Model for DlgSettingsGridRemoval and CmdSettingsGridRemoval. The settings are unstable until the user...
Definition: DocumentModelGridRemoval.h:16
TransformationStateDefined::TransformationStateDefined
TransformationStateDefined(TransformationStateContext &context, QGraphicsScene &scene)
Single constructor.
Definition: TransformationStateDefined.cpp:23
Document::modelCurveStyles
CurveStyles modelCurveStyles() const
Get method for CurveStyles.
Definition: Document.cpp:702
TransformationStateDefined::updateAxesChecker
virtual void updateAxesChecker(CmdMediator &cmdMediator, const Transformation &transformation)
Apply the new DocumentModelAxesChecker.
Definition: TransformationStateDefined.cpp:135
Checker::setVisible
void setVisible(bool visible)
Show/hide this axes checker.
Definition: Checker.cpp:247
SECONDS_TO_MILLISECONDS
const int SECONDS_TO_MILLISECONDS
Definition: TransformationStateDefined.cpp:21