#include "WimaMeasurementArea.h" 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"; WimaMeasurementArea::WimaMeasurementArea(QObject *parent) : 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(); } 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(); } /*! * \overload operator=() * * Calls the inherited operator WimaArea::operator=(). */ WimaMeasurementArea &WimaMeasurementArea:: operator=(const WimaMeasurementArea &other) { WimaArea::operator=(other); return *this; } QString WimaMeasurementArea::mapVisualQML() const { return "WimaMeasurementAreaMapVisual.qml"; } QString WimaMeasurementArea::editorQML() const { return "WimaMeasurementAreaEditor.qml"; } 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; } 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()); } else { errorString.append(tr("Could not load Bottom Layer Altitude!\n")); retVal = false; } 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; } if (json.contains(layerDistanceName) && json[layerDistanceName].isDouble()) { _layerDistance.setRawValue(json[layerDistanceName].toDouble()); } else { errorString.append(tr("Could not load Layer Distance!\n")); retVal = false; } return retVal; } else { return false; } } void WimaMeasurementArea::setBottomLayerAltitude(double altitude) { if (!qFuzzyCompare(_bottomLayerAltitude.rawValue().toDouble(), altitude)) { _bottomLayerAltitude.setRawValue(altitude); emit bottomLayerAltitudeChanged(); } } void WimaMeasurementArea::setNumberOfLayers(double numLayers) { if (!qFuzzyCompare(_numberOfLayers.rawValue().toDouble(), numLayers)) { _numberOfLayers.setRawValue(numLayers); emit numberOfLayersChanged(); } } 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; } void print(const WimaMeasurementArea &area, QString outputStr) { print(static_cast(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())); } void WimaMeasurementArea::init() { this->setObjectName(WimaMeasurementAreaName); } /*! * \class WimaMeasurementArea * \brief Class defining the area inside which the actual drone measurements are * performed. * * \sa WimaArea, WimaController, WimaPlaner */