1
0
Fork 0

Mathias Fröhlich's code, Curt Olson's comments:

Display the ground intersection point on mouse click (if click not consumed
by the gui or the panel.)  This should eventually get stuffed into the
property tree.
This commit is contained in:
curt 2005-12-12 22:22:28 +00:00
parent bbb8b066eb
commit 7c0cf9dff9

View file

@ -57,6 +57,11 @@
#include "input.hxx"
#include <Scenery/scenery.hxx>
#include <Main/renderer.hxx>
#include <plib/ssg.h>
#include <simgear/math/sg_geodesy.hxx>
SG_USING_STD(ifstream);
SG_USING_STD(string);
SG_USING_STD(vector);
@ -308,6 +313,27 @@ FGInput::doMouseClick (int b, int updown, int x, int y)
return;
else if (fgHandle3DPanelMouseEvent(b, updown, x, y))
return;
else {
// pui and the panel didn't want the click event so compute a
// terrain intersection point corresponding to the mouse click
// and be happy. This should eventually get written into a set
// of properties so that some other [future] subsystems can do
// something useful with the information.
FGScenery* scenery = globals->get_scenery();
sgdVec3 start, dir, hit;
if (FGRenderer::getPickInfo(start, dir, x, y) &&
scenery->get_cart_ground_intersection(start, dir, hit)) {
Point3D geod = sgCartToGeod(Point3D(hit[0], hit[1], hit[2]));
std::cout << "lon = " << geod.lon()*SGD_RADIANS_TO_DEGREES
<< " deg, lat = " << geod.lat()*SGD_RADIANS_TO_DEGREES
<< " deg, elev = " << geod.elev()
<< " m" << std::endl;
} else {
std::cout << "Cannot find intersection point" << std::endl;
}
}
}
// OK, PUI and the panel didn't want the click