4 #include "terrainprobe.h"
6 #include <XPLM/XPLMGraphics.h>
20 double metersAltitude)
const
22 static const std::string callsign =
"myself";
24 return getElevation(degreesLatitude, degreesLongitude, metersAltitude, callsign, unused);
28 double metersAltitude,
const std::string &callsign,
29 bool &o_isWater)
const
32 XPLMWorldToLocal(degreesLatitude, degreesLongitude, metersAltitude, &x, &y, &z);
34 XPLMProbeInfo_t probe;
35 probe.structSize =
sizeof(probe);
37 XPLMProbeTerrainXYZ(m_ref,
static_cast<float>(x),
static_cast<float>(y),
static_cast<float>(z), &probe);
38 if (result != xplm_ProbeHitTerrain)
40 if (m_logMessageCount < 100)
44 if (result == xplm_ProbeError) { error =
"probe error"; }
45 else if (result == xplm_ProbeMissed) { error =
"probe missed"; }
46 else { error =
"unknown probe result"; }
47 WARNING_LOG(callsign +
" " + error +
" at " + std::to_string(degreesLatitude) +
", " +
48 std::to_string(degreesLongitude) +
", " + std::to_string(metersAltitude));
52 return { { std::numeric_limits<double>::quiet_NaN(), degreesLatitude, degreesLongitude } };
54 XPLMLocalToWorld(probe.locationX, probe.locationY, probe.locationZ, °reesLatitude, °reesLongitude,
57 if (probe.is_wet && m_logMessageCount < 100)
60 DEBUG_LOG(callsign +
" probe hit water at " + std::to_string(degreesLatitude) +
", " +
61 std::to_string(degreesLongitude) +
", " + std::to_string(metersAltitude));
63 if (std::isnan(metersAltitude) && m_logMessageCount < 100)
66 DEBUG_LOG(callsign +
" probe returned NaN at " + std::to_string(degreesLatitude) +
", " +
67 std::to_string(degreesLongitude) +
", " + std::to_string(metersAltitude));
69 o_isWater = probe.is_wet;
70 return { { metersAltitude, degreesLatitude, degreesLongitude } };
std::array< double, 3 > getElevation(double degreesLatitude, double degreesLongitude, double metersAltitude) const
Get the elevation in meters at the given point in OpenGL space.
~CTerrainProbe()
Destructor;.
CTerrainProbe()
Constructor.
Plugin loaded by X-Plane which publishes a DBus service.
#define DEBUG_LOG(msg)
Logger convenience macros.
#define WARNING_LOG(msg)
Logger convenience macros.