-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathgraphpainter.cpp
More file actions
103 lines (80 loc) · 2.98 KB
/
graphpainter.cpp
File metadata and controls
103 lines (80 loc) · 2.98 KB
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
#include "graphpainter.h"
GraphPainter::GraphPainter(QWidget *parent) : QWidget(parent)
{
pointerToGraphMatrix=NULL;
pointColor=QColor(Qt::red);
lineColor=QColor(Qt::gray);
pathColor=QColor(Qt::green);
showLabels=true;
}
void GraphPainter::update(QObject * sender){
Q_UNUSED (sender);
pointerToGraphMatrix=Engine::getInstance()->getGraph();
repaint();
}
void GraphPainter::paintEvent(QPaintEvent * event){
Q_UNUSED(event);
if(pointerToGraphMatrix==NULL) return;
QPoint widgetCenter(this->width()/2,this->height()/2);
QVector<QPoint> pointsCordinates;
int numberOfElements=pointerToGraphMatrix->getVerticesNumber();
float angleStep=2.0*PI/numberOfElements;
float radius=width()>height()?height():width();
for(int index=0;index<numberOfElements;index++){
QPoint point;
point.setX(sin(angleStep*index)*radius/2.5);
point.setY(cos(angleStep*index)*radius/2.5);
pointsCordinates.push_back(point+widgetCenter);
}
QPainter painter(this);
painter.setRenderHint(QPainter::Antialiasing);
painter.setPen(QPen(lineColor,2));
for(int index=0;index<numberOfElements;index++){
// idzie po górnym trójkącie
for(int index2=index;index2<numberOfElements;index2++){
if((*pointerToGraphMatrix)[index][index2]){
painter.drawLine(pointsCordinates[index],pointsCordinates[index2]);
}
}
}
painter.setPen(QPen(pathColor,2));
std::vector<int> path=Engine::getInstance()->path;
for(int indexOfFirst=0;indexOfFirst+1<path.size();indexOfFirst++){
if(path[indexOfFirst]>=0 && path[indexOfFirst]<pointsCordinates.length()
&& path[indexOfFirst+1]>=0 && path[indexOfFirst+1]<pointsCordinates.length()){
QPoint A=pointsCordinates[path[indexOfFirst]];
QPoint B=pointsCordinates[path[indexOfFirst+1]];
painter.drawLine(A,B);
}
else{
break;
}
}
painter.setPen(QPen(pointColor,2));
int ID=1;
for(int index=0;index<numberOfElements;index++){
// idzie po górnym trójkącie
for(int index2=index;index2<numberOfElements;index2++){
if((*pointerToGraphMatrix)[index][index2]){
QPoint textCord((pointsCordinates[index].x()+pointsCordinates[index2].x())/2,(pointsCordinates[index].y()+pointsCordinates[index2].y())/2);
painter.drawText(textCord,QString::number(ID));
ID++;
}
}
}
for(int index=0;index<numberOfElements;index++){
QPoint point=pointsCordinates[index];
painter.setPen(QPen(pointColor,2));
painter.drawEllipse(point,3,3);
if(showLabels){
painter.setPen(Qt::black);
painter.drawText(point+QPoint(4,-4),QString::number(index+1));
}
}
}
void GraphPainter::setPointColor(QColor pointC){
pointColor=pointC;
}
void GraphPainter::setLineColor(QColor lineC){
lineColor=lineC;
}