diff --git a/src/PlanView/SurveyItemEditor.qml b/src/PlanView/SurveyItemEditor.qml index 4c2dc99450365933b9fdb1b2f92b791f2cf2250a..4796591f6656b1eae3c358e403e05294b9987c8b 100644 --- a/src/PlanView/SurveyItemEditor.qml +++ b/src/PlanView/SurveyItemEditor.qml @@ -27,23 +27,24 @@ Rectangle { property real _margin: ScreenTools.defaultFontPixelWidth / 2 property real _fieldWidth: ScreenTools.defaultFontPixelWidth * 10.5 property var _vehicle: QGroundControl.multiVehicleManager.activeVehicle ? QGroundControl.multiVehicleManager.activeVehicle : QGroundControl.multiVehicleManager.offlineEditingVehicle - property real _cameraMinTriggerInterval: missionItem.cameraCalc.minTriggerInterval.rawValue + property real _cameraMinTriggerInterval: _missionItem.cameraCalc.minTriggerInterval.rawValue property bool _polygonDone: false property string _doneAdjusting: qsTr("Done") - property bool _presetsAvailable: missionItem.presetNames.length !== 0 + property var _missionItem: missionItem + property bool _presetsAvailable: _missionItem.presetNames.length !== 0 function polygonCaptureStarted() { - missionItem.clearPolygon() + _missionItem.clearPolygon() } function polygonCaptureFinished(coordinates) { for (var i=0; i 0 && _cameraMinTriggerInterval !== 0 && _cameraMinTriggerInterval > missionItem.timeBetweenShots + visible: _missionItem.cameraShots > 0 && _cameraMinTriggerInterval !== 0 && _cameraMinTriggerInterval > _missionItem.timeBetweenShots } CameraCalcGrid { - cameraCalc: missionItem.cameraCalc + cameraCalc: _missionItem.cameraCalc vehicleFlightIsFrontal: true distanceToSurfaceLabel: qsTr("Altitude") - distanceToSurfaceAltitudeMode: missionItem.followTerrain ? + distanceToSurfaceAltitudeMode: _missionItem.followTerrain ? QGroundControl.AltitudeModeAboveTerrain : - (missionItem.cameraCalc.distanceToSurfaceRelative ? QGroundControl.AltitudeModeRelative : QGroundControl.AltitudeModeAbsolute) + (_missionItem.cameraCalc.distanceToSurfaceRelative ? QGroundControl.AltitudeModeRelative : QGroundControl.AltitudeModeAbsolute) frontalDistanceLabel: qsTr("Trigger Dist") sideDistanceLabel: qsTr("Spacing") } @@ -135,9 +136,9 @@ Rectangle { QGCLabel { text: qsTr("Angle") } FactTextField { - fact: missionItem.gridAngle + fact: _missionItem.gridAngle Layout.fillWidth: true - onUpdated: angleSlider.value = missionItem.gridAngle.value + onUpdated: angleSlider.value = _missionItem.gridAngle.value } QGCSlider { @@ -149,8 +150,8 @@ Rectangle { Layout.fillWidth: true Layout.columnSpan: 2 Layout.preferredHeight: ScreenTools.defaultFontPixelHeight * 1.5 - onValueChanged: missionItem.gridAngle.value = value - Component.onCompleted: value = missionItem.gridAngle.value + onValueChanged: _missionItem.gridAngle.value = value + Component.onCompleted: value = _missionItem.gridAngle.value updateValueWhileDragging: true } @@ -158,14 +159,14 @@ Rectangle { text: qsTr("Turnaround dist") } FactTextField { - fact: missionItem.turnAroundDistance + fact: _missionItem.turnAroundDistance Layout.fillWidth: true } } QGCButton { text: qsTr("Rotate Entry Point") - onClicked: missionItem.rotateEntryPoint(); + onClicked: _missionItem.rotateEntryPoint(); } ColumnLayout { @@ -180,40 +181,40 @@ Rectangle { model: [ { text: qsTr("Hover and capture image"), - fact: missionItem.hoverAndCapture, - enabled: !missionItem.followTerrain, - visible: missionItem.hoverAndCaptureAllowed + fact: _missionItem.hoverAndCapture, + enabled: !_missionItem.followTerrain, + visible: _missionItem.hoverAndCaptureAllowed }, { text: qsTr("Refly at 90 deg offset"), - fact: missionItem.refly90Degrees, - enabled: !missionItem.followTerrain, + fact: _missionItem.refly90Degrees, + enabled: !_missionItem.followTerrain, visible: true }, { text: qsTr("Images in turnarounds"), - fact: missionItem.cameraTriggerInTurnAround, - enabled: missionItem.hoverAndCaptureAllowed ? !missionItem.hoverAndCapture.rawValue : true, + fact: _missionItem.cameraTriggerInTurnAround, + enabled: _missionItem.hoverAndCaptureAllowed ? !_missionItem.hoverAndCapture.rawValue : true, visible: true }, { text: qsTr("Fly alternate transects"), - fact: missionItem.flyAlternateTransects, + fact: _missionItem.flyAlternateTransects, enabled: true, visible: _vehicle ? (_vehicle.fixedWing || _vehicle.vtol) : false }, { text: qsTr("Relative altitude"), - enabled: missionItem.cameraCalc.isManualCamera && !missionItem.followTerrain, - visible: QGroundControl.corePlugin.options.showMissionAbsoluteAltitude || (!missionItem.cameraCalc.distanceToSurfaceRelative && !missionItem.followTerrain), - checked: missionItem.cameraCalc.distanceToSurfaceRelative + enabled: _missionItem.cameraCalc.isManualCamera && !_missionItem.followTerrain, + visible: QGroundControl.corePlugin.options.showMissionAbsoluteAltitude || (!_missionItem.cameraCalc.distanceToSurfaceRelative && !_missionItem.followTerrain), + checked: _missionItem.cameraCalc.distanceToSurfaceRelative } ] onItemClicked: { if (index == 4) { - missionItem.cameraCalc.distanceToSurfaceRelative = !missionItem.cameraCalc.distanceToSurfaceRelative - console.log(missionItem.cameraCalc.distanceToSurfaceRelative) + _missionItem.cameraCalc.distanceToSurfaceRelative = !_missionItem.cameraCalc.distanceToSurfaceRelative + console.log(_missionItem.cameraCalc.distanceToSurfaceRelative) } } } @@ -241,7 +242,7 @@ Rectangle { visible: tabBar.currentIndex === 1 CameraCalcCamera { - cameraCalc: missionItem.cameraCalc + cameraCalc: _missionItem.cameraCalc } } // Camera Column @@ -251,6 +252,7 @@ Rectangle { anchors.right: parent.right spacing: _margin visible: tabBar.currentIndex === 2 + missionItem: _missionItem } // Presets Tab @@ -269,7 +271,7 @@ Rectangle { QGCComboBox { id: presetCombo Layout.fillWidth: true - model: missionItem.presetNames + model: _missionItem.presetNames } RowLayout { @@ -278,14 +280,14 @@ Rectangle { QGCButton { Layout.fillWidth: true text: qsTr("Apply Preset") - enabled: missionItem.presetNames.length != 0 - onClicked: missionItem.loadPreset(presetCombo.textAt(presetCombo.currentIndex)) + enabled: _missionItem.presetNames.length != 0 + onClicked: _missionItem.loadPreset(presetCombo.textAt(presetCombo.currentIndex)) } QGCButton { Layout.fillWidth: true text: qsTr("Delete Preset") - enabled: missionItem.presetNames.length != 0 + enabled: _missionItem.presetNames.length != 0 onClicked: mainWindow.showComponentDialog(deletePresetMessage, qsTr("Delete Preset"), mainWindow.showDialogDefaultWidth, StandardButton.Yes | StandardButton.No) Component { @@ -294,7 +296,7 @@ Rectangle { message: qsTr("Are you sure you want to delete '%1' preset?").arg(presetName) property string presetName: presetCombo.textAt(presetCombo.currentIndex) function accept() { - missionItem.deletePreset(presetName) + _missionItem.deletePreset(presetName) hideDialog() } } @@ -326,9 +328,9 @@ Rectangle { QGCLabel { text: qsTr("Angle") } FactTextField { - fact: missionItem.gridAngle + fact: _missionItem.gridAngle Layout.fillWidth: true - onUpdated: presetsAngleSlider.value = missionItem.gridAngle.value + onUpdated: presetsAngleSlider.value = _missionItem.gridAngle.value } QGCSlider { @@ -340,8 +342,8 @@ Rectangle { Layout.fillWidth: true Layout.columnSpan: 2 Layout.preferredHeight: ScreenTools.defaultFontPixelHeight * 1.5 - onValueChanged: missionItem.gridAngle.value = value - Component.onCompleted: value = missionItem.gridAngle.value + onValueChanged: _missionItem.gridAngle.value = value + Component.onCompleted: value = _missionItem.gridAngle.value updateValueWhileDragging: true } @@ -349,7 +351,7 @@ Rectangle { Layout.columnSpan: 2 Layout.fillWidth: true text: qsTr("Rotate Entry Point") - onClicked: missionItem.rotateEntryPoint(); + onClicked: _missionItem.rotateEntryPoint(); } } @@ -372,7 +374,7 @@ Rectangle { QGCViewDialog { function accept() { if (presetNameField.text != "") { - missionItem.savePreset(presetNameField.text) + _missionItem.savePreset(presetNameField.text) hideDialog() } } @@ -407,9 +409,9 @@ Rectangle { selectExisting: true onAcceptedForLoad: { - missionItem.surveyAreaPolygon.loadKMLOrSHPFile(file) - missionItem.resetState = false - //editorMap.mapFitFunctions.fitMapViewportToMissionItems() + _missionItem.surveyAreaPolygon.loadKMLOrSHPFile(file) + _missionItem.resetState = false + //editorMap.mapFitFunctions.fitMapViewportTo_missionItems() close() } } diff --git a/src/QmlControls/TerrainProfile.cc b/src/QmlControls/TerrainProfile.cc index fbc0ba081e4730c862eb09ee1955c9da89eb213d..3314c1170b8be3c42fd2a704934d8a00ff03aac6 100644 --- a/src/QmlControls/TerrainProfile.cc +++ b/src/QmlControls/TerrainProfile.cc @@ -57,12 +57,12 @@ void TerrainProfile::_newVisualItems(void) emit _updateSignal(); } -void TerrainProfile::_createGeometry(QSGGeometryNode*& geometryNode, QSGGeometry*& geometry, int vertices, QSGGeometry::DrawingMode drawingMode, const QColor& color) +void TerrainProfile::_createGeometry(QSGGeometryNode*& geometryNode, QSGGeometry*& geometry, QSGGeometry::DrawingMode drawingMode, const QColor& color) { QSGFlatColorMaterial* terrainMaterial = new QSGFlatColorMaterial; terrainMaterial->setColor(color); - geometry = new QSGGeometry(QSGGeometry::defaultAttributes_Point2D(), vertices); + geometry = new QSGGeometry(QSGGeometry::defaultAttributes_Point2D(), 0); geometry->setDrawingMode(drawingMode); geometry->setLineWidth(2); @@ -74,12 +74,16 @@ void TerrainProfile::_createGeometry(QSGGeometryNode*& geometryNode, QSGGeometry geometryNode->setGeometry(geometry); } -void TerrainProfile::_updateSegmentCounts(FlightPathSegment* segment, int& cTerrainPoints, int& cMissingTerrainSegments, int& cTerrainCollisionSegments, double& maxTerrainHeight) +void TerrainProfile::_updateSegmentCounts(FlightPathSegment* segment, int& cFlightProfileSegments, int& cTerrainProfilePoints, int& cMissingTerrainSegments, int& cTerrainCollisionSegments, double& maxTerrainHeight) { - if (segment->amslTerrainHeights().count() == 0 || qIsNaN(segment->coord1AMSLAlt()) || qIsNaN(segment->coord2AMSLAlt())) { + if (_shouldAddFlightProfileSegment(segment)) { + cFlightProfileSegments++; + } + + if (_shouldAddMissingTerrainSegment(segment)) { cMissingTerrainSegments += 1; } else { - cTerrainPoints += segment->amslTerrainHeights().count(); + cTerrainProfilePoints += segment->amslTerrainHeights().count(); for (int i=0; iamslTerrainHeights().count(); i++) { maxTerrainHeight = qMax(maxTerrainHeight, segment->amslTerrainHeights()[i].value()); } @@ -89,7 +93,7 @@ void TerrainProfile::_updateSegmentCounts(FlightPathSegment* segment, int& cTerr } } -void TerrainProfile::_addTerrainProfileSegment(FlightPathSegment* segment, double currentDistance, double amslAltRange, QSGGeometry::Point2D* terrainVertices, int& terrainVertexIndex) +void TerrainProfile::_addTerrainProfileSegment(FlightPathSegment* segment, double currentDistance, double amslAltRange, QSGGeometry::Point2D* terrainVertices, int& terrainProfileVertexIndex) { double terrainDistance = 0; for (int heightIndex=0; heightIndexamslTerrainHeights().count(); heightIndex++) { @@ -110,17 +114,17 @@ void TerrainProfile::_addTerrainProfileSegment(FlightPathSegment* segment, doubl float x = (currentDistance + terrainDistance) * _pixelsPerMeter; float y = _availableHeight() - (terrainHeightPercent * _availableHeight()); - _setVertex(terrainVertices[terrainVertexIndex++], x, y); + _setVertex(terrainVertices[terrainProfileVertexIndex++], x, y); } } -void TerrainProfile::_addMissingTerrainSegment(FlightPathSegment* segment, double currentDistance, QSGGeometry::Point2D* missingTerrainVertices, int& missingTerrainVertexIndex) +void TerrainProfile::_addMissingTerrainSegment(FlightPathSegment* segment, double currentDistance, QSGGeometry::Point2D* missingTerrainVertices, int& missingterrainProfileVertexIndex) { - if (segment->amslTerrainHeights().count() == 0) { + if (_shouldAddMissingTerrainSegment(segment)) { float x = currentDistance * _pixelsPerMeter; float y = _availableHeight(); - _setVertex(missingTerrainVertices[missingTerrainVertexIndex++], x, y); - _setVertex(missingTerrainVertices[missingTerrainVertexIndex++], x + (segment->totalDistance() * _pixelsPerMeter), y); + _setVertex(missingTerrainVertices[missingterrainProfileVertexIndex++], x, y); + _setVertex(missingTerrainVertices[missingterrainProfileVertexIndex++], x + (segment->totalDistance() * _pixelsPerMeter), y); } } @@ -146,15 +150,15 @@ void TerrainProfile::_addTerrainCollisionSegment(FlightPathSegment* segment, dou void TerrainProfile::_addFlightProfileSegment(FlightPathSegment* segment, double currentDistance, double amslAltRange, QSGGeometry::Point2D* flightProfileVertices, int& flightProfileVertexIndex) { + if (!_shouldAddFlightProfileSegment(segment)) { + return; + } + double amslCoord1Height = segment->coord1AMSLAlt(); double amslCoord2Height = segment->coord2AMSLAlt(); double coord1HeightPercent = qMax(((amslCoord1Height - _missionController->minAMSLAltitude()) / amslAltRange), 0.0); double coord2HeightPercent = qMax(((amslCoord2Height - _missionController->minAMSLAltitude()) / amslAltRange), 0.0); - if (qIsNaN(amslCoord1Height) || qIsNaN(amslCoord2Height)) { - return; - } - float x = currentDistance * _pixelsPerMeter; float y = _availableHeight() - (coord1HeightPercent * _availableHeight()); @@ -173,16 +177,16 @@ QSGNode* TerrainProfile::updatePaintNode(QSGNode* oldNode, QQuickItem::UpdatePai QSGGeometry* missingTerrainGeometry = nullptr; QSGGeometry* flightProfileGeometry = nullptr; QSGGeometry* terrainCollisionGeometry = nullptr; - int cTerrainPoints = 0; + int cTerrainProfilePoints = 0; int cMissingTerrainSegments = 0; - int cFlightPathSegments = 0; + int cFlightProfileSegments = 0; int cTerrainCollisionSegments = 0; double maxTerrainHeight = 0; // First we need to determine: - // - how many terrain vertices we need + // - how many terrain profile vertices we need // - how many missing terrain segments there are - // - how many flight path segments we need + // - how many flight profile segments we need // - how many terrain collision segments there are // - what is the total distance so we can calculate pixels per meter @@ -191,16 +195,14 @@ QSGNode* TerrainProfile::updatePaintNode(QSGNode* oldNode, QQuickItem::UpdatePai ComplexMissionItem* complexItem = _visualItems->value(viIndex); if (visualItem->simpleFlightPathSegment()) { - cFlightPathSegments++; FlightPathSegment* segment = visualItem->simpleFlightPathSegment(); - _updateSegmentCounts(segment, cTerrainPoints, cMissingTerrainSegments, cTerrainCollisionSegments, maxTerrainHeight); + _updateSegmentCounts(segment, cFlightProfileSegments, cTerrainProfilePoints, cMissingTerrainSegments, cTerrainCollisionSegments, maxTerrainHeight); } if (complexItem) { for (int segmentIndex=0; segmentIndexflightPathSegments()->count(); segmentIndex++) { - cFlightPathSegments++; FlightPathSegment* segment = complexItem->flightPathSegments()->value(segmentIndex); - _updateSegmentCounts(segment, cTerrainPoints, cMissingTerrainSegments, cTerrainCollisionSegments, maxTerrainHeight); + _updateSegmentCounts(segment, cFlightProfileSegments, cTerrainProfilePoints, cMissingTerrainSegments, cTerrainCollisionSegments, maxTerrainHeight); } } } @@ -209,12 +211,12 @@ QSGNode* TerrainProfile::updatePaintNode(QSGNode* oldNode, QQuickItem::UpdatePai #if 0 static int counter = 0; - qDebug() << "updatePaintNode" << counter++ << cFlightPathSegments << cTerrainPoints << cMissingTerrainSegments << cTerrainCollisionSegments; + qDebug() << "updatePaintNode" << counter++ << cFlightProfileSegments << cTerrainProfilePoints << cMissingTerrainSegments << cTerrainCollisionSegments; #endif _pixelsPerMeter = (_visibleWidth - (_horizontalMargin * 2)) / _missionController->missionDistance(); - + // Instantiate nodes if (!rootNode) { rootNode = new QSGNode; @@ -223,47 +225,50 @@ QSGNode* TerrainProfile::updatePaintNode(QSGNode* oldNode, QQuickItem::UpdatePai QSGGeometryNode* flightProfileNode = nullptr; QSGGeometryNode* terrainCollisionNode = nullptr; - _createGeometry(terrainProfileNode, terrainProfileGeometry, cTerrainPoints, QSGGeometry::DrawLineStrip, "green"); - _createGeometry(missingTerrainNode, missingTerrainGeometry, cMissingTerrainSegments * 2, QSGGeometry::DrawLines, "yellow"); - _createGeometry(flightProfileNode, flightProfileGeometry, cFlightPathSegments * 2, QSGGeometry::DrawLines, "orange"); - _createGeometry(terrainCollisionNode, terrainCollisionGeometry, cTerrainCollisionSegments * 2, QSGGeometry::DrawLines, "red"); + _createGeometry(terrainProfileNode, terrainProfileGeometry, QSGGeometry::DrawLineStrip, "green"); + _createGeometry(missingTerrainNode, missingTerrainGeometry, QSGGeometry::DrawLines, "yellow"); + _createGeometry(flightProfileNode, flightProfileGeometry, QSGGeometry::DrawLines, "orange"); + _createGeometry(terrainCollisionNode, terrainCollisionGeometry, QSGGeometry::DrawLines, "red"); rootNode->appendChildNode(terrainProfileNode); rootNode->appendChildNode(missingTerrainNode); rootNode->appendChildNode(flightProfileNode); rootNode->appendChildNode(terrainCollisionNode); - } else { - QSGNode* node = rootNode->childAtIndex(0); - terrainProfileGeometry = static_cast(node)->geometry(); - terrainProfileGeometry->allocate(cTerrainPoints); - node->markDirty(QSGNode::DirtyGeometry); - - node = rootNode->childAtIndex(1); - missingTerrainGeometry = static_cast(node)->geometry(); - missingTerrainGeometry->allocate(cMissingTerrainSegments * 2); - node->markDirty(QSGNode::DirtyGeometry); - - node = rootNode->childAtIndex(2); - flightProfileGeometry = static_cast(node)->geometry(); - flightProfileGeometry->allocate(cFlightPathSegments * 2); - node->markDirty(QSGNode::DirtyGeometry); - - node = rootNode->childAtIndex(3); - terrainCollisionGeometry = static_cast(node)->geometry(); - terrainCollisionGeometry->allocate(cTerrainCollisionSegments * 2); - node->markDirty(QSGNode::DirtyGeometry); } - int flightProfileVertexIndex = 0; - int terrainVertexIndex = 0; - int missingTerrainVertexIndex = 0; - int terrainCollisionVertexIndex = 0; - double currentDistance = 0; - QSGGeometry::Point2D* flightProfileVertices = flightProfileGeometry->vertexDataAsPoint2D(); - QSGGeometry::Point2D* terrainVertices = terrainProfileGeometry->vertexDataAsPoint2D(); - QSGGeometry::Point2D* missingTerrainVertices = missingTerrainGeometry->vertexDataAsPoint2D(); - QSGGeometry::Point2D* terrainCollisionVertices = terrainCollisionGeometry->vertexDataAsPoint2D(); - + // Allocate space for the vertices + + QSGNode* node = rootNode->childAtIndex(0); + terrainProfileGeometry = static_cast(node)->geometry(); + terrainProfileGeometry->allocate(cTerrainProfilePoints); + node->markDirty(QSGNode::DirtyGeometry); + + node = rootNode->childAtIndex(1); + missingTerrainGeometry = static_cast(node)->geometry(); + missingTerrainGeometry->allocate(cMissingTerrainSegments * 2); + node->markDirty(QSGNode::DirtyGeometry); + + node = rootNode->childAtIndex(2); + flightProfileGeometry = static_cast(node)->geometry(); + flightProfileGeometry->allocate(cFlightProfileSegments * 2); + node->markDirty(QSGNode::DirtyGeometry); + + node = rootNode->childAtIndex(3); + terrainCollisionGeometry = static_cast(node)->geometry(); + terrainCollisionGeometry->allocate(cTerrainCollisionSegments * 2); + node->markDirty(QSGNode::DirtyGeometry); + + int flightProfileVertexIndex = 0; + int terrainProfileVertexIndex = 0; + int missingterrainProfileVertexIndex = 0; + int terrainCollisionVertexIndex = 0; + double currentDistance = 0; + QSGGeometry::Point2D* flightProfileVertices = flightProfileGeometry->vertexDataAsPoint2D(); + QSGGeometry::Point2D* terrainProfileVertices = terrainProfileGeometry->vertexDataAsPoint2D(); + QSGGeometry::Point2D* missingTerrainVertices = missingTerrainGeometry->vertexDataAsPoint2D(); + QSGGeometry::Point2D* terrainCollisionVertices = terrainCollisionGeometry->vertexDataAsPoint2D(); + + // This step places the vertices for display into the nodes for (int viIndex=0; viIndex<_visualItems->count(); viIndex++) { VisualMissionItem* visualItem = _visualItems->value(viIndex); ComplexMissionItem* complexItem = _visualItems->value(viIndex); @@ -276,8 +281,8 @@ QSGNode* TerrainProfile::updatePaintNode(QSGNode* oldNode, QQuickItem::UpdatePai FlightPathSegment* segment = complexItem->flightPathSegments()->value(segmentIndex); _addFlightProfileSegment (segment, currentDistance, amslAltRange, flightProfileVertices, flightProfileVertexIndex); - _addTerrainProfileSegment (segment, currentDistance, amslAltRange, terrainVertices, terrainVertexIndex); - _addMissingTerrainSegment (segment, currentDistance, missingTerrainVertices, missingTerrainVertexIndex); + _addTerrainProfileSegment (segment, currentDistance, amslAltRange, terrainProfileVertices, terrainProfileVertexIndex); + _addMissingTerrainSegment (segment, currentDistance, missingTerrainVertices, missingterrainProfileVertexIndex); _addTerrainCollisionSegment (segment, currentDistance, amslAltRange, terrainCollisionVertices, terrainCollisionVertexIndex); currentDistance += segment->totalDistance(); @@ -289,8 +294,8 @@ QSGNode* TerrainProfile::updatePaintNode(QSGNode* oldNode, QQuickItem::UpdatePai FlightPathSegment* segment = visualItem->simpleFlightPathSegment(); _addFlightProfileSegment (segment, currentDistance, amslAltRange, flightProfileVertices, flightProfileVertexIndex); - _addTerrainProfileSegment (segment, currentDistance, amslAltRange, terrainVertices, terrainVertexIndex); - _addMissingTerrainSegment (segment, currentDistance, missingTerrainVertices, missingTerrainVertexIndex); + _addTerrainProfileSegment (segment, currentDistance, amslAltRange, terrainProfileVertices, terrainProfileVertexIndex); + _addMissingTerrainSegment (segment, currentDistance, missingTerrainVertices, missingterrainProfileVertexIndex); _addTerrainCollisionSegment (segment, currentDistance, amslAltRange, terrainCollisionVertices, terrainCollisionVertexIndex); currentDistance += segment->totalDistance(); @@ -326,3 +331,13 @@ void TerrainProfile::_setVertex(QSGGeometry::Point2D& vertex, double x, double y { vertex.set(x + _horizontalMargin, y + _verticalMargin); } + +bool TerrainProfile::_shouldAddFlightProfileSegment (FlightPathSegment* segment) +{ + return !qIsNaN(segment->coord1AMSLAlt()) && !qIsNaN(segment->coord2AMSLAlt()); +} + +bool TerrainProfile::_shouldAddMissingTerrainSegment (FlightPathSegment* segment) +{ + return segment->amslTerrainHeights().count() == 0; +} diff --git a/src/QmlControls/TerrainProfile.h b/src/QmlControls/TerrainProfile.h index c49f219527aae1950c3276b3966325b9ecdfcff3..34cff8512e667d6e6cafb2b70bc4dd21c6a82c35 100644 --- a/src/QmlControls/TerrainProfile.h +++ b/src/QmlControls/TerrainProfile.h @@ -57,14 +57,16 @@ private slots: void _newVisualItems (void); private: - void _createGeometry (QSGGeometryNode*& geometryNode, QSGGeometry*& geometry, int vertices, QSGGeometry::DrawingMode drawingMode, const QColor& color); - void _updateSegmentCounts (FlightPathSegment* segment, int& cTerrainPoints, int& cMissingTerrainSegments, int& cTerrainCollisionSegments, double& maxTerrainHeight); - void _addTerrainProfileSegment (FlightPathSegment* segment, double currentDistance, double amslAltRange, QSGGeometry::Point2D* terrainVertices, int& terrainVertexIndex); - void _addMissingTerrainSegment (FlightPathSegment* segment, double currentDistance, QSGGeometry::Point2D* missingTerrainVertices, int& missingTerrainVertexIndex); - void _addTerrainCollisionSegment (FlightPathSegment* segment, double currentDistance, double amslAltRange, QSGGeometry::Point2D* terrainCollisionVertices, int& terrainCollisionVertexIndex); - void _addFlightProfileSegment (FlightPathSegment* segment, double currentDistance, double amslAltRange, QSGGeometry::Point2D* flightProfileVertices, int& flightProfileVertexIndex); - double _availableHeight (void) const; - void _setVertex (QSGGeometry::Point2D& vertex, double x, double y); + void _createGeometry (QSGGeometryNode*& geometryNode, QSGGeometry*& geometry, QSGGeometry::DrawingMode drawingMode, const QColor& color); + void _updateSegmentCounts (FlightPathSegment* segment, int& cFlightProfileSegments, int& cTerrainPoints, int& cMissingTerrainSegments, int& cTerrainCollisionSegments, double& maxTerrainHeight); + void _addTerrainProfileSegment (FlightPathSegment* segment, double currentDistance, double amslAltRange, QSGGeometry::Point2D* terrainProfileVertices, int& terrainVertexIndex); + void _addMissingTerrainSegment (FlightPathSegment* segment, double currentDistance, QSGGeometry::Point2D* missingTerrainVertices, int& missingTerrainVertexIndex); + void _addTerrainCollisionSegment (FlightPathSegment* segment, double currentDistance, double amslAltRange, QSGGeometry::Point2D* terrainCollisionVertices, int& terrainCollisionVertexIndex); + void _addFlightProfileSegment (FlightPathSegment* segment, double currentDistance, double amslAltRange, QSGGeometry::Point2D* flightProfileVertices, int& flightProfileVertexIndex); + double _availableHeight (void) const; + void _setVertex (QSGGeometry::Point2D& vertex, double x, double y); + bool _shouldAddFlightProfileSegment (FlightPathSegment* segment); + bool _shouldAddMissingTerrainSegment (FlightPathSegment* segment); MissionController* _missionController = nullptr; QmlObjectListModel* _visualItems = nullptr;