Engauge Digitizer  2
TransformationStateDefined.cpp
1 #include "CallbackAxesCheckerFromAxesPoints.h"
2 #include "Checker.h"
3 #include "CmdMediator.h"
4 #include "Document.h"
5 #include "EnumsToQt.h"
6 #include "FilterImage.h"
7 #include "GridClassifier.h"
8 #include "Logger.h"
9 #include <QGraphicsScene>
10 #include <QImage>
11 #include <QTimer>
12 #include "Transformation.h"
13 #include "TransformationStateContext.h"
14 #include "TransformationStateDefined.h"
15 
16 const int SECONDS_TO_MILLISECONDS = 1000.0;
17 
19  QGraphicsScene &scene) :
21  m_axesChecker (new Checker (scene)),
22  m_timer (new QTimer)
23 {
24  m_timer->setSingleShot (true);
25  connect (m_timer, SIGNAL (timeout()), this, SLOT (slotTimeout()));
26 }
27 
29  const Transformation &transformation,
30  const QString &selectedGraphCurve)
31 {
32  LOG4CPP_INFO_S ((*mainCat)) << "TransformationStateDefined::begin";
33 
34  if (!cmdMediator.document().modelGridRemoval().stable()) {
35 
36  // Initialie or update the grid removal settings since they are not stable yet
37  initializeModelGridRemoval (cmdMediator,
38  transformation,
39  selectedGraphCurve);
40 
41  }
42 
43  updateAxesChecker (cmdMediator,
44  transformation);
45 }
46 
48  const Transformation & /* transformation */)
49 {
50  LOG4CPP_INFO_S ((*mainCat)) << "TransformationStateDefined::end";
51 
52  m_axesChecker->setVisible (false);
53 }
54 
55 void TransformationStateDefined::initializeModelGridRemoval (CmdMediator &cmdMediator,
56  const Transformation &transformation,
57  const QString &selectedGraphCurve)
58 {
59  LOG4CPP_INFO_S ((*mainCat)) << "TransformationStateDefined::initializeModelGridRemoval";
60 
61  // Generate filtered image
62  FilterImage filterImage;
63  QPixmap pixmapFiltered = filterImage.filter (cmdMediator.document().pixmap().toImage(),
64  transformation,
65  selectedGraphCurve,
66  cmdMediator.document().modelColorFilter(),
67  cmdMediator.document().modelGridRemoval());
68 
69  // Initialize grid removal settings so user does not have to
70  int countX, countY;
71  double startX, startY, stepX, stepY;
72  GridClassifier gridClassifier;
73  gridClassifier.classify (context().isGnuplot(),
74  pixmapFiltered,
75  transformation,
76  countX,
77  startX,
78  stepX,
79  countY,
80  startY,
81  stepY);
82  DocumentModelGridRemoval modelGridRemoval (startX,
83  startY,
84  stepX,
85  stepY,
86  countX,
87  countY);
88  cmdMediator.document().setModelGridRemoval (modelGridRemoval);
89 }
90 
91 void TransformationStateDefined::slotTimeout()
92 {
93  LOG4CPP_INFO_S ((*mainCat)) << "TransformationStateDefined::slotTimeout";
94 
95  m_axesChecker->setVisible (false);
96 }
97 
98 void TransformationStateDefined::startTimer (const DocumentModelAxesChecker &modelAxesChecker)
99 {
100  LOG4CPP_INFO_S ((*mainCat)) << "TransformationStateDefined::startTimer";
101 
102  m_axesChecker->setVisible (modelAxesChecker.checkerMode () != CHECKER_MODE_NEVER);
103 
104  if (modelAxesChecker.checkerMode () == CHECKER_MODE_N_SECONDS) {
105 
106  // Start timer
107  int milliseconds = modelAxesChecker.checkerSeconds() * SECONDS_TO_MILLISECONDS;
108  m_timer->start (milliseconds);
109  }
110 }
111 
113  const Transformation &transformation)
114 {
116  Functor2wRet<const QString &, const Point&, CallbackSearchReturn> ftorWithCallback = functor_ret (ftor,
118  cmdMediator.iterateThroughCurvePointsAxes (ftorWithCallback);
119 
120  m_axesChecker->prepareForDisplay (ftor.points(),
121  cmdMediator.document().modelCurveStyles().pointRadius(AXIS_CURVE_NAME),
122  cmdMediator.document().modelAxesChecker(),
123  cmdMediator.document().modelCoords(),
124  transformation);
125  m_axesChecker->setVisible (true);
126  startTimer (cmdMediator.document().modelAxesChecker());
127 }
Base class for all transformation states. This serves as an interface to TransformationStateContext.
DocumentModelColorFilter modelColorFilter() const
Get method for DocumentModelColorFilter.
Definition: Document.cpp:644
void setModelGridRemoval(const DocumentModelGridRemoval &modelGridRemoval)
Set method for DocumentModelGridRemoval.
Definition: Document.cpp:916
int checkerSeconds() const
Get method for checker lifetime in seconds.
Context class for transformation state machine.
CallbackSearchReturn callback(const QString &curveName, const Point &point)
Callback method.
int pointRadius(const QString &curveName) const
Get method for curve point radius.
DocumentModelCoords modelCoords() const
Get method for DocumentModelCoords.
Definition: Document.cpp:652
QPixmap pixmap() const
Return the image that is being digitized.
Definition: Document.cpp:721
bool stable() const
Get method for stable flag.
Document & document()
Provide the Document to commands, primarily for undo/redo processing.
Definition: CmdMediator.cpp:61
Box shape that is drawn through the three axis points, to temporarily (usually) or permanently (rarel...
Definition: Checker.h:28
virtual void updateAxesChecker(CmdMediator &cmdMediator, const Transformation &transformation)
Apply the new DocumentModelAxesChecker.
TransformationStateContext & context()
Reference to the TransformationStateContext that contains all the TransformationStateAbstractBase sub...
CheckerMode checkerMode() const
Get method for checker lifetime mode.
Affine transformation between screen and graph coordinates, based on digitized axis points...
CurveStyles modelCurveStyles() const
Get method for CurveStyles.
Definition: Document.cpp:657
DocumentModelAxesChecker modelAxesChecker() const
Get method for DocumentModelAxesChecker.
Definition: Document.cpp:639
TransformationStateDefined(TransformationStateContext &context, QGraphicsScene &scene)
Single constructor.
QPixmap filter(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:15
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...
Callback for positioning the axes indicator according to the axes points.
Filters an image using a combination of color filtering and grid removal.
Definition: FilterImage.h:12
Model for DlgSettingsAxesChecker and CmdSettingsAxesChecker.
virtual void begin(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...
Classify the grid pattern in an original image.
Command queue stack.
Definition: CmdMediator.h:16
void setVisible(bool visible)
Show/hide this axes checker.
Definition: Checker.cpp:535
void iterateThroughCurvePointsAxes(const Functor2wRet< const QString &, const Point &, CallbackSearchReturn > &ftorWithCallback)
See Curve::iterateThroughCurvePoints, for the single axes curve.
Definition: CmdMediator.cpp:76
Points points() const
Return the collected points as a polygon, in screen coordinates.
void prepareForDisplay(const QPolygonF &polygon, int pointRadius, const DocumentModelAxesChecker &modelAxesChecker, const DocumentModelCoords &modelCoords)
Create the polygon from current information, including pixel coordinates, just prior to display...
Definition: Checker.cpp:432
Model for DlgSettingsGridRemoval and CmdSettingsGridRemoval. The settings are unstable until the user...
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. ...
DocumentModelGridRemoval modelGridRemoval() const
Get method for DocumentModelGridRemoval.
Definition: Document.cpp:680