205 QSGNode* rootNode =
static_cast<QSGNode *
>(oldNode);
206 QSGGeometry* terrainProfileGeometry =
nullptr;
207 QSGGeometry* missingTerrainGeometry =
nullptr;
208 QSGGeometry* flightProfileGeometry =
nullptr;
209 QSGGeometry* terrainCollisionGeometry =
nullptr;
210 int cTerrainProfilePoints = 0;
211 int cMissingTerrainSegments = 0;
212 int cFlightProfileSegments = 0;
213 int cTerrainCollisionSegments = 0;
214 double minTerrainHeight = qQNaN();
215 double maxTerrainHeight = qQNaN();
224 for (
int viIndex=0; viIndex<_visualItems->
count(); viIndex++) {
230 _updateSegmentCounts(segment, cFlightProfileSegments, cTerrainProfilePoints, cMissingTerrainSegments, cTerrainCollisionSegments, minTerrainHeight, maxTerrainHeight);
234 for (
int segmentIndex=0; segmentIndex<complexItem->flightPathSegments()->count(); segmentIndex++) {
236 _updateSegmentCounts(segment, cFlightProfileSegments, cTerrainProfilePoints, cMissingTerrainSegments, cTerrainCollisionSegments, minTerrainHeight, maxTerrainHeight);
242 _minAMSLAlt = std::fmin(_missionController->
minAMSLAltitude(), minTerrainHeight);
243 _maxAMSLAlt = std::fmax(_missionController->
maxAMSLAltitude(), maxTerrainHeight);
246 double amslAltRange = _maxAMSLAlt - _minAMSLAlt;
247 double amslAltRangeBuffer = amslAltRange * 0.1;
248 _maxAMSLAlt += amslAltRangeBuffer;
249 if (_minAMSLAlt > 0.0) {
250 _minAMSLAlt -= amslAltRangeBuffer;
251 _minAMSLAlt = std::fmax(_minAMSLAlt, 0.0);
253 amslAltRange = _maxAMSLAlt - _minAMSLAlt;
255 static int counter = 0;
257 qCDebug(TerrainProfileLog) << QStringLiteral(
"updatePaintNode counter:%1 cFlightProfileSegments:%2 cTerrainProfilePoints:%3 cMissingTerrainSegments:%4 cTerrainCollisionSegments:%5 _minAMSLAlt:%6 _maxAMSLAlt:%7 maxTerrainHeight:%8")
258 .arg(counter++).arg(cFlightProfileSegments).arg(cTerrainProfilePoints).arg(cMissingTerrainSegments).arg(cTerrainCollisionSegments).arg(_minAMSLAlt).arg(_maxAMSLAlt).arg(maxTerrainHeight);
264 rootNode =
new QSGNode;
266 QSGGeometryNode* terrainProfileNode =
nullptr;
267 QSGGeometryNode* missingTerrainNode =
nullptr;
268 QSGGeometryNode* flightProfileNode =
nullptr;
269 QSGGeometryNode* terrainCollisionNode =
nullptr;
271 _createGeometry(terrainProfileNode, terrainProfileGeometry, QSGGeometry::DrawLineStrip,
"green");
272 _createGeometry(missingTerrainNode, missingTerrainGeometry, QSGGeometry::DrawLines,
"yellow");
273 _createGeometry(flightProfileNode, flightProfileGeometry, QSGGeometry::DrawLines,
"orange");
274 _createGeometry(terrainCollisionNode, terrainCollisionGeometry, QSGGeometry::DrawLines,
"red");
276 rootNode->appendChildNode(terrainProfileNode);
277 rootNode->appendChildNode(missingTerrainNode);
278 rootNode->appendChildNode(flightProfileNode);
279 rootNode->appendChildNode(terrainCollisionNode);
284 QSGNode* node = rootNode->childAtIndex(0);
285 terrainProfileGeometry =
static_cast<QSGGeometryNode*
>(node)->geometry();
286 terrainProfileGeometry->allocate(cTerrainProfilePoints);
287 node->markDirty(QSGNode::DirtyGeometry);
289 node = rootNode->childAtIndex(1);
290 missingTerrainGeometry =
static_cast<QSGGeometryNode*
>(node)->geometry();
291 missingTerrainGeometry->allocate(cMissingTerrainSegments * 2);
292 node->markDirty(QSGNode::DirtyGeometry);
294 node = rootNode->childAtIndex(2);
295 flightProfileGeometry =
static_cast<QSGGeometryNode*
>(node)->geometry();
296 flightProfileGeometry->allocate(cFlightProfileSegments * 2);
297 node->markDirty(QSGNode::DirtyGeometry);
299 node = rootNode->childAtIndex(3);
300 terrainCollisionGeometry =
static_cast<QSGGeometryNode*
>(node)->geometry();
301 terrainCollisionGeometry->allocate(cTerrainCollisionSegments * 2);
302 node->markDirty(QSGNode::DirtyGeometry);
304 int flightProfileVertexIndex = 0;
305 int terrainProfileVertexIndex = 0;
306 int missingterrainProfileVertexIndex = 0;
307 int terrainCollisionVertexIndex = 0;
308 double currentDistance = 0;
309 QSGGeometry::Point2D* flightProfileVertices = flightProfileGeometry->vertexDataAsPoint2D();
310 QSGGeometry::Point2D* terrainProfileVertices = terrainProfileGeometry->vertexDataAsPoint2D();
311 QSGGeometry::Point2D* missingTerrainVertices = missingTerrainGeometry->vertexDataAsPoint2D();
312 QSGGeometry::Point2D* terrainCollisionVertices = terrainCollisionGeometry->vertexDataAsPoint2D();
315 for (
int viIndex=0; viIndex<_visualItems->
count(); viIndex++) {
320 if (complexItem->flightPathSegments()->count() == 0) {
323 for (
int segmentIndex=0; segmentIndex<complexItem->flightPathSegments()->count(); segmentIndex++) {
326 _addFlightProfileSegment (segment, currentDistance, amslAltRange, flightProfileVertices, flightProfileVertexIndex);
327 _addTerrainProfileSegment (segment, currentDistance, amslAltRange, terrainProfileVertices, terrainProfileVertexIndex);
328 _addMissingTerrainSegment (segment, currentDistance, missingTerrainVertices, missingterrainProfileVertexIndex);
329 _addTerrainCollisionSegment (segment, currentDistance, amslAltRange, terrainCollisionVertices, terrainCollisionVertexIndex);
339 _addFlightProfileSegment (segment, currentDistance, amslAltRange, flightProfileVertices, flightProfileVertexIndex);
340 _addTerrainProfileSegment (segment, currentDistance, amslAltRange, terrainProfileVertices, terrainProfileVertexIndex);
341 _addMissingTerrainSegment (segment, currentDistance, missingTerrainVertices, missingterrainProfileVertexIndex);
342 _addTerrainCollisionSegment (segment, currentDistance, amslAltRange, terrainCollisionVertices, terrainCollisionVertexIndex);
348 setImplicitWidth(_visibleWidth);
349 setWidth(implicitWidth());
351 emit implicitWidthChanged();