diff --git a/src/MissionManager/StructureScanComplexItem.cc b/src/MissionManager/StructureScanComplexItem.cc index c9a2fc1a34dff31539659ebbb30506797021fefb..100896efbbf25459e7bace94f60ba1ccfad231bf 100644 --- a/src/MissionManager/StructureScanComplexItem.cc +++ b/src/MissionManager/StructureScanComplexItem.cc @@ -63,9 +63,11 @@ StructureScanComplexItem::StructureScanComplexItem(Vehicle* vehicle, bool flyVie connect(&_altitudeFact, &Fact::valueChanged, this, &StructureScanComplexItem::_updateCoordinateAltitudes); connect(&_structurePolygon, &QGCMapPolygon::dirtyChanged, this, &StructureScanComplexItem::_polygonDirtyChanged); - connect(&_structurePolygon, &QGCMapPolygon::countChanged, this, &StructureScanComplexItem::_polygonCountChanged); connect(&_structurePolygon, &QGCMapPolygon::pathChanged, this, &StructureScanComplexItem::_rebuildFlightPolygon); + connect(&_structurePolygon, &QGCMapPolygon::countChanged, this, &StructureScanComplexItem::_updateLastSequenceNumber); + connect(&_layersFact, &Fact::valueChanged, this, &StructureScanComplexItem::_updateLastSequenceNumber); + connect(&_flightPolygon, &QGCMapPolygon::pathChanged, this, &StructureScanComplexItem::_flightPathChanged); connect(_cameraCalc.distanceToSurface(), &Fact::valueChanged, this, &StructureScanComplexItem::_rebuildFlightPolygon); @@ -108,19 +110,23 @@ void StructureScanComplexItem::_clearInternal(void) emit lastSequenceNumberChanged(lastSequenceNumber()); } -void StructureScanComplexItem::_polygonCountChanged(int count) +void StructureScanComplexItem::_updateLastSequenceNumber(void) { - Q_UNUSED(count); emit lastSequenceNumberChanged(lastSequenceNumber()); } int StructureScanComplexItem::lastSequenceNumber(void) const { - return _sequenceNumber + - (_layersFact.rawValue().toInt() * - ((_flightPolygon.count() + 1) + // 1 waypoint for each polygon vertex + 1 to go back to first polygon vertex for each layer - 2)) + // Camera trigger start/stop for each layer - 2; // ROI_WPNEXT_OFFSET and ROI_NONE commands + // Each structure layer contains: + // 1 waypoint for each polygon vertex + 1 to go back to first polygon vertex for each layer + // Two commands for camera trigger start/stop + int layerItemCount = _flightPolygon.count() + 1 + 2; + + int multiLayerItemCount = layerItemCount * _layersFact.rawValue().toInt(); + + int itemCount = multiLayerItemCount + 2; // +2 for ROI_WPNEXT_OFFSET and ROI_NONE commands + + return _sequenceNumber + itemCount - 1; } void StructureScanComplexItem::setDirty(bool dirty) diff --git a/src/MissionManager/StructureScanComplexItem.h b/src/MissionManager/StructureScanComplexItem.h index 904f57e4c3c1bc9cacc6f3035705863d949a89c4..068b8a40645ef83215c3068d53c079ae3075d006 100644 --- a/src/MissionManager/StructureScanComplexItem.h +++ b/src/MissionManager/StructureScanComplexItem.h @@ -107,13 +107,13 @@ signals: private slots: void _setDirty(void); void _polygonDirtyChanged (bool dirty); - void _polygonCountChanged (int count); void _flightPathChanged (void); void _clearInternal (void); void _updateCoordinateAltitudes (void); void _rebuildFlightPolygon (void); void _recalcCameraShots (void); void _recalcLayerInfo (void); + void _updateLastSequenceNumber (void); private: void _setExitCoordinate(const QGeoCoordinate& coordinate); diff --git a/src/MissionManager/StructureScanComplexItemTest.cc b/src/MissionManager/StructureScanComplexItemTest.cc index 13b0173ac1b30057f457bdbbaa88bd036c8c3d7b..88352c9add74b678cee083f0a60eb2731c44c574 100644 --- a/src/MissionManager/StructureScanComplexItemTest.cc +++ b/src/MissionManager/StructureScanComplexItemTest.cc @@ -134,6 +134,6 @@ void StructureScanComplexItemTest::_testItemCount(void) _initItem(); _structureScanItem->appendMissionItems(items, this); - QCOMPARE(items.count(), _structureScanItem->lastSequenceNumber()); + QCOMPARE(items.count() - 1, _structureScanItem->lastSequenceNumber()); }