feat(GeoMap): map item overlays with 3D vehicle marker and flight path ribbon - #14876
Conversation
…h ribbon Map item framework and first consumers for the GeoMap 3D engine: - GeoMapItem: screen-space 2D overlay items with altitude modes (ClampToSurface/RelativeToSurface/Absolute), optional delegate3D scene node with 2D<->3D crossfade (and crossfade3D opt-out for items with no 2D counterpart), teardrop GeoMapPin, shared auto-centering - GeoMapVehicleItem: vehicle marker with paper-airplane 3D model; uses coordinate.altitude (GPS frame) instead of the altitudeAMSL fact, which diverges to baro frame on PX4 - GeoMapFlightPath: vehicle trajectory rendered as a camera-facing ribbon; FlightPathGeometry keeps an incremental vertex buffer (O(1) append/update with partial GPU upload); shaders expand perpendicular to tangent and view direction so vertical climbs stay visible, with depth pull to defeat residual terrain height in 2D mode - TrajectoryPoints: 3D distance gate and east/north/up direction colinearity so purely vertical flight generates trajectory points; flight distance now accumulates through-the-air (3D) distance - GeoScene/GeoMapCamera: recenter solve at the point's rendered height with terrain-following pivot elevation; terrain-following look-at keeps the close-zoom 3D camera above the mesh - Tests: GeoMapItem lifecycle/crossfade, FlightPathGeometry incremental == rebuild equivalence, TrajectoryPoints vertical motion/decimation/3D distance, GeoScene solve round-trip and elevation units
463adca to
e1597f2
Compare
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 47 out of 47 changed files in this pull request and generated no new comments.
Suppressed comments (2)
src/QmlControls/MapPositionTracker.cc:106
- Enabling hard follow with an already-valid vehicle coordinate does not center the map until another coordinate update arrives. The periodic inset evaluator explicitly returns while hard follow is enabled, so switching into PIP/keep-centered mode while the vehicle is stationary can leave the old center indefinitely. Re-evaluate the one-shot and otherwise emit the current coordinate when
keepbecomes true.
_keepVehicleCentered = keep;
emit keepVehicleCenteredChanged();
src/GeoMap/GeoMapPin.qml:30
- The stated clamp does not cover
height < _headRadius: the denominator becomes negative and the ratio can be below -1, soMath.acosreturns NaN and the marker shape disappears. Guard non-positive geometry before evaluating the tangent formula.
readonly property real _tangentAngle: Math.acos(Math.min(1, _headRadius / (height - _headRadius)))
Codecov Report❌ Patch coverage is Additional details and impacted files@@ Coverage Diff @@
## master #14876 +/- ##
==========================================
+ Coverage 25.47% 34.01% +8.54%
==========================================
Files 769 940 +171
Lines 65912 85188 +19276
Branches 30495 39331 +8836
==========================================
+ Hits 16788 28978 +12190
+ Misses 37285 36873 -412
- Partials 11839 19337 +7498
Flags with carried forward coverage won't be shown. Click here to find out more.
... and 630 files with indirect coverage changes Continue to review full report in Codecov by Harness.
🚀 New features to boost your workflow:
|
Map item framework and first consumers for the GeoMap 3D engine.
Map item framework
ClampToGround/Absolute), an optionaldelegate3Dscene node with 2D↔3D crossfade (pluscrossfade3Dopt-out for items with no 2D counterpart), and shared auto-centering viaMapPositionTrackerVehicle marker
PaperPlaneGeometry)coordinate.altitude(GPS frame) instead of thealtitudeAMSLfact, which diverges to baro frame on PX4 — keeps the marker consistent with the trajectory and HOME_POSITIONFlight path ribbon
TrajectoryPointssignals as the 2D trailFlightPathGeometrymaintains an incremental vertex buffer: the per-position hot path (updateLastPoint) is an O(1) partial GPU upload; appends (rare, post-decimation direction changes) re-upload the bufferTrajectoryPoints
Camera/scene fixes
Tests
GeoMapItem lifecycle/crossfade, FlightPathGeometry incremental == rebuild equivalence, TrajectoryPoints vertical motion/decimation/3D distance, GeoScene solve round-trip and elevation units, PaperPlaneGeometry, MapPositionTracker.