]> git.mxchange.org Git - flightgear.git/commitdiff
Mathias Fröhlich's code, Curt Olson's comments:
authorcurt <curt>
Mon, 12 Dec 2005 22:22:28 +0000 (22:22 +0000)
committercurt <curt>
Mon, 12 Dec 2005 22:22:28 +0000 (22:22 +0000)
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.

src/Input/input.cxx

index c429389992870be33c62ac9f3d38eb0f105416d7..fa5552c883b59f74d1a075d6acefd79380cd1295 100644 (file)
 
 #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