Engauge Digitizer  2
BackgroundStateCurve.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 "BackgroundStateContext.h"
8 #include "BackgroundStateCurve.h"
9 #include "DocumentModelColorFilter.h"
10 #include "DocumentModelGridRemoval.h"
11 #include "FilterImage.h"
12 #include "GraphicsScene.h"
13 #include "GraphicsView.h"
14 #include "Logger.h"
15 #include <QPixmap>
16 #include "Transformation.h"
17 
19  GraphicsScene &scene) :
21  scene)
22 {
23 }
24 
26 {
27  LOG4CPP_INFO_S ((*mainCat)) << "BackgroundStateCurve::begin";
28 
29  setImageVisible (true);
30 }
31 
33 {
34  LOG4CPP_INFO_S ((*mainCat)) << "BackgroundStateCurve::end";
35 
36  setImageVisible (false);
37 }
38 
40 {
41  LOG4CPP_INFO_S ((*mainCat)) << "BackgroundStateCurve::fitInView";
42 
43  view.fitInView (imageItem ().boundingRect());
44 }
45 
46 void BackgroundStateCurve::processImageFromSavedInputs (const Transformation &transformation,
47  const DocumentModelGridRemoval &modelGridRemoval,
48  const DocumentModelColorFilter &modelColorFilter,
49  const QString &curveSelected)
50 {
51  LOG4CPP_INFO_S ((*mainCat)) << "BackgroundStateCurve::processImageFromSavedInputs";
52 
53  // Use the settings if the selected curve is known
54  if (!curveSelected.isEmpty()) {
55 
56  // Generate filtered image
57  FilterImage filterImage;
58  QPixmap pixmapFiltered = filterImage.filter (m_pixmapOriginal.toImage(),
59  transformation,
60  curveSelected,
61  modelColorFilter,
62  modelGridRemoval);
63 
64  setProcessedPixmap (pixmapFiltered);
65 
66  } else {
67 
68  // Set the image in case BackgroundStateContext::fitInView is called, so the bounding rect is available
69  setProcessedPixmap (m_pixmapOriginal);
70 
71  }
72 }
73 
75  const DocumentModelGridRemoval &modelGridRemoval,
76  const DocumentModelColorFilter &modelColorFilter,
77  const QString &curveSelected)
78 {
79  LOG4CPP_INFO_S ((*mainCat)) << "BackgroundStateCurve::setCurveSelected"
80  << " curve=" << curveSelected.toLatin1().data();
81 
82  // Even if m_curveSelected equals curveSelected we update the image, since the transformation
83  // may have changed
84  processImageFromSavedInputs (transformation,
85  modelGridRemoval,
86  modelColorFilter,
87  curveSelected);
88 }
89 
90 void BackgroundStateCurve::setPixmap (const Transformation &transformation,
91  const DocumentModelGridRemoval &modelGridRemoval,
92  const DocumentModelColorFilter &modelColorFilter,
93  const QPixmap &pixmapOriginal,
94  const QString &curveSelected)
95 {
96  LOG4CPP_INFO_S ((*mainCat)) << "BackgroundStateCurve::setPixmap";
97 
98  m_pixmapOriginal = pixmapOriginal;
99  processImageFromSavedInputs (transformation,
100  modelGridRemoval,
101  modelColorFilter,
102  curveSelected);
103 }
104 
106 {
107  return "BackgroundStateCurve";
108 }
109 
111  const DocumentModelGridRemoval &modelGridRemoval,
112  const DocumentModelColorFilter &modelColorFilter,
113  const QString &curveSelected)
114 {
115  LOG4CPP_INFO_S ((*mainCat)) << "BackgroundStateCurve::updateColorFilter";
116 
117  processImageFromSavedInputs (transformation,
118  modelGridRemoval,
119  modelColorFilter,
120  curveSelected);
121 }
virtual void begin()
Method that is called at the exact moment a state is entered. Typically called just after end for the...
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:21
void setImageVisible(bool visible)
Show/hide background image.
void setProcessedPixmap(const QPixmap &pixmap)
Save the image for this state after it has been processed by the leaf class.
BackgroundStateCurve(BackgroundStateContext &context, GraphicsScene &scene)
Single constructor.
QGraphicsPixmapItem & imageItem() const
Graphics image item for the current state.
Affine transformation between screen and graph coordinates, based on digitized axis points...
Model for DlgSettingsColorFilter and CmdSettingsColorFilter.
virtual void updateColorFilter(const Transformation &transformation, const DocumentModelGridRemoval &modelGridRemoval, const DocumentModelColorFilter &colorFilter, const QString &curveSelected)
Apply color filter settings.
Context class that manages the background image state machine.
QGraphicsView class with event handling added. Typically the events are sent to the active digitizing...
Definition: GraphicsView.h:20
virtual void setPixmap(const Transformation &transformation, const DocumentModelGridRemoval &modelGridRemoval, const DocumentModelColorFilter &modelColorFilter, const QPixmap &pixmapOriginal, const QString &curveSelected)
Update the image for this state, after the leaf class processes it appropriately. ...
virtual void setCurveSelected(const Transformation &transformation, const DocumentModelGridRemoval &modelGridRemoval, const DocumentModelColorFilter &colorFilter, const QString &curveSelected)
Update the currently selected curve name.
Background image state machine state base class.
virtual void fitInView(GraphicsView &view)
Zoom so background fills the window.
Filters an image using a combination of color filtering and grid removal.
Definition: FilterImage.h:18
virtual QString state() const
State name for debugging.
virtual void end()
Method that is called at the exact moment a state is exited. Typically called just before begin for t...
Add point and line handling to generic QGraphicsScene.
Definition: GraphicsScene.h:33
Model for DlgSettingsGridRemoval and CmdSettingsGridRemoval. The settings are unstable until the user...