Ignore:
Timestamp:
Apr 7, 2014 12:08:00 AM (10 years ago)
Author:
ldelgass
Message:

Need to invert Y mouse coordinate input to mapMouseCoords if coords increase
top to bottom (i.e. for X11). osgGA::GUIEventAdapter events seem to have the
Y coordinate already inverted, so we don't need to invert coordinates when
inserting into the EventQueue?.

Location:
trunk/packages/vizservers/geovis
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/packages/vizservers/geovis/Renderer.cpp

    r4320 r4322  
    671671}
    672672
    673 bool Renderer::mapMouseCoords(float mouseX, float mouseY, osgEarth::GeoPoint& map)
     673/**
     674 * \brief Map screen mouse coordinates to map coordinates
     675 *
     676 * This method assumes that mouse Y coordinates are 0 at the top
     677 * of the screen and increase going down if invertY is set, and
     678 * 0 at the bottom and increase going up otherwise.
     679 */
     680bool Renderer::mapMouseCoords(float mouseX, float mouseY,
     681                              osgEarth::GeoPoint& map, bool invertY)
    674682{
    675683    if (!_mapNode.valid() || _mapNode->getTerrain() == NULL) {
     
    680688        ERROR("No Viewer");
    681689        return false;
     690    }
     691    if (invertY) {
     692        mouseY = ((float)_windowHeight - mouseY);
    682693    }
    683694    osg::Vec3d world;
     
    12031214        }
    12041215#else
    1205         if (_coordsCallback.valid()) {
    1206             osgEarth::GeoPoint map;
    1207             if (mapMouseCoords(x, y, map)) {
    1208                 _coordsCallback->set(map, _viewer.get(), _mapNode);
     1216        if (_viewer.valid() && _coordsCallback.valid()) {
     1217            osgEarth::GeoPoint mapPt;
     1218            if (mapMouseCoords((float)x, (float)y, mapPt)) {
     1219                _coordsCallback->set(mapPt, _viewer->asView(), _mapNode);
    12091220            } else {
    1210                 _coordsCallback->reset(_viewer.get(), _mapNode);
     1221                _coordsCallback->reset(_viewer->asView(), _mapNode);
    12111222            }
     1223            _needsRedraw = true;
    12121224        }
    12131225#endif
  • trunk/packages/vizservers/geovis/Renderer.h

    r4320 r4322  
    366366    osg::Image *getRenderedFrame();
    367367
    368     bool mapMouseCoords(float mouseX, float mouseY, osgEarth::GeoPoint &pt);
     368    bool mapMouseCoords(float mouseX, float mouseY,
     369                        osgEarth::GeoPoint &pt, bool invertY = true);
    369370
    370371    bool getMousePoint(double *x, double *y, double *z)
Note: See TracChangeset for help on using the changeset viewer.