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>
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; }
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(); }
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.