-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathGridAxisItem.cpp
More file actions
87 lines (77 loc) · 3.46 KB
/
GridAxisItem.cpp
File metadata and controls
87 lines (77 loc) · 3.46 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
#include "GridAxisItem.h"
QRectF GridAxisItem::boundingRect() const
{
//return scene()->sceneRect();
//return QRectF(10, 10, 200, 200);
return QRectF(0, 0, view->width() - PADDING, view->height() - PADDING);
}
void GridAxisItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option,
QWidget *widget)
{
//painter->drawText(boundingRect(), "This is the grid", QTextOption(Qt::AlignRight));
// int parentWidth = view->width();
// int parentHeight = view->height();
QRectF scene = view->sceneRect();
int parentWidth = scene.width();
int parentHeight = scene.height();
int parentLeft = scene.x();
int parentTop = scene.y();
int gridLeft = scene.x() + PADDING;
int gridTop = scene.y() + PADDING;
int gridWidth = scene.width() - (2 * PADDING);
int gridHeight = scene.height() - (2 * PADDING);
int gridRight = gridLeft + gridWidth;
int gridBottom = gridTop + gridHeight;
int gridWMid = gridLeft + (gridWidth / 2);
int gridHMid = gridTop + (gridHeight / 2);
QPen axisPen;
QColor axisColor(80, 80, 80);
axisPen.setWidth(2);
axisPen.setColor(axisColor);
painter->setRenderHint(QPainter::Antialiasing);
QPen dotPen(axisPen);
dotPen.setWidth(1);
dotPen.setColor(QColor(50, 50, 50, 100));
// Draw axis lines
painter->setPen(axisPen);
painter->setBrush(axisColor);
painter->drawLine(gridLeft + ARROW_LENGTH, gridHMid, gridRight - ARROW_LENGTH, gridHMid);
painter->drawLine(gridWMid, gridTop + ARROW_LENGTH, gridWMid, gridBottom - ARROW_LENGTH);
// Draw axis arrows
QVector<QPoint> topArrowPoints;
topArrowPoints.push_back(QPoint(gridWMid, gridTop));
topArrowPoints.push_back(QPoint((gridWMid) + (ARROW_WIDTH / 2), gridTop + ARROW_LENGTH));
topArrowPoints.push_back(QPoint((gridWMid) - (ARROW_WIDTH / 2), gridTop + ARROW_LENGTH));
QPolygon topArrow(topArrowPoints);
painter->drawPolygon(topArrow);
QVector<QPoint> leftArrowPoints;
leftArrowPoints.push_back(QPoint(gridLeft, gridHMid));
leftArrowPoints.push_back(QPoint(gridLeft + ARROW_LENGTH, (gridHMid) - (ARROW_WIDTH / 2)));
leftArrowPoints.push_back(QPoint(gridLeft + ARROW_LENGTH, (gridHMid) + (ARROW_WIDTH / 2)));
QPolygon leftArrow(leftArrowPoints);
painter->drawPolygon(leftArrow);
QVector<QPoint> rightArrowPoints;
rightArrowPoints.push_back(QPoint(gridRight, gridHMid));
rightArrowPoints.push_back(QPoint(gridRight - ARROW_LENGTH, (gridHMid) - (ARROW_WIDTH / 2)));
rightArrowPoints.push_back(QPoint(gridRight - ARROW_LENGTH, (gridHMid) + (ARROW_WIDTH / 2)));
QPolygon rightArrow(rightArrowPoints);
painter->drawPolygon(rightArrow);
QVector<QPoint> botArrowPoints;
botArrowPoints.push_back(QPoint(gridWMid, gridBottom));
botArrowPoints.push_back(QPoint((gridWMid) + (ARROW_WIDTH / 2), gridBottom - ARROW_LENGTH));
botArrowPoints.push_back(QPoint((gridWMid) - (ARROW_WIDTH / 2), gridBottom - ARROW_LENGTH));
QPolygon botArrow(botArrowPoints);
painter->drawPolygon(botArrow);
// Draw grid dots
painter->setPen(dotPen);
for(int i = gridWMid % DOT_SPACING; i <= gridRight; i += DOT_SPACING)
{
for(int j = gridHMid % DOT_SPACING; j <= gridBottom; j += DOT_SPACING)
{
if(i >= gridLeft && j >= gridTop && i != gridLeft + (gridWidth / 2) && j != gridTop + (gridHeight / 2))
{
painter->drawEllipse(QPoint(i, j), DOT_RADIUS, DOT_RADIUS);
}
}
}
}