-
Notifications
You must be signed in to change notification settings - Fork 0
/
Dedeg3Scene.cpp
50 lines (43 loc) · 1.32 KB
/
Dedeg3Scene.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
#include "Dedg3Scene.h"
#include "CircleItem.h"
#include <QTimer>
#include <QCursor>
#include <QGraphicsView>
#include <QDebug>
Dedg3Scene::Dedg3Scene(QObject * parent) :QGraphicsScene(parent)
{
}
void Dedg3Scene::drawBackground(QPainter * painter, const QRectF & rect)
{
QGraphicsScene::drawBackground(painter, rect);
QPen p(QColor(111, 111, 111, 86));
p.setStyle(Qt::SolidLine);
painter->setPen(p);
auto allItems = items();
QVector<QLineF> allLines;
allLines.reserve(std::pow(allItems.size(), 2) / 2);
typedef std::tuple< CircleItem *, CircleItem *> CircleDrawData;
QVector<CircleDrawData> allData;
for (auto oneItemNoCast : allItems)
{
auto oneItem = static_cast<CircleItem *>(oneItemNoCast);
allData.push_back(std::make_tuple(oneItem, oneItem->mParent));
}
for (uint i = 0; i < allData.size(); ++i)
{
auto odData = allData[i];
for (uint j = i + 1; j < allData.size(); ++j)
{
auto osData = allData[j];
auto oCenPos = std::get<0>(odData)->centerPos();
auto sCenPos = std::get<0>(osData)->centerPos();
if (CircleItem::vecLenSqu(oCenPos - sCenPos) < std::pow(std::get<0>(odData)->diameter()/2, 2) * 1.44
|| std::get<0>(odData) == std::get<1>(osData)
|| std::get<1>(odData) == std::get<0>(osData))
{
allLines.push_back(QLineF(oCenPos, sCenPos));
}
}
}
painter->drawLines(allLines);
}