WimaGOperationArea.cc 6.99 KB
Newer Older
1 2
#include "WimaGOperationArea.h"

3

4
const char* WimaGOperationArea::settingsGroup =                   "OperationArea";
5 6 7
const char* WimaGOperationArea::bottomLayerAltitudeName =         "BottomLayerAltitude";
const char* WimaGOperationArea::numberOfLayersName =              "NumberOfLayers";
const char* WimaGOperationArea::layerDistanceName =               "LayerDistance";
8
const char* WimaGOperationArea::borderPolygonOffsetName =         "BorderPolygonOffset";
9
const char* WimaGOperationArea::wimaGOperationAreaName =          "Operation Area";
10

Valentin Platzgummer's avatar
Valentin Platzgummer committed
11 12
WimaGOperationArea::WimaGOperationArea()
    : WimaGOperationArea(nullptr)
13 14 15 16
{

}

Valentin Platzgummer's avatar
Valentin Platzgummer committed
17 18
WimaGOperationArea::WimaGOperationArea(QObject *parent)
  : WimaArea (parent)
19 20 21 22
  , _metaDataMap            (FactMetaData::createMapFromJsonFile(QStringLiteral(":/json/WimaGOperationArea.SettingsGroup.json"), this /* QObject parent */))
  , _bottomLayerAltitude    (settingsGroup, _metaDataMap[bottomLayerAltitudeName])
  , _numberOfLayers         (settingsGroup, _metaDataMap[numberOfLayersName])
  , _layerDistance          (settingsGroup, _metaDataMap[layerDistanceName])
23 24
  , _borderPolygonOffset    (settingsGroup, _metaDataMap[borderPolygonOffsetName])
  , _borderPolygon          (new QGCMapPolygon(this))
25
{
26
    this->setObjectName(wimaGOperationAreaName);
27 28
    connect(this, &WimaGOperationArea::pathChanged, this, &WimaGOperationArea::recalcBorderPolygon);
    connect(&_borderPolygonOffset, &SettingsFact::rawValueChanged, this, &WimaGOperationArea::recalcBorderPolygon);
29 30
}

Valentin Platzgummer's avatar
Valentin Platzgummer committed
31 32 33 34 35 36 37 38 39 40 41 42 43 44
WimaGOperationArea::WimaGOperationArea(const WimaArea &other, QObject *parent)
  : WimaArea(other, parent)
  , _metaDataMap            (FactMetaData::createMapFromJsonFile(QStringLiteral(":/json/WimaGOperationArea.SettingsGroup.json"), this /* QObject parent */))
  , _bottomLayerAltitude    (settingsGroup, _metaDataMap[bottomLayerAltitudeName])
  , _numberOfLayers         (settingsGroup, _metaDataMap[numberOfLayersName])
  , _layerDistance          (settingsGroup, _metaDataMap[layerDistanceName])
  , _borderPolygonOffset    (settingsGroup, _metaDataMap[borderPolygonOffsetName])
  , _borderPolygon          (new QGCMapPolygon(this))
{
    this->setObjectName(wimaGOperationAreaName);
    connect(this, &WimaGOperationArea::pathChanged, this, &WimaGOperationArea::recalcBorderPolygon);
    connect(&_borderPolygonOffset, &SettingsFact::rawValueChanged, this, &WimaGOperationArea::recalcBorderPolygon);
 }

45
void WimaGOperationArea::addVehicle(WimaVehicle *vehicle)
46
{
47 48 49 50 51
    if(vehicle != nullptr){
        _wimaVehicle = vehicle;
        emit vehicleChanged();
    }
}
52

53 54 55 56 57 58
void WimaGOperationArea::removeVehicle(int vehicleIndex)
{
    if(vehicleIndex >= 0){
        _wimaVehicle = nullptr;
        emit vehicleChanged();
    }
59
}
60

61 62 63 64 65 66 67 68 69 70 71 72 73 74 75
void WimaGOperationArea::setVehicleCorridor(WimaVCorridor *corridor)
{
    if(corridor != nullptr){
        if (corridor != _vehicleCorridor){
            _vehicleCorridor = corridor;
            emit vehicleCorridorChanged(_vehicleCorridor);
        }
        else {
            qWarning("WimaGOperationArea::setVehicleCorridor(): new corridor equals old _vehicleCorridor!");
        }
    }else{
        qWarning("WimaGOperationArea::setVehicleCorridor(): corridor == nullptr!");
    }
}

