From e9d5cff529dec1cd7b2491ce00c1488635985441 Mon Sep 17 00:00:00 2001 From: Kelly Steich Date: Thu, 14 Jul 2016 16:27:20 +0200 Subject: [PATCH] computing camera shots and covered area --- src/MissionEditor/MissionItemStatus.qml | 11 +++-- src/MissionManager/ComplexMissionItem.cc | 53 ++++++++++++++++++++++++ src/MissionManager/ComplexMissionItem.h | 17 ++++++++ 3 files changed, 78 insertions(+), 3 deletions(-) diff --git a/src/MissionEditor/MissionItemStatus.qml b/src/MissionEditor/MissionItemStatus.qml index a2342d3f1..527ac7d58 100644 --- a/src/MissionEditor/MissionItemStatus.qml +++ b/src/MissionEditor/MissionItemStatus.qml @@ -34,25 +34,30 @@ Rectangle { property real _collapsedWidth: valueGrid.width + (margins * 2) property bool _expanded: true + property real _distance: _statusValid ? _currentMissionItem.distance : 0 property real _altDifference: _statusValid ? _currentMissionItem.altDifference : 0 property real _gradient: _statusValid || _currentMissionItem.distance == 0 ? Math.atan(_currentMissionItem.altDifference / _currentMissionItem.distance) : 0 property real _gradientPercent: isNaN(_gradient) ? 0 : _gradient * 100 property real _azimuth: _statusValid ? _currentMissionItem.azimuth : -1 + property int _numberShots: _currentSurvey ? _currentMissionItem.cameraShots : 0 + property real _coveredArea: _currentSurvey ? _currentMissionItem.coveredArea : 0 + property bool _statusValid: currentMissionItem != undefined property bool _vehicleValid: _activeVehicle != undefined property bool _missionValid: missionItems != undefined property bool _currentSurvey: _statusValid ? currentMissionItem.commandName == "Survey" : false + property bool _isVTOL: _vehicleValid ? _activeVehicle.vtol : false + property string _distanceText: _statusValid ? QGroundControl.metersToAppSettingsDistanceUnits(_distance).toFixed(2) + " " + QGroundControl.appSettingsDistanceUnitsString : " " property string _altText: _statusValid ? QGroundControl.metersToAppSettingsDistanceUnits(_altDifference).toFixed(2) + " " + QGroundControl.appSettingsDistanceUnitsString : " " property string _gradientText: _statusValid ? _gradientPercent.toFixed(0) + "%" : " " property string _azimuthText: _statusValid ? Math.round(_azimuth) : " " - property string _numberShotsText: _currentSurvey ? "783" : " " - property string _coveredAreaText: _currentSurvey ? "87ha / 217acr" : " " + property string _numberShotsText: _currentSurvey ? _numberShots.toFixed(0) : " " + property string _coveredAreaText: _currentSurvey ? QGroundControl.squareMetersToAppSettingsAreaUnits(_coveredArea).toFixed(2) + " " + QGroundControl.appSettingsAreaUnitsString : " " property string _totalDistanceText: _missionValid ? "30.91" + " " + QGroundControl.appSettingsDistanceUnitsString : " " property string _totalTimeText: _missionValid ? "34min 23s" : " " property string _maxTelemDistText: _missionValid ? "5.23" + " " + QGroundControl.appSettingsDistanceUnitsString : " " - property bool _isVTOL: _vehicleValid ? _activeVehicle.vtol : false property string _hoverDistanceText: _missionValid ? "0.47" + " " + QGroundControl.appSettingsDistanceUnitsString : " " property string _cruiseDistanceText: _missionValid ? "30.44" + " " + QGroundControl.appSettingsDistanceUnitsString : " " property string _hoverTimeText: _missionValid ? "4min 02s" : " " diff --git a/src/MissionManager/ComplexMissionItem.cc b/src/MissionManager/ComplexMissionItem.cc index 687c6a485..e520490b0 100644 --- a/src/MissionManager/ComplexMissionItem.cc +++ b/src/MissionManager/ComplexMissionItem.cc @@ -36,6 +36,8 @@ ComplexMissionItem::ComplexMissionItem(Vehicle* vehicle, QObject* parent) , _dirty(false) , _cameraTrigger(false) , _gridAltitudeRelative(true) + , _cameraShots(0) + , _coveredArea(0.0) , _gridAltitudeFact (0, "Altitude:", FactMetaData::valueTypeDouble) , _gridAngleFact (0, "Grid angle:", FactMetaData::valueTypeDouble) , _gridSpacingFact (0, "Grid spacing:", FactMetaData::valueTypeDouble) @@ -47,10 +49,44 @@ ComplexMissionItem::ComplexMissionItem(Vehicle* vehicle, QObject* parent) connect(&_gridSpacingFact, &Fact::valueChanged, this, &ComplexMissionItem::_generateGrid); connect(&_gridAngleFact, &Fact::valueChanged, this, &ComplexMissionItem::_generateGrid); + connect(&_cameraTriggerDistanceFact, &Fact::valueChanged, this, &ComplexMissionItem::_generateGrid); connect(this, &ComplexMissionItem::cameraTriggerChanged, this, &ComplexMissionItem::_cameraTriggerChanged); } +const ComplexMissionItem& ComplexMissionItem::operator=(const ComplexMissionItem& other) +{ + _vehicle = other._vehicle; + + setIsCurrentItem(other._isCurrentItem); + setDirty(other._dirty); + setAltDifference(other._altDifference); + setAltPercent(other._altPercent); + setAzimuth(other._azimuth); + setDistance(other._distance); + setCameraShots(other._cameraShots); + setCoveredArea(other._coveredArea); + + return *this; +} + +void ComplexMissionItem::setCameraShots(int cameraShots) +{ + if (_cameraShots != cameraShots) { + _cameraShots = cameraShots; + emit cameraShotsChanged(_cameraShots); + } +} + +void ComplexMissionItem::setCoveredArea(double coveredArea) +{ + if (!qFuzzyCompare(_coveredArea, coveredArea)) { + _coveredArea = coveredArea; + emit coveredAreaChanged(_coveredArea); + } +} + + void ComplexMissionItem::clearPolygon(void) { // Bug workaround, see below @@ -280,17 +316,34 @@ void ComplexMissionItem::_generateGrid(void) qCDebug(ComplexMissionItemLog) << _polygonPath[i].value() << polygonPoints.last().x() << polygonPoints.last().y(); } + double coveredArea = 0.0; + for (int i=0; i