AirspaceManagement.cc 3.11 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
/****************************************************************************
 *
 *   (c) 2017 QGROUNDCONTROL PROJECT <http://www.qgroundcontrol.org>
 *
 * QGroundControl is licensed according to the terms in the file
 * COPYING.md in the root of the source code directory.
 *
 ****************************************************************************/


#include "AirspaceManagement.h"

QGC_LOGGING_CATEGORY(AirspaceManagementLog, "AirspaceManagementLog")

AirspaceManager::AirspaceManager(QGCApplication* app, QGCToolbox* toolbox)
    : QGCTool(app, toolbox)
{
    _roiUpdateTimer.setInterval(2000);
    _roiUpdateTimer.setSingleShot(true);
    connect(&_roiUpdateTimer, &QTimer::timeout, this, &AirspaceManager::_updateToROI);
21 22 23
    qmlRegisterUncreatableType<AirspaceAuthorization>       ("QGroundControl",              1, 0, "AirspaceAuthorization",      "Reference only");
    qmlRegisterUncreatableType<AirspaceController>          ("QGroundControl.Vehicle",      1, 0, "AirspaceController",         "Reference only");
    qmlRegisterUncreatableType<AirspaceWeatherInfoProvider> ("QGroundControl.Vehicle",      1, 0, "AirspaceWeatherInfoProvider","Reference only");
24 25 26 27 28 29 30
}

AirspaceManager::~AirspaceManager()
{
    if (_restrictionsProvider) {
        delete _restrictionsProvider;
    }
Gus Grubba's avatar
Gus Grubba committed
31 32 33
    if(_rulesetsProvider) {
        delete _rulesetsProvider;
    }
34 35 36 37 38 39 40
    _polygonRestrictions.clearAndDeleteContents();
    _circleRestrictions.clearAndDeleteContents();
}

void AirspaceManager::setToolbox(QGCToolbox* toolbox)
{
    QGCTool::setToolbox(toolbox);
41
    // We should not call virtual methods in the constructor, so we instantiate the restriction provider here
42 43
    _restrictionsProvider = instantiateRestrictionProvider();
    if (_restrictionsProvider) {
44
        connect(_restrictionsProvider, &AirspaceRestrictionProvider::requestDone, this,   &AirspaceManager::_restrictionsUpdated);
45
    }
Gus Grubba's avatar
Gus Grubba committed
46 47
    _rulesetsProvider = instantiateRulesetsProvider();
    if (_rulesetsProvider) {
48
        connect(_rulesetsProvider, &AirspaceRulesetsProvider::requestDone, this,  &AirspaceManager::_rulessetsUpdated);
Gus Grubba's avatar
Gus Grubba committed
49
    }
50
    _weatherProvider = instatiateAirspaceWeatherInfoProvider();
51 52 53 54 55 56 57 58 59 60 61 62 63 64
}

void AirspaceManager::setROI(const QGeoCoordinate& center, double radiusMeters)
{
    _roiCenter = center;
    _roiRadius = radiusMeters;
    _roiUpdateTimer.start();
}

void AirspaceManager::_updateToROI()
{
    if (_restrictionsProvider) {
        _restrictionsProvider->setROI(_roiCenter, _roiRadius);
    }
Gus Grubba's avatar
Gus Grubba committed
65 66 67
    if(_rulesetsProvider) {
        _rulesetsProvider->setROI(_roiCenter);
    }
68 69 70
    if(_weatherProvider) {
        _weatherProvider->setROI(_roiCenter);
    }
71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88
}

void AirspaceManager::_restrictionsUpdated(bool success)
{
    _polygonRestrictions.clearAndDeleteContents();
    _circleRestrictions.clearAndDeleteContents();
    if (success) {
        for (const auto& circle : _restrictionsProvider->circles()) {
            _circleRestrictions.append(circle);
        }
        for (const auto& polygon : _restrictionsProvider->polygons()) {
            _polygonRestrictions.append(polygon);
        }
    } else {
        // TODO: show error?
    }
}

89 90 91 92
void AirspaceManager::_rulessetsUpdated(bool)
{

}