10
10
#include < QDebug>
11
11
#include < assert.h>
12
12
13
- ReflectionPoint::ReflectionPoint (VerifyView *_view, QRectF rect, QGraphicsItem *parent):
14
- QGraphicsEllipseItem(rect, parent), view(_view) {
15
- init ();
16
- }
17
13
18
- void ReflectionPoint::init () {
14
+ VerifyMarker::VerifyMarker (VerifyView *_view, Marker _marker, QGraphicsItem *parent):
15
+ QGraphicsItem(parent), view(_view), marker(_marker) {
19
16
setCursor (Qt::CrossCursor);
20
17
setFlag (QGraphicsItem::ItemIsMovable);
21
18
setFlag (QGraphicsItem::ItemIsSelectable);
22
19
setFlag (QGraphicsItem::ItemSendsScenePositionChanges);
23
20
}
24
21
25
-
26
- AlignPoint::AlignPoint (VerifyView *_view, QGraphicsItem *parent):
27
- QGraphicsPathItem(parent), view(_view) {
22
+ QPainterPath VerifyMarker::shape () const {
28
23
QPainterPath path;
29
- path.moveTo (-2 , 0 );
30
- path.lineTo (2 , 0 );
31
- path.moveTo (0 , -2 );
32
- path.lineTo (0 , 2 );
33
- setPath (path);
34
- init ();
24
+ if (marker == ALIGN)
25
+ path.addRect (-3 , -3 , 6 , 6 );
26
+ else
27
+ path.addRect (-radius-2 , -radius-2 , 2 *(radius+2 ), 2 *(radius+2 ));
28
+ return path;
35
29
}
36
30
37
- void AlignPoint::init () {
38
- setCursor (Qt::CrossCursor);
39
- setFlag (QGraphicsItem::ItemIsMovable);
40
- setFlag (QGraphicsItem::ItemIsSelectable);
41
- setFlag (QGraphicsItem::ItemSendsScenePositionChanges);
31
+ QRectF VerifyMarker::boundingRect () const {
32
+ return QRectF (-3 , -3 , 6 , 6 );
42
33
}
43
34
44
- QVariant ReflectionPoint::itemChange (GraphicsItemChange change, const QVariant &value) {
45
- if ((change == ItemPositionChange && scene ()) ) {
46
-
47
- QPointF newPos = value.toPointF ();
48
- QRectF rect = scene ()->sceneRect ();
49
- if (!rect.contains (newPos)) {
50
- // Keep the item inside the scene rect.
51
- newPos.setX (qMin (rect.right (), qMax (newPos.x (), rect.left ())));
52
- newPos.setY (qMin (rect.bottom (), qMax (newPos.y (), rect.top ())));
53
- }
54
- return newPos;
55
- }
56
-
57
- if (change == ItemScenePositionHasChanged) {
58
- view->update ();
35
+ void VerifyMarker::paint (QPainter* painter, const QStyleOptionGraphicsItem*, QWidget*) {
36
+ QPen pen (active ? Qt::green : Qt::red, marker == ALIGN? 0.2 : 2 );
37
+ painter->setPen (pen);
38
+ if (marker == ALIGN) {
39
+ painter->drawLine (QPointF (-2 , 0 ), QPointF (2 , 0 ));
40
+ painter->drawLine (QPointF (0 , -2 ), QPointF (0 , 2 ));
41
+ } else {
42
+ painter->drawEllipse (QPointF (0 , 0 ), radius, radius);
59
43
}
60
- return QGraphicsItem::itemChange (change, value);
61
44
}
62
45
63
- QVariant AlignPoint ::itemChange (GraphicsItemChange change, const QVariant &value) {
46
+ QVariant VerifyMarker ::itemChange (GraphicsItemChange change, const QVariant &value) {
64
47
if ((change == ItemPositionChange && scene ()) ) {
65
48
66
49
QPointF newPos = value.toPointF ();
@@ -79,8 +62,9 @@ QVariant AlignPoint::itemChange(GraphicsItemChange change, const QVariant &value
79
62
return QGraphicsItem::itemChange (change, value);
80
63
}
81
64
82
- VerifyView:: VerifyView(QImage &_image, int _height, QPointF &_pos, QWidget *parent):
83
- QGraphicsView (parent), image(_image), pos(_pos) {
65
+
66
+ VerifyView:: VerifyView(QImage &_image, int _height, QPointF &_pos, VerifyMarker::Marker _marker, QWidget *parent):
67
+ QGraphicsView (parent), marker(_marker), image(_image), pos(_pos) {
84
68
height = _height;
85
69
setScene (&scene);
86
70
@@ -91,68 +75,34 @@ VerifyView:: VerifyView(QImage &_image, int _height, QPointF &_pos, QWidget *par
91
75
img_item = scene.addPixmap (pix);
92
76
double scale = height/(double )pix.height ();
93
77
setFixedSize (pix.width ()*scale, height);
94
- }
95
-
96
- ReflectionVerify::ReflectionVerify (QImage&_image, int _height, QPointF &_pos, QWidget *parent):
97
- VerifyView(_image, _height, _pos, parent) {
98
- double scale = height/double (image.height ());
99
- int r = 8 *scale;
100
- reflection = new ReflectionPoint (this , QRectF (QPointF (-r, -r), QSize (2 *r, 2 *r)));
101
- if (pos.isNull ()) {
102
- reflection->setPos (image.width ()/2 , image.height ()/2 );
103
- reflection->setPen (QPen (Qt::red, 2 ));
104
-
105
- } else {
106
- reflection->setPos (pos);
107
- reflection->setPen (QPen (Qt::green, 2 ));
108
- }
109
- scene.addItem (reflection);
110
- }
111
-
112
- AlignVerify::AlignVerify (QImage&_image, int _height, QPointF &_pos, QWidget *parent):
113
- VerifyView(_image, _height, _pos, parent) {
114
78
115
- align = new AlignPoint (this );
79
+ marker_item = new VerifyMarker (this , marker);
80
+ marker_item->radius = 8 *scale;
116
81
if (pos.isNull ()) {
117
- align ->setPos (image.width ()/2 , image.height ()/2 );
118
- align-> setPen ( QPen (Qt::red, 0.2 )) ;
82
+ marker_item ->setPos (image.width ()/2 , image.height ()/2 );
83
+ marker_item-> active = false ;
119
84
120
85
} else {
121
- align ->setPos (pos);
122
- align-> setPen ( QPen (Qt::green, 0.2 )) ;
86
+ marker_item ->setPos (pos);
87
+ marker_item-> active = true ;
123
88
}
124
- scene.addItem (align );
89
+ scene.addItem (marker_item );
125
90
}
126
91
127
92
128
- void ReflectionVerify ::update () {
129
- QPointF p = reflection ->pos ();
93
+ void VerifyView ::update () {
94
+ QPointF p = marker_item ->pos ();
130
95
if (!img_item->boundingRect ().contains (p)) {
131
- reflection ->setPos (image.width ()/2 , image.height ()/2 );
132
- reflection-> setPen ( QPen (Qt::red, 2 )) ;
96
+ marker_item ->setPos (image.width ()/2 , image.height ()/2 );
97
+ marker_item-> active = false ;
133
98
pos = QPointF (0 , 0 ); // order is important: setPos triggers again.
134
99
135
100
} else {
136
101
pos = p;
137
- reflection-> setPen ( QPen (Qt::green, 2 )) ;
102
+ marker_item-> active = true ;
138
103
}
139
104
}
140
105
141
-
142
- void AlignVerify::update () {
143
- QPointF p = align->pos ();
144
- if (!img_item->boundingRect ().contains (p)) {
145
- align->setPos (image.width ()/2 , image.height ()/2 );
146
- align->setPen (QPen (Qt::red, 0.2 ));
147
- pos = QPointF (0 , 0 ); // order is important: setPos triggers again.
148
-
149
- } else {
150
- pos = p;
151
- align->setPen (QPen (Qt::green, 0.2 ));
152
- }
153
- }
154
-
155
-
156
106
void VerifyView::resizeEvent (QResizeEvent *) {
157
107
fitInView (img_item->boundingRect ()); // .sceneRect()); //img_item);
158
108
}
0 commit comments