-
Notifications
You must be signed in to change notification settings - Fork 0
/
draganddropgraphicsscene.cpp
146 lines (115 loc) · 5.77 KB
/
draganddropgraphicsscene.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
#include "draganddropgraphicsscene.h";
#include "annotatetab.h";
DragAndDropGraphicsScene::DragAndDropGraphicsScene( AnnotateTab* annotateTab, ImageType imageType) {
this->annotateTab = annotateTab;
this->imageType = imageType;
// Draw annotations if any
QPainter painter(this->imageType == ImageType::Color ? this->annotateTab->getAnnotatedColorImage() : this->annotateTab->getAnnotatedDepthToColorImage());
painter.setPen(QPen(Qt::red, 8, Qt::SolidLine, Qt::RoundCap));
for(auto it: *this->annotateTab->getAnnotations()) {
if(!it.second.isNull()) painter.drawPoint(it.second.x(), it.second.y());
}
painter.setPen(QPen(Qt::white , 2, Qt::SolidLine, Qt::RoundCap));
for(auto it: *this->annotateTab->getAnnotations()) {
if(!it.second.isNull()) painter.drawText(it.second.x(), it.second.y(), QString::fromStdString(it.first));
}
painter.setPen(QPen(Qt::white , 0.5, Qt::DashLine, Qt::RoundCap));
painter.drawLine(
(*this->annotateTab->getAnnotations())["b1"].x(), (*this->annotateTab->getAnnotations())["b1"].y(),
(*this->annotateTab->getAnnotations())["b2"].x(), (*this->annotateTab->getAnnotations())["b2"].y()
);
painter.drawLine(
(*this->annotateTab->getAnnotations())["c1"].x(), (*this->annotateTab->getAnnotations())["c1"].y(),
(*this->annotateTab->getAnnotations())["c2"].x(), (*this->annotateTab->getAnnotations())["c2"].y()
);
painter.end();
this->addPixmap(QPixmap::fromImage(this->imageType == ImageType::Color ? *this->annotateTab->getAnnotatedColorImage() : *this->annotateTab->getAnnotatedDepthToColorImage()));
this->annotateTab->computeMetrics();
this->annotateTab->setAnnotationsText();
}
void DragAndDropGraphicsScene::mousePressEvent(QGraphicsSceneMouseEvent *event) {
float x = event->scenePos().x(), y = event->scenePos().y();
this->isPoint = false;
this->pointKey = "";
for(auto it: *this->annotateTab->getAnnotations()) {
if (abs(it.second.x() - x) <= 5 && abs(it.second.y() - y) <= 5) {
this->isPoint = true;
this->pointKey = it.first;
}
}
if (event->button() == Qt::LeftButton && this->isPoint) {
QDrag* drag = new QDrag(this);
QPixmap* point = new QPixmap(5, 5);
point->fill(Qt::red);
QMimeData* mimeData = new QMimeData;
mimeData->setText("annotation");
drag->setMimeData(mimeData);
drag->setPixmap(*point);
Qt::DropAction dropAction = drag->exec(Qt::MoveAction);
}
}
void DragAndDropGraphicsScene::dropEvent(QGraphicsSceneDragDropEvent* event) {
if (this->isPoint) {
this->annotateTab->recopyAnnotatedImage();
float x = event->scenePos().x(), y = event->scenePos().y();
(*this->annotateTab->getAnnotations())[this->pointKey].setX(x);
(*this->annotateTab->getAnnotations())[this->pointKey].setY(y);
x *= *this->annotateTab->getScalingFactor();
y *= *this->annotateTab->getScalingFactor();
QVector3D vector3D = this->annotateTab->query3DPoint(x, y);
(*this->annotateTab->getAnnotations3D())[this->pointKey].setX(vector3D.x());
(*this->annotateTab->getAnnotations3D())[this->pointKey].setY(vector3D.y());
(*this->annotateTab->getAnnotations3D())[this->pointKey].setZ(vector3D.z());
QPainter painter(this->annotateTab->getAnnotatedColorImage());
QPainter painter2(this->annotateTab->getAnnotatedDepthToColorImage());
painter.setPen(QPen(Qt::red, 8, Qt::SolidLine, Qt::RoundCap));
painter2.setPen(QPen(Qt::red, 8, Qt::SolidLine, Qt::RoundCap));
for(auto it: *this->annotateTab->getAnnotations()) {
painter.drawPoint(it.second.x(), it.second.y());
painter2.drawPoint(it.second.x(), it.second.y());
}
painter.setPen(QPen(Qt::white , 2, Qt::SolidLine, Qt::RoundCap));
painter2.setPen(QPen(Qt::white , 2, Qt::SolidLine, Qt::RoundCap));
for(auto it: *this->annotateTab->getAnnotations()) {
painter.drawText(it.second.x(), it.second.y(), QString::fromStdString(it.first));
painter2.drawText(it.second.x(), it.second.y(), QString::fromStdString(it.first));
}
painter.setPen(QPen(Qt::white , 0.5, Qt::DashLine, Qt::RoundCap));
painter2.setPen(QPen(Qt::white , 0.5, Qt::DashLine, Qt::RoundCap));
painter.drawLine(
(*this->annotateTab->getAnnotations())["b1"].x(), (*this->annotateTab->getAnnotations())["b1"].y(),
(*this->annotateTab->getAnnotations())["b2"].x(), (*this->annotateTab->getAnnotations())["b2"].y()
);
painter2.drawLine(
(*this->annotateTab->getAnnotations())["b1"].x(), (*this->annotateTab->getAnnotations())["b1"].y(),
(*this->annotateTab->getAnnotations())["b2"].x(), (*this->annotateTab->getAnnotations())["b2"].y()
);
painter.drawLine(
(*this->annotateTab->getAnnotations())["c1"].x(), (*this->annotateTab->getAnnotations())["c1"].y(),
(*this->annotateTab->getAnnotations())["c2"].x(), (*this->annotateTab->getAnnotations())["c2"].y()
);
painter2.drawLine(
(*this->annotateTab->getAnnotations())["c1"].x(), (*this->annotateTab->getAnnotations())["c1"].y(),
(*this->annotateTab->getAnnotations())["c2"].x(), (*this->annotateTab->getAnnotations())["c2"].y()
);
painter.end();
painter2.end();
if (this->imageType == ImageType::Color) {
this->addPixmap(QPixmap::fromImage(*this->annotateTab->getAnnotatedColorImage()));
this->annotateTab->getDepthToColorScene()->addPixmap(QPixmap::fromImage(*this->annotateTab->getAnnotatedDepthToColorImage()));
}
if (this->imageType == ImageType::DepthToColor) {
this->annotateTab->getColorScene()->addPixmap(QPixmap::fromImage(*this->annotateTab->getAnnotatedColorImage()));
this->addPixmap(QPixmap::fromImage(*this->annotateTab->getAnnotatedDepthToColorImage()));
}
this->annotateTab->computeMetrics();
this->annotateTab->setAnnotationsText();
}
event->acceptProposedAction();
}
void DragAndDropGraphicsScene::dragEnterEvent(QGraphicsSceneDragDropEvent* event) {
event->acceptProposedAction();
}
void DragAndDropGraphicsScene::dragMoveEvent(QGraphicsSceneDragDropEvent* event) {
event->acceptProposedAction();
}