QGroundControl
Ground Control Station for MAVLink Drones
Loading...
Searching...
No Matches
Viewer3DManager.cc
Go to the documentation of this file.
1#include "Viewer3DManager.h"
2
4#include "OsmParser.h"
6#include "Fact.h"
7#include "SettingsManager.h"
8#include "Vehicle.h"
10#include "Viewer3DSettings.h"
11
12#include <QtCore/QVariant>
13
14QGC_LOGGING_CATEGORY(Viewer3DManagerLog, "Viewer3d.Viewer3DManager")
15
17 : QObject(parent)
18 , _mapProvider(new OsmParser(this))
19{
20 _onActiveVehicleChanged(MultiVehicleManager::instance()->activeVehicle());
21
22 connect(_mapProvider, &Viewer3DMapProvider::gpsRefChanged, this, &Viewer3DManager::_onGpsRefChanged);
23 connect(MultiVehicleManager::instance(), &MultiVehicleManager::activeVehicleChanged, this, &Viewer3DManager::_onActiveVehicleChanged);
24 connect(SettingsManager::instance()->viewer3DSettings()->enabled(), &Fact::rawValueChanged, this, &Viewer3DManager::_onEnabledChanged);
25}
26
28{
29 if (_displayMode == mode) {
30 return;
31 }
32
33 if (mode == DisplayMode::View3D) {
34 if (!SettingsManager::instance()->viewer3DSettings()->enabled()->rawValue().toBool()) {
35 return;
36 }
37 }
38
39 _displayMode = mode;
40 qCDebug(Viewer3DManagerLog) << "Display mode changed to" << (mode == DisplayMode::View3D ? "View3D" : "Map");
41 emit displayModeChanged();
42}
43
44void Viewer3DManager::_onActiveVehicleChanged(Vehicle *vehicle)
45{
46 if (_activeVehicle) {
47 disconnect(_activeVehicle, &Vehicle::coordinateChanged, this, &Viewer3DManager::_onActiveVehicleCoordinateChanged);
48 }
49
50 _activeVehicle = vehicle;
51 if (!_activeVehicle) {
52 if (_gpsRefSource == GpsRefSource::Vehicle) {
53 _gpsRefSource = GpsRefSource::None;
54 _gpsRef = QGeoCoordinate();
55 emit gpsRefChanged();
56 }
57 } else {
58 _onActiveVehicleCoordinateChanged(_activeVehicle->coordinate());
59 connect(_activeVehicle, &Vehicle::coordinateChanged, this, &Viewer3DManager::_onActiveVehicleCoordinateChanged);
60 }
61}
62
63void Viewer3DManager::_onActiveVehicleCoordinateChanged(const QGeoCoordinate &newCoordinate)
64{
65 if (_gpsRefSource == GpsRefSource::None) {
66 if (newCoordinate.isValid()) {
67 _gpsRef = newCoordinate;
68 _gpsRef.setAltitude(0);
69 _gpsRefSource = GpsRefSource::Vehicle;
70 emit gpsRefChanged();
71
72 qCDebug(Viewer3DManagerLog) << "GPS ref set by vehicle:" << _gpsRef.latitude() << _gpsRef.longitude() << _gpsRef.altitude();
73 }
74 }
75}
76
77void Viewer3DManager::_onGpsRefChanged(const QGeoCoordinate &newGpsRef, bool isRefSet)
78{
79 if (isRefSet) {
80 _gpsRef = newGpsRef;
81 _gpsRefSource = GpsRefSource::Map;
82 emit gpsRefChanged();
83 qCDebug(Viewer3DManagerLog) << "GPS ref set by map provider:" << _gpsRef.latitude() << _gpsRef.longitude() << _gpsRef.altitude();
84 } else {
85 if (_gpsRefSource != GpsRefSource::Map) {
86 return;
87 }
88
89 _gpsRefSource = GpsRefSource::None;
90 if (_activeVehicle && _activeVehicle->coordinate().isValid()) {
91 _gpsRef = _activeVehicle->coordinate();
92 _gpsRef.setAltitude(0);
93 _gpsRefSource = GpsRefSource::Vehicle;
94 } else {
95 _gpsRef = QGeoCoordinate();
96 }
97 emit gpsRefChanged();
98 }
99}
100
101void Viewer3DManager::_onEnabledChanged(const QVariant &value)
102{
103 if (!value.toBool()) {
105 }
106}
#define QGC_LOGGING_CATEGORY(name, categoryStr)
void rawValueChanged(const QVariant &value)
static MultiVehicleManager * instance()
void activeVehicleChanged(Vehicle *activeVehicle)
static SettingsManager * instance()
void coordinateChanged(QGeoCoordinate coordinate)
QGeoCoordinate coordinate()
Definition Vehicle.h:409
void gpsRefChanged()
void displayModeChanged()
Q_INVOKABLE void setDisplayMode(DisplayMode mode)
void gpsRefChanged(QGeoCoordinate newGpsRef, bool isRefSet)