Engauge Digitizer  2
 All Classes Files Functions Variables Enumerations Enumerator Friends Pages
DigitizeStatePointMatch.h
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 #ifndef DIGITIZE_STATE_POINT_MATCH_H
8 #define DIGITIZE_STATE_POINT_MATCH_H
9 
10 #include "DigitizeStateAbstractBase.h"
11 #include "PointMatchPixel.h"
12 #include <QList>
13 #include <QPoint>
14 
16 class QGraphicsEllipseItem;
17 class QGraphicsPixmapItem;
18 class QImage;
19 
22 {
23 public:
26  virtual ~DigitizeStatePointMatch();
27 
28  virtual QString activeCurve () const;
29  virtual void begin(CmdMediator *cmdMediator,
30  DigitizeState previousState);
31  virtual QCursor cursor (CmdMediator *cmdMediator) const;
32  virtual void end();
33  virtual void handleCurveChange(CmdMediator *cmdMediator);
34  virtual void handleKeyPress (CmdMediator *cmdMediator,
35  Qt::Key key,
36  bool atLeastOneSelectedItem);
37  virtual void handleMouseMove (CmdMediator *cmdMediator,
38  QPointF posScreen);
39  virtual void handleMousePress (CmdMediator *cmdMediator,
40  QPointF posScreen);
41  virtual void handleMouseRelease (CmdMediator *cmdMediator,
42  QPointF posScreen);
43  virtual QString state() const;
44  virtual void updateModelDigitizeCurve (CmdMediator *cmdMediator,
45  const DocumentModelDigitizeCurve &modelDigitizeCurve);
46  virtual void updateModelSegments(const DocumentModelSegments &modelSegments);
47 
48 private:
50 
51  void createPermanentPoint (CmdMediator *cmdMediator,
52  const QPointF &posScreen);
53  void createTemporaryPoint (CmdMediator *cmdMediator,
54  const QPoint &posScreen);
55  QList<PointMatchPixel> extractSamplePointPixels (const QImage &img,
56  const DocumentModelPointMatch &modelPointMatch,
57  const QPointF &posScreen) const;
58  void findPointsAndShowFirstCandidate (CmdMediator *cmdMediator,
59  const QPointF &posScreen);
60  bool pixelIsOnInImage (const QImage &img,
61  int x,
62  int y,
63  int radiusLimit) const;
64  void popCandidatePoint (CmdMediator *cmdMediator);
65  void promoteCandidatePointToPermanentPoint(CmdMediator *cmdMediator);
66 
67  QGraphicsEllipseItem *m_outline;
68  QGraphicsPixmapItem *m_candidatePoint;
69 
70  // Candidate points sorted from best match to worst match. Once accepted, each is removed since there
71  // is now an "official" point in the Document and GraphicsScene
72  QList<QPoint> m_candidatePoints;
73 
74  QPoint m_posCandidatePoint;
75 };
76 
77 #endif // DIGITIZE_STATE_POINT_MATCH_H
Model for DlgSettingsPointMatch and CmdSettingsPointMatch.
virtual void updateModelSegments(const DocumentModelSegments &modelSegments)
Update the segments given the new settings.
DigitizeStateContext & context()
Reference to the DigitizeStateContext that contains all the DigitizeStateAbstractBase subclasses...
virtual void handleMousePress(CmdMediator *cmdMediator, QPointF posScreen)
Handle a mouse press that was intercepted earlier.
virtual void handleMouseMove(CmdMediator *cmdMediator, QPointF posScreen)
Handle a mouse move. This is part of an experiment to see if augmenting the cursor in Point Match mod...
Digitizing state for matching Curve Points, one at a time.
Model for DlgSettingsDigitizeCurve and CmdSettingsDigitizeCurve.
virtual void handleKeyPress(CmdMediator *cmdMediator, Qt::Key key, bool atLeastOneSelectedItem)
Handle a key press that was intercepted earlier.
Container for all DigitizeStateAbstractBase subclasses. This functions as the context class in a stan...
virtual void handleMouseRelease(CmdMediator *cmdMediator, QPointF posScreen)
Handle a mouse release that was intercepted earlier.
virtual QCursor cursor(CmdMediator *cmdMediator) const
Returns the state-specific cursor shape.
virtual void handleCurveChange(CmdMediator *cmdMediator)
Handle the selection of a new curve. At a minimum, DigitizeStateSegment will generate a new set of Se...
virtual QString state() const
State name for debugging.
virtual void begin(CmdMediator *cmdMediator, DigitizeState previousState)
Method that is called at the exact moment a state is entered.
virtual void end()
Method that is called at the exact moment a state is exited. Typically called just before begin for t...
Command queue stack.
Definition: CmdMediator.h:23
Model for DlgSettingsSegments and CmdSettingsSegments.
Base class for all digitizing states. This serves as an interface to DigitizeStateContext.
virtual void updateModelDigitizeCurve(CmdMediator *cmdMediator, const DocumentModelDigitizeCurve &modelDigitizeCurve)
Update the digitize curve settings.
virtual QString activeCurve() const
Name of the active Curve. This can include AXIS_CURVE_NAME.