From aa73d2b58ad8bc3874ca00b429aaa00f7ae7a638 Mon Sep 17 00:00:00 2001 From: DonLakeFlyer Date: Wed, 9 Oct 2019 09:23:22 -0700 Subject: [PATCH] Minimum transect spacing of 0.5 meters --- src/MissionManager/CorridorScanComplexItem.cc | 18 +++++++++++++++--- src/MissionManager/CorridorScanComplexItem.h | 7 ++++--- src/MissionManager/SurveyComplexItem.cc | 6 ++++++ 3 files changed, 25 insertions(+), 6 deletions(-) diff --git a/src/MissionManager/CorridorScanComplexItem.cc b/src/MissionManager/CorridorScanComplexItem.cc index c9d4614dc..1ff3753ba 100644 --- a/src/MissionManager/CorridorScanComplexItem.cc +++ b/src/MissionManager/CorridorScanComplexItem.cc @@ -144,9 +144,8 @@ bool CorridorScanComplexItem::specifiesCoordinate(void) const int CorridorScanComplexItem::_transectCount(void) const { - double transectSpacing = _cameraCalc.adjustedFootprintSide()->rawValue().toDouble(); double fullWidth = _corridorWidthFact.rawValue().toDouble(); - return fullWidth > 0.0 ? qCeil(fullWidth / transectSpacing) : 1; + return fullWidth > 0.0 ? qCeil(fullWidth / _transectSpacing()) : 1; } void CorridorScanComplexItem::_appendLoadedMissionItems(QList& items, QObject* missionItemParent) @@ -343,7 +342,7 @@ void CorridorScanComplexItem::_rebuildTransectsPhase1(void) _transects.clear(); _transectsPathHeightInfo.clear(); - double transectSpacing = _cameraCalc.adjustedFootprintSide()->rawValue().toDouble(); + double transectSpacing = _transectSpacing(); double fullWidth = _corridorWidthFact.rawValue().toDouble(); double halfWidth = fullWidth / 2.0; int transectCount = _transectCount(); @@ -501,3 +500,16 @@ double CorridorScanComplexItem::timeBetweenShots(void) { return _cruiseSpeed == 0 ? 0 : _cameraCalc.adjustedFootprintFrontal()->rawValue().toDouble() / _cruiseSpeed; } + +double CorridorScanComplexItem::_transectSpacing(void) const +{ + double transectSpacing = _cameraCalc.adjustedFootprintSide()->rawValue().toDouble(); + if (transectSpacing < 0.5) { + // We can't let spacing get too small otherwise we will end up with too many transects. + // So we limit to 0.5 meter spacing as min and set to huge value which will cause a single + // transect to be added. + transectSpacing = 100000; + } + + return transectSpacing; +} diff --git a/src/MissionManager/CorridorScanComplexItem.h b/src/MissionManager/CorridorScanComplexItem.h index ab1604c1f..7642d82a0 100644 --- a/src/MissionManager/CorridorScanComplexItem.h +++ b/src/MissionManager/CorridorScanComplexItem.h @@ -69,9 +69,10 @@ private slots: void _recalcCameraShots (void) final; private: - int _transectCount (void) const; - void _buildAndAppendMissionItems(QList& items, QObject* missionItemParent); - void _appendLoadedMissionItems (QList& items, QObject* missionItemParent); + double _transectSpacing (void) const; + int _transectCount (void) const; + void _buildAndAppendMissionItems (QList& items, QObject* missionItemParent); + void _appendLoadedMissionItems (QList& items, QObject* missionItemParent); QGCMapPolyline _corridorPolyline; QList> _transectSegments; ///< Internal transect segments including grid exit, turnaround and internal camera points diff --git a/src/MissionManager/SurveyComplexItem.cc b/src/MissionManager/SurveyComplexItem.cc index ea764a9a9..973c42193 100644 --- a/src/MissionManager/SurveyComplexItem.cc +++ b/src/MissionManager/SurveyComplexItem.cc @@ -834,6 +834,12 @@ void SurveyComplexItem::_rebuildTransectsPhase1WorkerSinglePolygon(bool refly) double gridAngle = _gridAngleFact.rawValue().toDouble(); double gridSpacing = _cameraCalc.adjustedFootprintSide()->rawValue().toDouble(); + if (gridSpacing < 0.5) { + // We can't let gridSpacing get too small otherwise we will end up with too many transects. + // So we limit to 0.5 meter spacing as min and set to huge value which will cause a single + // transect to be added. + gridSpacing = 100000; + } gridAngle = _clampGridAngle90(gridAngle); gridAngle += refly ? 90 : 0; -- 2.22.0