76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93
void WimaGOperationArea::saveToJson(QJsonObject &json)
{
    this->WimaArea::saveToJson(json);
    json[bottomLayerAltitudeName]   = _bottomLayerAltitude.rawValue().toDouble();
    json[numberOfLayersName]        = _numberOfLayers.rawValue().toInt();
    json[layerDistanceName]         = _layerDistance.rawValue().toDouble();
    json[borderPolygonOffsetName]   = _borderPolygonOffset.rawValue().toDouble();
    json[areaTypeName]              = wimaGOperationAreaName;
}

bool WimaGOperationArea::loadFromJson(const QJsonObject &json, QString& errorString)
{
    if (this->WimaArea::loadFromJson(json, errorString)) {
        bool retVal = true;

        if ( json.contains(bottomLayerAltitudeName) && json[bottomLayerAltitudeName].isDouble() ) {
            _bottomLayerAltitude.setRawValue(json[bottomLayerAltitudeName].toDouble());
        } else {
94
            errorString.append(tr("Could not load Bottom Layer Altitude!\n"));
95 96 97 98 99 100
            retVal = false;
        }

        if ( json.contains(numberOfLayersName) && json[numberOfLayersName].isDouble() ) {
            _numberOfLayers.setRawValue(json[numberOfLayersName].toInt());
        } else {
101
            errorString.append(tr("Could not load Number of Layers!\n"));
102 103 104 105 106 107
            retVal = false;
        }

        if ( json.contains(layerDistanceName) && json[layerDistanceName].isDouble() ) {
            _layerDistance.setRawValue(json[layerDistanceName].toDouble());
        } else {
108
            errorString.append(tr("Could not load Layer Distance!\n"));
109 110 111 112 113 114
            retVal = false;
        }

        if ( json.contains(borderPolygonOffsetName) && json[borderPolygonOffsetName].isDouble() ) {
            _borderPolygonOffset.setRawValue(json[borderPolygonOffsetName].toDouble());
        } else {
115
            errorString.append(tr("Could not load Border Polygon Offset!\n"));
116 117 118 119 120 121 122 123 124
            retVal = false;
        }

        return retVal;
    } else {
        return false;
    }
}

125 126 127
void WimaGOperationArea::recalcBorderPolygon()
{
    //qWarning("WimaGOperationArea::recalcBorderPolygon() %f", _borderPolygonOffset.rawValue().toDouble());
Valentin Platzgummer's avatar
Valentin Platzgummer committed
128
    QGCMapPolygon polyCopy = this->toQGCPolygon(*this);
129 130 131
    polyCopy.offset(_borderPolygonOffset.rawValue().toDouble());
    _borderPolygon.setPath(polyCopy.path());
    polyCopy.deleteLater();
132 133 134 135

    emit borderPolygonChanged();
}

136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198
/*void WimaGOperationArea::recalculatesubPolygons()
{
    int vehicleCount = _vehicleList->count();
    QScopedPointer<QList<QGCMapPolygon*>> listQGCPoly(this->splitPolygonArea(vehicleCount));

    int polyCount = listQGCPoly->size();
    _vehiclePolygons->clear();
    for(int i = 0; i < polyCount; i++){
        WimaVehicleMeasurementPolygon* subPoly = new WimaVehicleMeasurementPolygon(listQGCPoly->takeAt(i), this);
        _vehiclePolygons->append(subPoly);
    }
}

void WimaGOperationArea::removeAllVehicles()
{
    int count = _vehicleList->count();

    if(count > 0){
        do{
            _vehicleList->removeAt(0);
            count--;
        }while(count > 0);

        emit vehicleListChanged();
    }

}


void WimaGOperationArea::addVehiclePolygon()
{
    _vehiclePolygons->append(new WimaVehicleMeasurementPolygon(this));

    emit vehiclePolygonsChanged();
}

void WimaGOperationArea::removeVehiclePolygon(int polygonIndex)
{
    if(polygonIndex >= 0 && polygonIndex < _vehiclePolygons->count()){
        _vehiclePolygons->removeAt(polygonIndex);

        emit vehiclePolygonsChanged();
    }else {
        qWarning("Index out of bounds!");
    }
}

void WimaGOperationArea::removeVehiclePolygon(WimaVehicleMeasurementPolygon *wimaPolygon)
{
    if(wimaPolygon != nullptr){
        QObject* removedPolygon = _vehiclePolygons->removeOne(wimaPolygon);
        if(removedPolygon){
            emit vehiclePolygonsChanged();
        }else {
            qWarning("Polygon not inside polygon list.");
        }
    }else {
        qWarning("Not a valid Polygon.");
    }
}*/