-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathroadcontainer.cpp
69 lines (52 loc) · 1.77 KB
/
roadcontainer.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
#include "roadcontainer.h"
RoadContainer::RoadContainer() :
allRoads(new QVector<Road*>)
{
}
void RoadContainer::Clear()
{
for (auto road : *allRoads)
{
emit RemoveRoad(road);
}
allRoads->clear();
}
void RoadContainer::AddRoad(const QPointF &start, const QPointF &end, RoadBrush brushOnStart, RoadBrush brushOnEnd)
{
Road* newRoad = new Road(RoadPoint(start, brushOnStart.GetLevel()), RoadPoint(end, brushOnEnd.GetLevel()), brushOnStart.GetType(), brushOnStart.GetNumberOfLines());
for (auto road : *allRoads)
{
if (isEqual(road->GetStart().pos, start, SENSITIVITY) && road->GetStart().level == brushOnStart.GetLevel())
{
newRoad->connectStartToStartOf(road);
}
if (isEqual(road->GetStart().pos, end, SENSITIVITY) && road->GetStart().level == brushOnEnd.GetLevel())
{
newRoad->connectEndToStartOf(road);
}
if (isEqual(road->GetEnd().pos, start, SENSITIVITY) && road->GetEnd().level == brushOnStart.GetLevel())
{
newRoad->connectStartToEndOf(road);
}
if (isEqual(road->GetEnd().pos, end, SENSITIVITY) && road->GetEnd().level == brushOnEnd.GetLevel())
{
newRoad->connectEndToEndOf(road);
}
}
allRoads->push_back(newRoad);
emit NewRoad(newRoad);
}
QVector<RoadEdge> *RoadContainer::GetGraph() const
{
QVector<RoadEdge>* answer = new QVector<RoadEdge>;
for (size_t partIter = 0;partIter<allRoads->count();++partIter)
{
QVector<RoadEdge>* edges = allRoads->at(partIter)->GetEdgesForGraph();
for (size_t edgeIter = 0;edgeIter<edges->count();++edgeIter)
{
answer->push_back(edges->at(edgeIter));
}
delete edges;
}
return answer;
}