WimaMeasurementArea.cc 5.57 KB
Newer Older
1 2
#include "WimaMeasurementArea.h"

3 4 5 6 7 8
const char *WimaMeasurementArea::settingsGroup = "MeasurementArea";
const char *WimaMeasurementArea::bottomLayerAltitudeName =
    "BottomLayerAltitude";
const char *WimaMeasurementArea::numberOfLayersName = "NumberOfLayers";
const char *WimaMeasurementArea::layerDistanceName = "LayerDistance";
const char *WimaMeasurementArea::WimaMeasurementAreaName = "Measurement Area";
Valentin Platzgummer's avatar
Valentin Platzgummer committed
9 10

WimaMeasurementArea::WimaMeasurementArea(QObject *parent)
11 12 13 14 15 16 17 18 19 20 21 22 23 24
    : WimaArea(parent),
      _metaDataMap(FactMetaData::createMapFromJsonFile(
          QStringLiteral(":/json/WimaMeasurementArea.SettingsGroup.json"),
          this /* QObject parent */)),
      _bottomLayerAltitude(SettingsFact(settingsGroup,
                                        _metaDataMap[bottomLayerAltitudeName],
                                        this /* QObject parent */)),
      _numberOfLayers(SettingsFact(settingsGroup,
                                   _metaDataMap[numberOfLayersName],
                                   this /* QObject parent */)),
      _layerDistance(SettingsFact(settingsGroup,
                                  _metaDataMap[layerDistanceName],
                                  this /* QObject parent */)) {
  init();
Valentin Platzgummer's avatar
Valentin Platzgummer committed
25 26
}

27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
WimaMeasurementArea::WimaMeasurementArea(const WimaMeasurementArea &other,
                                         QObject *parent)
    : WimaArea(other, parent),
      _metaDataMap(FactMetaData::createMapFromJsonFile(
          QStringLiteral(":/json/WimaMeasurementArea.SettingsGroup.json"),
          this /* QObject parent */)),
      _bottomLayerAltitude(SettingsFact(settingsGroup,
                                        _metaDataMap[bottomLayerAltitudeName],
                                        this /* QObject parent */)),
      _numberOfLayers(SettingsFact(settingsGroup,
                                   _metaDataMap[numberOfLayersName],
                                   this /* QObject parent */)),
      _layerDistance(SettingsFact(settingsGroup,
                                  _metaDataMap[layerDistanceName],
                                  this /* QObject parent */)) {
  init();
Valentin Platzgummer's avatar
Valentin Platzgummer committed
43 44
}

45 46 47 48 49
/*!
 * \overload operator=()
 *
 * Calls the inherited operator WimaArea::operator=().
 */
50 51 52 53 54 55 56 57 58 59
WimaMeasurementArea &WimaMeasurementArea::
operator=(const WimaMeasurementArea &other) {
  WimaArea::operator=(other);

  return *this;
}

QString WimaMeasurementArea::mapVisualQML() const {
  return "WimaMeasurementAreaMapVisual.qml";
}
60

61 62
QString WimaMeasurementArea::editorQML() const {
  return "WimaMeasurementAreaEditor.qml";
63 64
}

65 66 67 68 69 70 71 72
Fact *WimaMeasurementArea::tileHeight() { return &_tileHeight; }

void WimaMeasurementArea::saveToJson(QJsonObject &json) {
  this->WimaArea::saveToJson(json);
  json[bottomLayerAltitudeName] = _bottomLayerAltitude.rawValue().toDouble();
  json[numberOfLayersName] = _numberOfLayers.rawValue().toInt();
  json[layerDistanceName] = _layerDistance.rawValue().toDouble();
  json[areaTypeName] = WimaMeasurementAreaName;
Valentin Platzgummer's avatar
Valentin Platzgummer committed
73 74
}

75 76 77 78 79 80 81 82 83
bool WimaMeasurementArea::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());
Valentin Platzgummer's avatar
Valentin Platzgummer committed
84
    } else {
85 86
      errorString.append(tr("Could not load Bottom Layer Altitude!\n"));
      retVal = false;
Valentin Platzgummer's avatar
Valentin Platzgummer committed
87 88
    }

89 90 91 92 93 94 95
    if (json.contains(numberOfLayersName) &&
        json[numberOfLayersName].isDouble()) {
      _numberOfLayers.setRawValue(json[numberOfLayersName].toInt());
    } else {
      errorString.append(tr("Could not load Number of Layers!\n"));
      retVal = false;
    }
96

97 98 99 100 101 102
    if (json.contains(layerDistanceName) &&
        json[layerDistanceName].isDouble()) {
      _layerDistance.setRawValue(json[layerDistanceName].toDouble());
    } else {
      errorString.append(tr("Could not load Layer Distance!\n"));
      retVal = false;
103
    }
104 105 106 107 108

    return retVal;
  } else {
    return false;
  }
109 110
}

111 112 113
void WimaMeasurementArea::setBottomLayerAltitude(double altitude) {
  if (!qFuzzyCompare(_bottomLayerAltitude.rawValue().toDouble(), altitude)) {
    _bottomLayerAltitude.setRawValue(altitude);
Valentin Platzgummer's avatar
Valentin Platzgummer committed
114

115 116
    emit bottomLayerAltitudeChanged();
  }
117 118
}

119 120 121
void WimaMeasurementArea::setNumberOfLayers(double numLayers) {
  if (!qFuzzyCompare(_numberOfLayers.rawValue().toDouble(), numLayers)) {
    _numberOfLayers.setRawValue(numLayers);
Valentin Platzgummer's avatar
Valentin Platzgummer committed
122

123 124
    emit numberOfLayersChanged();
  }
Valentin Platzgummer's avatar
Valentin Platzgummer committed
125 126
}

127 128 129 130 131 132 133 134 135 136 137 138
void WimaMeasurementArea::setLayerDistance(double layerDistance) {
  if (!qFuzzyCompare(_layerDistance.rawValue().toDouble(), layerDistance)) {
    _layerDistance.setRawValue(layerDistance);

    emit layerDistanceChanged();
  }
}

void print(const WimaMeasurementArea &area) {
  QString message;
  print(area, message);
  qWarning() << message;
Valentin Platzgummer's avatar
Valentin Platzgummer committed
139 140
}

141 142 143 144 145 146 147 148
void print(const WimaMeasurementArea &area, QString outputStr) {
  print(static_cast<const WimaArea &>(area), outputStr);
  outputStr.append(QString("Bottom Layer Altitude: %1\n")
                       .arg(area._bottomLayerAltitude.rawValue().toDouble()));
  outputStr.append(QString("Number of Layers: %1\n")
                       .arg(area._numberOfLayers.rawValue().toInt()));
  outputStr.append(QString("Layer Distance: %1\n")
                       .arg(area._layerDistance.rawValue().toDouble()));
Valentin Platzgummer's avatar
Valentin Platzgummer committed
149 150
}

151 152
void WimaMeasurementArea::init() {
  this->setObjectName(WimaMeasurementAreaName);
Valentin Platzgummer's avatar
Valentin Platzgummer committed
153 154
}

155 156
/*!
 * \class WimaMeasurementArea
157 158
 * \brief Class defining the area inside which the actual drone measurements are
 * performed.
159 160 161
 *
 * \sa WimaArea, WimaController, WimaPlaner
 */