-
Notifications
You must be signed in to change notification settings - Fork 18
Expand file tree
/
Copy pathmaptrailitem.cpp
More file actions
73 lines (65 loc) · 1.65 KB
/
maptrailitem.cpp
File metadata and controls
73 lines (65 loc) · 1.65 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
#include "maptrailitem.h"
#include "graphicsmap.h"
#include "mapobjectitem.h"
QSet<MapTrailItem*> MapTrailItem::m_items;
MapTrailItem::MapTrailItem() :
m_attachObj(nullptr)
{
auto pen = this->pen();
pen.setWidth(5);
pen.setCosmetic(true); // it will be always 2 pixmap whatever scale transform
pen.setCapStyle(Qt::RoundCap);
pen.setJoinStyle(Qt::RoundJoin);
pen.setColor({255, 255, 0, 200});
this->setPen(pen);
//
m_items.insert(this);
}
MapTrailItem::~MapTrailItem()
{
m_items.remove(this);
}
void MapTrailItem::addCoordinate(const QGeoCoordinate &coord)
{
auto path = this->path();
if(!m_coord.isValid()) {
auto point = GraphicsMap::toScene(coord);
path.moveTo(point);
m_coord = coord;
setPath(path);
return;
}
//
if(m_coord.distanceTo(coord) < 50)
return;
//
m_coord = coord;
auto point = GraphicsMap::toScene(coord);
path.lineTo(point);
setPath(path);
}
void MapTrailItem::clear()
{
setPath(QPainterPath());
m_coord = QGeoCoordinate();
}
void MapTrailItem::attach(MapObjectItem *obj)
{
if(m_attachObj)
disconnect(m_attachObj, &MapObjectItem::coordinateChanged, this, &MapTrailItem::addCoordinate);
//
clear();
m_attachObj = obj;
if(m_attachObj)
connect(m_attachObj, &MapObjectItem::coordinateChanged, this, &MapTrailItem::addCoordinate);
}
void MapTrailItem::detach()
{
if(m_attachObj)
disconnect(m_attachObj, &MapObjectItem::coordinateChanged, this, &MapTrailItem::addCoordinate);
m_attachObj = nullptr;
}
const QSet<MapTrailItem *> &MapTrailItem::items()
{
return m_items;
}