00001
00002
00003
00004
00005
00006
00007 #ifndef DIGITIZE_STATE_POINT_MATCH_H
00008 #define DIGITIZE_STATE_POINT_MATCH_H
00009
00010 #include "DigitizeStateAbstractBase.h"
00011 #include "PointMatchPixel.h"
00012 #include <QList>
00013 #include <QPoint>
00014
00015 class DocumentModelPointMatch;
00016 class QGraphicsEllipseItem;
00017 class QGraphicsPixmapItem;
00018 class QImage;
00019
00021 class DigitizeStatePointMatch : public DigitizeStateAbstractBase
00022 {
00023 public:
00025 DigitizeStatePointMatch(DigitizeStateContext &context);
00026 virtual ~DigitizeStatePointMatch();
00027
00028 virtual QString activeCurve () const;
00029 virtual void begin(CmdMediator *cmdMediator,
00030 DigitizeState previousState);
00031 virtual QCursor cursor (CmdMediator *cmdMediator) const;
00032 virtual void end();
00033 virtual void handleCurveChange(CmdMediator *cmdMediator);
00034 virtual void handleKeyPress (CmdMediator *cmdMediator,
00035 Qt::Key key,
00036 bool atLeastOneSelectedItem);
00037 virtual void handleMouseMove (CmdMediator *cmdMediator,
00038 QPointF posScreen);
00039 virtual void handleMousePress (CmdMediator *cmdMediator,
00040 QPointF posScreen);
00041 virtual void handleMouseRelease (CmdMediator *cmdMediator,
00042 QPointF posScreen);
00043 virtual QString state() const;
00044 virtual void updateModelDigitizeCurve (CmdMediator *cmdMediator,
00045 const DocumentModelDigitizeCurve &modelDigitizeCurve);
00046 virtual void updateModelSegments(const DocumentModelSegments &modelSegments);
00047
00048 private:
00049 DigitizeStatePointMatch();
00050
00051 void createPermanentPoint (CmdMediator *cmdMediator,
00052 const QPointF &posScreen);
00053 void createTemporaryPoint (CmdMediator *cmdMediator,
00054 const QPoint &posScreen);
00055 QList<PointMatchPixel> extractSamplePointPixels (const QImage &img,
00056 const DocumentModelPointMatch &modelPointMatch,
00057 const QPointF &posScreen) const;
00058 void findPointsAndShowFirstCandidate (CmdMediator *cmdMediator,
00059 const QPointF &posScreen);
00060 bool pixelIsOnInImage (const QImage &img,
00061 int x,
00062 int y,
00063 int radiusLimit) const;
00064 void popCandidatePoint (CmdMediator *cmdMediator);
00065 void promoteCandidatePointToPermanentPoint(CmdMediator *cmdMediator);
00066
00067 QGraphicsEllipseItem *m_outline;
00068 QGraphicsPixmapItem *m_candidatePoint;
00069
00070
00071
00072 QList<QPoint> m_candidatePoints;
00073
00074 QPoint m_posCandidatePoint;
00075 };
00076
00077 #endif // DIGITIZE_STATE_POINT_MATCH_H