diff --git a/src/MissionManager/QGCMapPolygon.cc b/src/MissionManager/QGCMapPolygon.cc index aa1e0b3898a2f0afd2dc9d81ea6bb26c008fd94a..18ae00fdfbc9bd9f90d48ed1b5f09a007f170d8b 100644 --- a/src/MissionManager/QGCMapPolygon.cc +++ b/src/MissionManager/QGCMapPolygon.cc @@ -302,9 +302,10 @@ void QGCMapPolygon::_updateCenter(void) } center = _coordFromPointF(QPointF(centroid.x() / polygonF.count(), centroid.y() / polygonF.count())); } - - _center = center; - emit centerChanged(center); + if (_center != center) { + _center = center; + emit centerChanged(center); + } } } diff --git a/src/MissionManager/QGCMapPolygonTest.cc b/src/MissionManager/QGCMapPolygonTest.cc index d9160c9d5e24d6c27b7a077d283778db6814941c..679292ad3a4c202125450fa402c2a2c4bbe6e0ae 100644 --- a/src/MissionManager/QGCMapPolygonTest.cc +++ b/src/MissionManager/QGCMapPolygonTest.cc @@ -122,7 +122,12 @@ void QGCMapPolygonTest::_testVertexManipulation(void) QCOMPARE(_mapPolygon->count(), i); _mapPolygon->appendVertex(_polyPoints[i]); - QVERIFY(_multiSpyPolygon->checkOnlySignalByMask(pathChangedMask | polygonDirtyChangedMask | polygonCountChangedMask | centerChangedMask)); + if (i >= 2) { + // Center is no recalculated until there are 3 points or more + QVERIFY(_multiSpyPolygon->checkOnlySignalByMask(pathChangedMask | polygonDirtyChangedMask | polygonCountChangedMask | centerChangedMask)); + } else { + QVERIFY(_multiSpyPolygon->checkOnlySignalByMask(pathChangedMask | polygonDirtyChangedMask | polygonCountChangedMask)); + } QVERIFY(_multiSpyModel->checkOnlySignalByMask(modelDirtyChangedMask | modelCountChangedMask)); QCOMPARE(_multiSpyPolygon->pullIntFromSignalIndex(polygonCountChangedIndex), i+1); QCOMPARE(_multiSpyModel->pullIntFromSignalIndex(modelCountChangedIndex), i+1); diff --git a/src/QGCGeo.cc b/src/QGCGeo.cc index bf3f7252bc5d699cd0ac68a07533763e97157b60..0c27941cb9ce26b72b6f638854256ccb9268e68f 100644 --- a/src/QGCGeo.cc +++ b/src/QGCGeo.cc @@ -28,7 +28,13 @@ static const float epsilon = std::numeric_limits::epsilon(); -void convertGeoToNed(QGeoCoordinate coord, QGeoCoordinate origin, double* x, double* y, double* z) { +void convertGeoToNed(QGeoCoordinate coord, QGeoCoordinate origin, double* x, double* y, double* z) +{ + if (coord == origin) { + // Short circuit to prevent NaNs in calculation + *x = *y = *z = 0; + return; + } double lat_rad = coord.latitude() * M_DEG_TO_RAD; double lon_rad = coord.longitude() * M_DEG_TO_RAD;