|
osgEarth 2.1.1
|
Collaboration diagram for QueryElevationHandler:Public Member Functions | |
| QueryElevationHandler (const Map *map, ObjectLocator *flagLocator) | |
| void | update (float x, float y, osgViewer::View *view) |
| bool | handle (const osgGA::GUIEventAdapter &ea, osgGA::GUIActionAdapter &aa) |
Public Attributes | |
| const Map * | _map |
| bool | _mouseDown |
| ElevationQuery | _query |
| ObjectLocator * | _flagLocator |
Definition at line 73 of file osgearth_elevation.cpp.
| QueryElevationHandler::QueryElevationHandler | ( | const Map * | map, |
| ObjectLocator * | flagLocator | ||
| ) | [inline] |
Definition at line 75 of file osgearth_elevation.cpp.
: _map(map), _mouseDown( false ), _flagLocator(flagLocator), _query(map) { _query.setMaxTilesToCache(10); }
| bool QueryElevationHandler::handle | ( | const osgGA::GUIEventAdapter & | ea, |
| osgGA::GUIActionAdapter & | aa | ||
| ) | [inline] |
Definition at line 139 of file osgearth_elevation.cpp.
{
if ( ea.getEventType() == osgGA::GUIEventAdapter::MOVE )
{
osgViewer::View* view = static_cast<osgViewer::View*>(aa.asView());
update( ea.getX(), ea.getY(), view );
}
return false;
}
| void QueryElevationHandler::update | ( | float | x, |
| float | y, | ||
| osgViewer::View * | view | ||
| ) | [inline] |
Definition at line 84 of file osgearth_elevation.cpp.
{
osgUtil::LineSegmentIntersector::Intersections results;
if ( view->computeIntersections( x, y, results, 0x01 ) )
{
// find the first hit under the mouse:
osgUtil::LineSegmentIntersector::Intersection first = *(results.begin());
osg::Vec3d point = first.getWorldIntersectPoint();
osg::Vec3d lla;
// transform it to map coordinates:
_map->worldPointToMapPoint(point, lla);
// find the elevation at that map point:
osg::Matrixd out_mat;
double query_resolution = 0.1; // 1/10th of a degree
double out_elevation = 0.0;
double out_resolution = 0.0;
bool ok = _query.getElevation(
lla,
_map->getProfile()->getSRS(),
out_elevation,
query_resolution,
&out_resolution );
if ( ok )
{
_flagLocator->setPosition( osg::Vec3d(lla.x(), lla.y(), out_elevation) );
s_flagNode->setNodeMask( ~0 );
std::stringstream buf;
buf << std::fixed << std::setprecision(2)
<< "Pos: " << lla.x() << ", " << lla.y() << std::endl
<< "Elv: " << out_elevation << "m" << std::endl
<< "X: " << point.x() << std::endl
<< "Y: " << point.y() << std::endl
<< "Z: " << point.z();
s_flagText->setText( buf.str() );
OE_NOTICE << buf.str() << std::endl;
}
else
{
OE_NOTICE
<< "getElevation FAILED! at (" << point.x() << ", " << point.y() << ")" << std::endl;
}
}
else
{
s_flagNode->setNodeMask(0);
}
}
Definition at line 153 of file osgearth_elevation.cpp.
| const Map* QueryElevationHandler::_map |
Definition at line 150 of file osgearth_elevation.cpp.
Definition at line 151 of file osgearth_elevation.cpp.
Definition at line 152 of file osgearth_elevation.cpp.
1.7.3