diff --git a/src/FactSystem/FactControls/AltitudeFactTextField.qml b/src/FactSystem/FactControls/AltitudeFactTextField.qml index 2775af2e8a0635fa037bffecbb25e51f4bfa4409..5a22eca3ab45a66ff3f51860f25eab8c9ce2835c 100644 --- a/src/FactSystem/FactControls/AltitudeFactTextField.qml +++ b/src/FactSystem/FactControls/AltitudeFactTextField.qml @@ -16,12 +16,13 @@ import QGroundControl.Controls 1.0 import QGroundControl.ScreenTools 1.0 FactTextField { - unitsLabel: fact ? fact.units : "" - extraUnitsLabel: fact ? _altitudeModeExtraUnits : "" - showUnits: true - showHelp: true + unitsLabel: fact ? fact.units : "" + extraUnitsLabel: fact ? _altitudeModeExtraUnits : "" + showUnits: true + showHelp: true - property int altitudeMode: QGroundControl.AltitudeModeNone + property int altitudeMode: QGroundControl.AltitudeModeNone + property bool showAboveTerrainWarning: true readonly property string _altModeNoneExtraUnits: "" readonly property string _altModeRelativeExtraUnits: qsTr("(Rel)") @@ -44,7 +45,7 @@ FactTextField { _altitudeModeExtraUnits = _altModeAbsoluteExtraUnits } else if (altitudeMode === QGroundControl.AltitudeModeAboveTerrain) { _altitudeModeExtraUnits = _altModeAboveTerrainExtraUnits - if (!_aboveTerrainWarning.rawValue) { + if (!_aboveTerrainWarning.rawValue && showAboveTerrainWarning) { mainWindow.showComponentDialog(aboveTerrainWarning, qsTr("Warning"), mainWindow.showDialogDefaultWidth, StandardButton.Ok) } } else if (missionItem.altitudeMode === QGroundControl.AltitudeModeTerrainFrame) { diff --git a/src/MissionManager/CameraCalc.cc b/src/MissionManager/CameraCalc.cc index 06c8edca3d4532810f2c100a955dbebdf6ed1324..39a9719d97e909947990c56cf199207a43147201 100644 --- a/src/MissionManager/CameraCalc.cc +++ b/src/MissionManager/CameraCalc.cc @@ -29,7 +29,7 @@ const char* CameraCalc::_jsonCameraSpecTypeKey = "CameraSpecType"; CameraCalc::CameraCalc(PlanMasterController* masterController, const QString& settingsGroup, QObject* parent) : CameraSpec (settingsGroup, parent) - , _dirty (masterController) + , _dirty (false) , _disableRecalc (false) , _distanceToSurfaceRelative (true) , _metaDataMap (FactMetaData::createMapFromJsonFile(QStringLiteral(":/json/CameraCalc.FactMetaData.json"), this)) diff --git a/src/MissionManager/CameraCalc.h b/src/MissionManager/CameraCalc.h index 22cf4d7975c1a6a94e6fa9bd3527d966e6fd1b9b..054160cf7bb44370dff56d46dbe567bc42489289 100644 --- a/src/MissionManager/CameraCalc.h +++ b/src/MissionManager/CameraCalc.h @@ -33,6 +33,13 @@ public: Q_PROPERTY(Fact* sideOverlap READ sideOverlap CONSTANT) Q_PROPERTY(Fact* adjustedFootprintSide READ adjustedFootprintSide CONSTANT) ///< Side footprint adjusted down for overlap Q_PROPERTY(Fact* adjustedFootprintFrontal READ adjustedFootprintFrontal CONSTANT) ///< Frontal footprint adjusted down for overlap + + // When we are creating a manual grid we still use CameraCalc to store the manual grid information. It's a bastardization of what + // CameraCalc is meant for but it greatly simplifies code and persistance of manual grids. + // grid altitude - distanceToSurface + // grid altitude mode - distanceToSurfaceRelative + // trigger distance - adjustedFootprintFrontal + // transect spacing - adjustedFootprintSide Q_PROPERTY(bool distanceToSurfaceRelative READ distanceToSurfaceRelative WRITE setDistanceToSurfaceRelative NOTIFY distanceToSurfaceRelativeChanged) // The following values are calculated from the camera properties diff --git a/src/MissionManager/MissionSettingsItem.cc b/src/MissionManager/MissionSettingsItem.cc index 4302a21ea6e5aaad1450987ef716c7b23b55587e..7712faa181ab9e1656d2d18f4b148d9f2dabb217 100644 --- a/src/MissionManager/MissionSettingsItem.cc +++ b/src/MissionManager/MissionSettingsItem.cc @@ -190,7 +190,9 @@ void MissionSettingsItem::_setCoordinateWorker(const QGeoCoordinate& coordinate) _plannedHomePositionCoordinate = coordinate; emit coordinateChanged(coordinate); emit exitCoordinateChanged(coordinate); - _plannedHomePositionAltitudeFact.setRawValue(coordinate.altitude()); + if (_plannedHomePositionFromVehicle) { + _plannedHomePositionAltitudeFact.setRawValue(coordinate.altitude()); + } } } diff --git a/src/MissionManager/TransectStyle.SettingsGroup.json b/src/MissionManager/TransectStyle.SettingsGroup.json index fe86299eab363ec46080c5fdf63628ec168b68e8..d6511689402bb02c05172736007971f59c3f5903 100644 --- a/src/MissionManager/TransectStyle.SettingsGroup.json +++ b/src/MissionManager/TransectStyle.SettingsGroup.json @@ -37,7 +37,7 @@ }, { "name": "TerrainAdjustTolerance", - "shortDescription": "If adjacent terrain waypoints are within this tolerence they will be removed.", + "shortDescription": "Additional waypoints within the transect will be added if the terrain altitude difference grows larger than this tolerance.", "type": "double", "decimalPlaces": 2, "min": 0, diff --git a/src/MissionManager/TransectStyleComplexItem.cc b/src/MissionManager/TransectStyleComplexItem.cc index 948a196bd91a9b899186e54332fe62accb6da2cd..489e9a2123e7a048b6d0008edf849ebcae9b975f 100644 --- a/src/MissionManager/TransectStyleComplexItem.cc +++ b/src/MissionManager/TransectStyleComplexItem.cc @@ -538,6 +538,18 @@ void TransectStyleComplexItem::_adjustTransectsForTerrain(void) } emit lastSequenceNumberChanged(lastSequenceNumber()); + + // Update entry/exit coordinates + if (_transects.count()) { + if (_transects.first().count()) { + _coordinate.setAltitude(_transects.first().first().coord.altitude()); + emit coordinateChanged(coordinate()); + } + if (_transects.last().count()) { + _exitCoordinate.setAltitude(_transects.last().last().coord.altitude()); + emit exitCoordinateChanged(exitCoordinate()); + } + } } } @@ -653,32 +665,25 @@ void TransectStyleComplexItem::_adjustForTolerance(QList& transect) { QList adjustedPoints; - double tolerance = _terrainAdjustToleranceFact.rawValue().toDouble(); - - int coordIndex = 0; - while (coordIndex < transect.count()) { - const CoordInfo_t& fromCoordInfo = transect[coordIndex]; + if (transect.count()) { + double tolerance = _terrainAdjustToleranceFact.rawValue().toDouble(); + CoordInfo_t& lastCoordInfo = transect.first(); - adjustedPoints.append(fromCoordInfo); + adjustedPoints.append(lastCoordInfo); - // Walk forward until we fall out of tolerence or find a fixed point - while (++coordIndex < transect.count()) { - const CoordInfo_t& toCoordInfo = transect[coordIndex]; - if (toCoordInfo.coordType != CoordTypeInteriorTerrainAdded || qAbs(fromCoordInfo.coord.altitude() - toCoordInfo.coord.altitude()) > tolerance) { - adjustedPoints.append(toCoordInfo); - coordIndex++; - break; + int coordIndex = 1; + while (coordIndex < transect.count()) { + // Walk forward until we fall out of tolerence. When we fall out of tolerance add that point. + // We always add non-interstitial points no matter what. + const CoordInfo_t& nextCoordInfo = transect[coordIndex]; + if (nextCoordInfo.coordType != CoordTypeInteriorTerrainAdded || qAbs(lastCoordInfo.coord.altitude() - nextCoordInfo.coord.altitude()) > tolerance) { + adjustedPoints.append(nextCoordInfo); + lastCoordInfo = nextCoordInfo; } + coordIndex++; } } -#if 0 - qDebug() << "_adjustForTolerance"; - for (const TransectStyleComplexItem::CoordInfo_t& coordInfo: adjustedPoints) { - qDebug() << coordInfo.coordType; - } -#endif - transect = adjustedPoints; } @@ -686,7 +691,7 @@ void TransectStyleComplexItem::_addInterstitialTerrainPoints(QList& { QList adjustedTransect; - double requestedAltitude = _cameraCalc.distanceToSurface()->rawValue().toDouble(); + double distanceToSurface = _cameraCalc.distanceToSurface()->rawValue().toDouble(); for (int i=0; i& const TerrainPathQuery::PathHeightInfo_t& pathHeightInfo = transectPathHeightInfo[i]; - fromCoordInfo.coord.setAltitude(pathHeightInfo.heights.first() + requestedAltitude); - toCoordInfo.coord.setAltitude(pathHeightInfo.heights.last() + requestedAltitude); + fromCoordInfo.coord.setAltitude(pathHeightInfo.heights.first() + distanceToSurface); + toCoordInfo.coord.setAltitude(pathHeightInfo.heights.last() + distanceToSurface); if (i == 0) { adjustedTransect.append(fromCoordInfo); @@ -712,7 +717,7 @@ void TransectStyleComplexItem::_addInterstitialTerrainPoints(QList& CoordInfo_t interstitialCoordInfo; interstitialCoordInfo.coordType = CoordTypeInteriorTerrainAdded; interstitialCoordInfo.coord = fromCoordInfo.coord.atDistanceAndAzimuth(distance * percentTowardsTo, azimuth); - interstitialCoordInfo.coord.setAltitude(interstitialTerrainHeight + requestedAltitude); + interstitialCoordInfo.coord.setAltitude(interstitialTerrainHeight + distanceToSurface); adjustedTransect.append(interstitialCoordInfo); } @@ -722,7 +727,7 @@ void TransectStyleComplexItem::_addInterstitialTerrainPoints(QList& CoordInfo_t lastCoordInfo = transect.last(); const TerrainPathQuery::PathHeightInfo_t& pathHeightInfo = transectPathHeightInfo.last(); - lastCoordInfo.coord.setAltitude(pathHeightInfo.heights.last() + requestedAltitude); + lastCoordInfo.coord.setAltitude(pathHeightInfo.heights.last() + distanceToSurface); adjustedTransect.append(lastCoordInfo); #if 0 diff --git a/src/PlanView/CameraCalcCamera.qml b/src/PlanView/CameraCalcCamera.qml index 089b003041c706529c4a110072bd2c234a29cf71..4f74ade24352a1b05c4a2ed1aed88d4c09dd2997 100644 --- a/src/PlanView/CameraCalcCamera.qml +++ b/src/PlanView/CameraCalcCamera.qml @@ -15,11 +15,6 @@ Column { spacing: _margin property var cameraCalc - property bool vehicleFlightIsFrontal: true - property string distanceToSurfaceLabel - property int distanceToSurfaceAltitudeMode: QGroundControl.AltitudeModeNone - property string frontalDistanceLabel - property string sideDistanceLabel property real _margin: ScreenTools.defaultFontPixelWidth / 2 property string _cameraName: cameraCalc.cameraName.value diff --git a/src/PlanView/CameraCalcGrid.qml b/src/PlanView/CameraCalcGrid.qml index 04250e33ab5446f048c95a2fa54e01f434e57b28..f651208b18d2f9dffb3c483f5998500e217a847f 100644 --- a/src/PlanView/CameraCalcGrid.qml +++ b/src/PlanView/CameraCalcGrid.qml @@ -87,21 +87,24 @@ Column { QGCRadioButton { id: fixedDistanceRadio + leftPadding: 0 text: distanceToSurfaceLabel checked: !!cameraCalc.valueSetIsDistance.value onClicked: cameraCalc.valueSetIsDistance.value = 1 } AltitudeFactTextField { - fact: cameraCalc.distanceToSurface - altitudeMode: distanceToSurfaceAltitudeMode - enabled: fixedDistanceRadio.checked - Layout.fillWidth: true + fact: cameraCalc.distanceToSurface + altitudeMode: distanceToSurfaceAltitudeMode + showAboveTerrainWarning: false + enabled: fixedDistanceRadio.checked + Layout.fillWidth: true } QGCRadioButton { id: fixedImageDensityRadio - text: qsTr("Ground Res") + leftPadding: 0 + text: qsTr("Grnd Res") checked: !cameraCalc.valueSetIsDistance.value onClicked: cameraCalc.valueSetIsDistance.value = 0 } @@ -125,9 +128,10 @@ Column { QGCLabel { text: distanceToSurfaceLabel } AltitudeFactTextField { - fact: cameraCalc.distanceToSurface - altitudeMode: distanceToSurfaceAltitudeMode - Layout.fillWidth: true + fact: cameraCalc.distanceToSurface + altitudeMode: distanceToSurfaceAltitudeMode + showAboveTerrainWarning: false + Layout.fillWidth: true } QGCLabel { text: frontalDistanceLabel } diff --git a/src/PlanView/CorridorScanEditor.qml b/src/PlanView/CorridorScanEditor.qml index d4cde246c69e1a34cdcc316bb3c033510c04cd51..752e48408d5d3c735ee9fedce7b516c64818df09 100644 --- a/src/PlanView/CorridorScanEditor.qml +++ b/src/PlanView/CorridorScanEditor.qml @@ -252,14 +252,7 @@ Rectangle { visible: tabBar.currentIndex == 1 CameraCalcCamera { - cameraCalc: missionItem.cameraCalc - vehicleFlightIsFrontal: true - distanceToSurfaceLabel: qsTr("Altitude") - distanceToSurfaceAltitudeMode: missionItem.followTerrain ? - QGroundControl.AltitudeModeAboveTerrain : - missionItem.cameraCalc.distanceToSurfaceRelative - frontalDistanceLabel: qsTr("Trigger Dist") - sideDistanceLabel: qsTr("Spacing") + cameraCalc: missionItem.cameraCalc } } } diff --git a/src/PlanView/StructureScanEditor.qml b/src/PlanView/StructureScanEditor.qml index 60f222d65dc080f317e5c96447f1edaa3b3ed1a9..621db0c507771d7d7d8b976ce59de3f5d1ce9d61 100644 --- a/src/PlanView/StructureScanEditor.qml +++ b/src/PlanView/StructureScanEditor.qml @@ -247,12 +247,7 @@ Rectangle { visible: tabBar.currentIndex == 1 CameraCalcCamera { - cameraCalc: missionItem.cameraCalc - vehicleFlightIsFrontal: false - distanceToSurfaceLabel: qsTr("Scan Distance") - distanceToSurfaceAltitudeMode: QGroundControl.AltitudeModeNone - frontalDistanceLabel: qsTr("Layer Height") - sideDistanceLabel: qsTr("Trigger Distance") + cameraCalc: missionItem.cameraCalc } } } diff --git a/src/PlanView/SurveyItemEditor.qml b/src/PlanView/SurveyItemEditor.qml index 12b8c3d2f3d1e37e113b6844f63bf2f60154e1bd..805384714060583513bdc216acfb32f5e8c872b0 100644 --- a/src/PlanView/SurveyItemEditor.qml +++ b/src/PlanView/SurveyItemEditor.qml @@ -280,16 +280,6 @@ Rectangle { spacing: _margin visible: transectsHeader.checked - /* - Temporarily removed due to bug https://github.com/mavlink/qgroundcontrol/issues/7005 - FactCheckBox { - text: qsTr("Split concave polygons") - fact: _splitConcave - visible: _splitConcave.visible - property Fact _splitConcave: missionItem.splitConcavePolygons - } - */ - QGCOptionsComboBox { Layout.fillWidth: true @@ -405,14 +395,7 @@ Rectangle { visible: tabBar.currentIndex == 1 CameraCalcCamera { - cameraCalc: missionItem.cameraCalc - vehicleFlightIsFrontal: true - distanceToSurfaceLabel: qsTr("Altitude") - distanceToSurfaceAltitudeMode: missionItem.followTerrain ? - QGroundControl.AltitudeModeAboveTerrain : - missionItem.cameraCalc.distanceToSurfaceRelative - frontalDistanceLabel: qsTr("Trigger Dist") - sideDistanceLabel: qsTr("Spacing") + cameraCalc: missionItem.cameraCalc } } // Camera Column