5
5
#include " ../src/sphere.h"
6
6
7
7
#include < QGraphicsPixmapItem>
8
+ #include < QGraphicsPathItem>
8
9
#include < QRectF>
9
10
#include < QDebug>
10
11
#include < assert.h>
11
12
12
- ReflectionPoint::ReflectionPoint (VerifyView *_view, qreal x, qreal y, qreal w, qreal h, QGraphicsItem *parent):
13
- QGraphicsEllipseItem(x, y, w, h, parent), view(_view) {
14
- init ();
15
- }
16
13
ReflectionPoint::ReflectionPoint (VerifyView *_view, QRectF rect, QGraphicsItem *parent):
17
14
QGraphicsEllipseItem(rect, parent), view(_view) {
18
-
19
15
init ();
20
16
}
21
17
@@ -26,6 +22,25 @@ void ReflectionPoint::init() {
26
22
setFlag (QGraphicsItem::ItemSendsScenePositionChanges);
27
23
}
28
24
25
+
26
+ AlignPoint::AlignPoint (VerifyView *_view, QGraphicsItem *parent):
27
+ QGraphicsPathItem(parent), view(_view) {
28
+ 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 ();
35
+ }
36
+
37
+ void AlignPoint::init () {
38
+ setCursor (Qt::CrossCursor);
39
+ setFlag (QGraphicsItem::ItemIsMovable);
40
+ setFlag (QGraphicsItem::ItemIsSelectable);
41
+ setFlag (QGraphicsItem::ItemSendsScenePositionChanges);
42
+ }
43
+
29
44
QVariant ReflectionPoint::itemChange (GraphicsItemChange change, const QVariant &value) {
30
45
if ((change == ItemPositionChange && scene ()) ) {
31
46
@@ -40,12 +55,31 @@ QVariant ReflectionPoint::itemChange(GraphicsItemChange change, const QVariant &
40
55
}
41
56
42
57
if (change == ItemScenePositionHasChanged) {
43
- view->updateReflection ();
58
+ view->update ();
59
+ }
60
+ return QGraphicsItem::itemChange (change, value);
61
+ }
62
+
63
+ QVariant AlignPoint::itemChange (GraphicsItemChange change, const QVariant &value) {
64
+ if ((change == ItemPositionChange && scene ()) ) {
65
+
66
+ QPointF newPos = value.toPointF ();
67
+ QRectF rect = scene ()->sceneRect ();
68
+ if (!rect.contains (newPos)) {
69
+ // Keep the item inside the scene rect.
70
+ newPos.setX (qMin (rect.right (), qMax (newPos.x (), rect.left ())));
71
+ newPos.setY (qMin (rect.bottom (), qMax (newPos.y (), rect.top ())));
72
+ }
73
+ return newPos;
74
+ }
75
+
76
+ if (change == ItemScenePositionHasChanged) {
77
+ view->update ();
44
78
}
45
79
return QGraphicsItem::itemChange (change, value);
46
80
}
47
81
48
- VerifyView:: VerifyView(QImage &_image, QPointF &_pos, int _height , QWidget *parent):
82
+ VerifyView:: VerifyView(QImage &_image, int _height, QPointF &_pos , QWidget *parent):
49
83
QGraphicsView (parent), image(_image), pos(_pos) {
50
84
height = _height;
51
85
setScene (&scene);
@@ -57,7 +91,11 @@ VerifyView:: VerifyView(QImage &_image, QPointF &_pos, int _height, QWidget *par
57
91
img_item = scene.addPixmap (pix);
58
92
double scale = height/(double )pix.height ();
59
93
setFixedSize (pix.width ()*scale, height);
94
+ }
60
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 ());
61
99
int r = 8 *scale;
62
100
reflection = new ReflectionPoint (this , QRectF (QPointF (-r, -r), QSize (2 *r, 2 *r)));
63
101
if (pos.isNull ()) {
@@ -71,7 +109,23 @@ VerifyView:: VerifyView(QImage &_image, QPointF &_pos, int _height, QWidget *par
71
109
scene.addItem (reflection);
72
110
}
73
111
74
- void VerifyView::updateReflection () {
112
+ AlignVerify::AlignVerify (QImage&_image, int _height, QPointF &_pos, QWidget *parent):
113
+ VerifyView(_image, _height, _pos, parent) {
114
+
115
+ align = new AlignPoint (this );
116
+ if (pos.isNull ()) {
117
+ align->setPos (image.width ()/2 , image.height ()/2 );
118
+ align->setPen (QPen (Qt::red, 0.2 ));
119
+
120
+ } else {
121
+ align->setPos (pos);
122
+ align->setPen (QPen (Qt::green, 0.2 ));
123
+ }
124
+ scene.addItem (align);
125
+ }
126
+
127
+
128
+ void ReflectionVerify::update () {
75
129
QPointF p = reflection->pos ();
76
130
if (!img_item->boundingRect ().contains (p)) {
77
131
reflection->setPos (image.width ()/2 , image.height ()/2 );
@@ -85,6 +139,20 @@ void VerifyView::updateReflection() {
85
139
}
86
140
87
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
+
88
156
void VerifyView::resizeEvent (QResizeEvent *) {
89
157
fitInView (img_item->boundingRect ()); // .sceneRect()); //img_item);
90
158
}
0 commit comments