|
osgEarth 2.1.1
|
#include <osg/Notify>#include <osgGA/StateSetManipulator>#include <osgGA/GUIEventHandler>#include <osgViewer/Viewer>#include <osgViewer/ViewerEventHandlers>#include <osgEarth/MapNode>#include <osgEarthUtil/EarthManipulator>#include <osgEarthUtil/AutoClipPlaneHandler>#include <osgEarthUtil/Controls>#include <osgEarth/Utils>#include <osg/ImageStream>#include <osgDB/FileNameUtils>#include <osg/Version>#include <osgEarth/Version>#include <osgEarthUtil/ImageOverlay>
Include dependency graph for osgearth_imageoverlay.cpp:Go to the source code of this file.
Classes | |
| struct | OpacityHandler |
| struct | EnabledHandler |
| struct | EditHandler |
| struct | ChangeImageHandler |
| struct | UpdateLabelCallback |
Functions | |
| osg::Node * | createControlPanel (osgViewer::View *view) |
| int | usage (const std::string &msg) |
| int | main (int argc, char **argv) |
Variables | |
| static Grid * | s_layerBox = NULL |
| osg::Node * createControlPanel | ( | osgViewer::View * | view | ) |
Definition at line 48 of file osgearth_imageoverlay.cpp.
{
ControlCanvas* canvas = ControlCanvas::get( view );
// the outer container:
s_layerBox = new Grid();
s_layerBox->setBackColor(0,0,0,0.5);
s_layerBox->setMargin( 10 );
s_layerBox->setPadding( 10 );
s_layerBox->setChildSpacing( 10 );
s_layerBox->setChildVertAlign( Control::ALIGN_CENTER );
s_layerBox->setAbsorbEvents( true );
s_layerBox->setVertAlign( Control::ALIGN_BOTTOM );
canvas->addControl( s_layerBox );
return canvas;
}
Here is the call graph for this function:
Here is the caller graph for this function:| int main | ( | int | argc, |
| char ** | argv | ||
| ) |
Definition at line 172 of file osgearth_imageoverlay.cpp.
{
osg::ArgumentParser arguments(&argc,argv);
osg::DisplaySettings::instance()->setMinimumNumStencilBits( 8 );
std::vector< std::string > imageFiles;
std::vector< Bounds > imageBounds;
//Read in the image files
std::string filename;
Bounds bounds;
while (arguments.read("--image", filename, bounds.xMin(), bounds.yMin(), bounds.xMax(), bounds.yMax()))
{
imageFiles.push_back( filename );
imageBounds.push_back( bounds );
}
if (imageFiles.empty())
{
imageFiles.push_back("../data/osgearth.gif");
imageBounds.push_back( Bounds(-100, 30, -90, 40) );
}
bool moveVert = arguments.read("--vert");
// load the .earth file from the command line.
osg::Node* earthNode = osgDB::readNodeFiles( arguments );
if (!earthNode)
return usage( "Unable to load earth model." );
osgViewer::Viewer viewer(arguments);
EarthManipulator* manip = new EarthManipulator();
viewer.setCameraManipulator( manip );
osg::Group* root = new osg::Group();
root->addChild( earthNode );
//Create the control panel
root->addChild( createControlPanel(&viewer) );
viewer.setSceneData( root );
osgEarth::MapNode* mapNode = osgEarth::MapNode::findMapNode( earthNode );
if ( mapNode )
{
for (unsigned int i = 0; i < imageFiles.size(); i++)
{
std::string imageFile = imageFiles[i];
//Read the image file and play it if it's a movie
osg::Image* image = osgDB::readImageFile(imageFile);
if (image)
{
osg::ImageStream* is = dynamic_cast<osg::ImageStream*>(image);
if (is)
{
is->play();
}
}
//Create a new ImageOverlay and set it's bounds
//ImageOverlay* overlay = new ImageOverlay(mapNode->getMap()->getProfile()->getSRS()->getEllipsoid(), image);
ImageOverlay* overlay = new ImageOverlay(mapNode);
overlay->setImage( image );
overlay->setBounds(imageBounds[i]);
root->addChild( overlay );
//Create a new ImageOverlayEditor and set it's node mask to 0 to hide it initially
#if OSG_MIN_VERSION_REQUIRED(2,9,6)
osg::Node* editor = new ImageOverlayEditor( overlay, mapNode->getMap()->getProfile()->getSRS()->getEllipsoid(), mapNode );
#else
//Just make an empty group for pre-2.9.6
osg::Node* editor = new osg::Group;
#endif
editor->setNodeMask( 0 );
root->addChild( editor );
// Add an image preview
ImageControl* imageCon = new ImageControl( image );
imageCon->setSize( 64, 64 );
imageCon->setVertAlign( Control::ALIGN_CENTER );
s_layerBox->setControl( 0, i, imageCon );
//Add some controls
CheckBoxControl* enabled = new CheckBoxControl( true );
enabled->addEventHandler( new EnabledHandler(overlay) );
enabled->setVertAlign( Control::ALIGN_CENTER );
s_layerBox->setControl( 1, i, enabled );
//The overlay name
LabelControl* name = new LabelControl( osgDB::getSimpleFileName( imageFile) );
name->setVertAlign( Control::ALIGN_CENTER );
s_layerBox->setControl( 2, i, name );
// an opacity slider
HSliderControl* opacity = new HSliderControl( 0.0f, 1.0f, overlay->getAlpha() );
opacity->setWidth( 125 );
opacity->setHeight( 12 );
opacity->setVertAlign( Control::ALIGN_CENTER );
opacity->addEventHandler( new OpacityHandler(overlay) );
s_layerBox->setControl( 3, i, opacity );
// Add a text label:
LabelControl* edit = new LabelControl( "Edit" );
edit->setVertAlign( Control::ALIGN_CENTER );
edit->addEventHandler(new EditHandler(overlay, &viewer, editor));
s_layerBox->setControl(4, i, edit );
}
}
// osgEarth benefits from pre-compilation of GL objects in the pager. In newer versions of
// OSG, this activates OSG's IncrementalCompileOpeartion in order to avoid frame breaks.
viewer.getDatabasePager()->setDoPreCompile( true );
// add some stock OSG handlers:
viewer.addEventHandler(new osgViewer::StatsHandler());
viewer.addEventHandler(new osgViewer::WindowSizeHandler());
viewer.addEventHandler(new osgViewer::LODScaleHandler());
viewer.addEventHandler(new osgGA::StateSetManipulator(viewer.getCamera()->getOrCreateStateSet()));
viewer.addEventHandler(new osgViewer::HelpHandler(arguments.getApplicationUsage()));
return viewer.run();
}
Here is the call graph for this function:| int usage | ( | const std::string & | msg | ) |
Definition at line 69 of file osgearth_imageoverlay.cpp.
Grid* s_layerBox = NULL [static] |
Definition at line 45 of file osgearth_imageoverlay.cpp.
1.7.3