You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
83 lines
4.0 KiB
83 lines
4.0 KiB
/**************************************************************************** |
|
* |
|
* (c) 2009-2020 QGROUNDCONTROL PROJECT <http://www.qgroundcontrol.org> |
|
* |
|
* QGroundControl is licensed according to the terms in the file |
|
* COPYING.md in the root of the source code directory. |
|
* |
|
****************************************************************************/ |
|
|
|
#pragma once |
|
|
|
#include <QQuickItem> |
|
#include <QTimer> |
|
#include <QSGGeometryNode> |
|
#include <QSGGeometry> |
|
|
|
class MissionController; |
|
class QmlObjectListModel; |
|
class FlightPathSegment; |
|
|
|
class TerrainProfile : public QQuickItem |
|
{ |
|
Q_OBJECT |
|
|
|
public: |
|
TerrainProfile(QQuickItem *parent = nullptr); |
|
|
|
Q_PROPERTY(double horizontalMargin MEMBER _horizontalMargin NOTIFY horizontalMarginChanged) |
|
Q_PROPERTY(double visibleWidth MEMBER _visibleWidth NOTIFY visibleWidthChanged) |
|
Q_PROPERTY(MissionController* missionController READ missionController WRITE setMissionController NOTIFY missionControllerChanged) |
|
Q_PROPERTY(double pixelsPerMeter MEMBER _pixelsPerMeter NOTIFY pixelsPerMeterChanged) |
|
Q_PROPERTY(double minAMSAlt READ minAMSLAlt NOTIFY minAMSLAltChanged) |
|
Q_PROPERTY(double maxAMSAlt MEMBER _maxAMSLAlt NOTIFY maxAMSLAltChanged) |
|
|
|
MissionController* missionController (void) { return _missionController; } |
|
double minAMSLAlt (void); |
|
double maxAMSLAlt (void) { return _maxAMSLAlt; } |
|
|
|
void setMissionController(MissionController* missionController); |
|
|
|
// Overrides from QQuickItem |
|
QSGNode* updatePaintNode(QSGNode* oldNode, QQuickItem::UpdatePaintNodeData* updatePaintNodeData); |
|
|
|
// Override from QQmlParserStatus |
|
void componentComplete(void) final; |
|
|
|
signals: |
|
void missionControllerChanged (void); |
|
void visibleWidthChanged (void); |
|
void horizontalMarginChanged (void); |
|
void pixelsPerMeterChanged (void); |
|
void minAMSLAltChanged (void); |
|
void maxAMSLAltChanged (void); |
|
void _updateSignal (void); |
|
|
|
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); |
|
|
|
MissionController* _missionController = nullptr; |
|
QmlObjectListModel* _visualItems = nullptr; |
|
double _visibleWidth = 0; |
|
double _horizontalMargin = 0; |
|
double _pixelsPerMeter = 0; |
|
double _minAMSLAlt = 0; |
|
double _maxAMSLAlt = 0; |
|
|
|
static const int _lineWidth = 7; |
|
static const int _verticalMargin = 0; |
|
|
|
Q_DISABLE_COPY(TerrainProfile) |
|
}; |
|
|
|
QML_DECLARE_TYPE(TerrainProfile)
|
|
|