Repository navigation
Expand file tree
/
Copy pathmissionitem.cpp
More file actions
126 lines (110 loc) · 3.33 KB
/
Copy pathmissionitem.cpp
File metadata and controls
126 lines (110 loc) · 3.33 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
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
#include "missionitem.h"
#include "autonomousvehicleproject.h"
#include <QJsonObject>
#include <QJsonArray>
#include "waypoint.h"
#include "trackline.h"
#include "surveypattern.h"
#include "platform.h"
#include "backgroundraster.h"
#include "behavior.h"
MissionItem::MissionItem(QObject *parent) : QObject(parent)
{
MissionItem * parentMissionItem = qobject_cast<MissionItem*>(parent);
if(parentMissionItem)
parentMissionItem->m_childrenMissionItems.append(this);
}
AutonomousVehicleProject* MissionItem::autonomousVehicleProject() const
{
QObject *o = parent();
while(o)
{
AutonomousVehicleProject * avp = qobject_cast<AutonomousVehicleProject*>(o);
if(avp)
return avp;
o = o->parent();
}
return nullptr;
}
void MissionItem::updateProjectedPoints()
{
}
const QList<MissionItem *> & MissionItem::childMissionItems() const
{
return m_childrenMissionItems;
}
QList<QList<QGeoCoordinate> > MissionItem::getLines() const
{
QList<QList<QGeoCoordinate> > ret;
for(auto mi:m_childrenMissionItems)
for(auto line: mi->getLines())
ret.append(line);
return ret;
}
int MissionItem::row() const
{
MissionItem *item = qobject_cast<MissionItem*>(parent());
if(item)
return item->childMissionItems().indexOf(const_cast<MissionItem*>(this));
return 0;
}
void MissionItem::write(QJsonObject& json) const
{
json["label"] = objectName();
}
void MissionItem::read(const QJsonObject& json)
{
setObjectName(json["label"].toString());
}
void MissionItem::readChildren(const QJsonArray& json)
{
auto project = autonomousVehicleProject();
for (int childIndex = 0; childIndex < json.size(); ++childIndex)
{
QJsonObject object = json[childIndex].toObject();
if(object["type"] == "BackgroundRaster")
project->openBackground(object["filename"].toString());
if(object["type"] == "VectorDataset")
project->openGeometry(object["filename"].toString());
MissionItem *item = nullptr;
if(object["type"] == "Waypoint")
item = createMissionItem<Waypoint>("waypoint");
if(object["type"] == "TrackLine")
item = project->createTrackLine();
if(object["type"] == "SurveyPattern")
item = project->createSurveyPattern();
if(object["type"] == "Platform")
item = project->createPlatform();
if(item)
item->read(object);
}
}
QGraphicsItem * MissionItem::findParentGraphicsItem()
{
if(parent() == autonomousVehicleProject())
return autonomousVehicleProject()->getBackgroundRaster();
MissionItem *pmi = qobject_cast<MissionItem*>(parent());
if(pmi)
return pmi->findParentGraphicsItem();
return nullptr;
}
bool MissionItem::canAcceptChildType(const std::string& childType) const
{
return childType == "Behavior";
}
void MissionItem::removeChildMissionItem(MissionItem* cmi)
{
m_childrenMissionItems.removeAll(cmi);
}
void MissionItem::writeBehaviorsToMissionPlanObject(QJsonObject& missionObject) const
{
QJsonObject behaviorsObject;
for(auto mi: m_childrenMissionItems)
{
Behavior *b = qobject_cast<Behavior*>(mi);
if(b)
b->writeToMissionPlanObject(behaviorsObject);
}
if(!behaviorsObject.empty())
missionObject["behaviors"] = behaviorsObject;
}