void addControls(HSLColorFilter* filter, Container* container, unsigned i) { // the outer container: Grid* s_layerBox = container->addControl(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_TOP ); // Title: s_layerBox->setControl( 0, 0, new LabelControl(Stringify()<<"Layer "<<i, osg::Vec4(1,1,0,1))); // Hue: LabelControl* hLabel = new LabelControl( "Hue" ); hLabel->setVertAlign( Control::ALIGN_CENTER ); s_layerBox->setControl( 0, 1, hLabel ); HSliderControl* hAdjust = new HSliderControl( -1.0f, 1.0f, 0.0f, new SetHSL(filter,0) ); hAdjust->setWidth( 125 ); hAdjust->setHeight( 12 ); hAdjust->setVertAlign( Control::ALIGN_CENTER ); s_layerBox->setControl( 1, 1, hAdjust ); s_layerBox->setControl( 2, 1, new LabelControl(hAdjust) ); // Saturation: LabelControl* sLabel = new LabelControl( "Saturation" ); sLabel->setVertAlign( Control::ALIGN_CENTER ); s_layerBox->setControl( 0, 2, sLabel ); HSliderControl* sAdjust = new HSliderControl( -1.0f, 1.0f, 0.0f, new SetHSL(filter,1) ); sAdjust->setWidth( 125 ); sAdjust->setHeight( 12 ); sAdjust->setVertAlign( Control::ALIGN_CENTER ); s_layerBox->setControl( 1, 2, sAdjust ); s_layerBox->setControl( 2, 2, new LabelControl(sAdjust) ); // Lightness LabelControl* lLabel = new LabelControl( "Lightness" ); lLabel->setVertAlign( Control::ALIGN_CENTER ); s_layerBox->setControl( 0, 3, lLabel ); HSliderControl* lAdjust = new HSliderControl( -1.0f, 1.0f, 0.0f, new SetHSL(filter,2) ); lAdjust->setWidth( 125 ); lAdjust->setHeight( 12 ); lAdjust->setVertAlign( Control::ALIGN_CENTER ); s_layerBox->setControl( 1, 3, lAdjust ); s_layerBox->setControl( 2, 3, new LabelControl(lAdjust) ); // Reset button LabelControl* resetButton = new LabelControl( "Reset" ); resetButton->setBackColor( osg::Vec4(0.5,0.5,0.5,1) ); resetButton->setActiveColor( osg::Vec4(0.5,0.5,1,1) ); resetButton->addEventHandler( new ResetHSL(hAdjust, sAdjust, lAdjust) ); s_layerBox->setControl( 1, 4, resetButton ); }
void addControls(RGBColorFilter* filter, Container* container, unsigned i) { // the outer container: Grid* s_layerBox = container->addControl(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_TOP ); // Title: s_layerBox->setControl( 0, 0, new LabelControl(Stringify()<<"Layer "<<i, Color::Yellow) ); // Red: LabelControl* rLabel = new LabelControl( "Red" ); rLabel->setVertAlign( Control::ALIGN_CENTER ); s_layerBox->setControl( 0, 1, rLabel ); HSliderControl* rAdjust = new HSliderControl( -1.0f, 1.0f, 0.0f, new RGB::Set(filter,0) ); rAdjust->setWidth( 125 ); rAdjust->setHeight( 12 ); rAdjust->setVertAlign( Control::ALIGN_CENTER ); s_layerBox->setControl( 1, 1, rAdjust ); s_layerBox->setControl( 2, 1, new LabelControl(rAdjust) ); // Green: LabelControl* gLabel = new LabelControl( "Green" ); gLabel->setVertAlign( Control::ALIGN_CENTER ); s_layerBox->setControl( 0, 2, gLabel ); HSliderControl* gAdjust = new HSliderControl( -1.0f, 1.0f, 0.0f, new RGB::Set(filter,1) ); gAdjust->setWidth( 125 ); gAdjust->setHeight( 12 ); gAdjust->setVertAlign( Control::ALIGN_CENTER ); s_layerBox->setControl( 1, 2, gAdjust ); s_layerBox->setControl( 2, 2, new LabelControl(gAdjust) ); // Blue LabelControl* bLabel = new LabelControl( "Blue" ); bLabel->setVertAlign( Control::ALIGN_CENTER ); s_layerBox->setControl( 0, 3, bLabel ); HSliderControl* bAdjust = new HSliderControl( -1.0f, 1.0f, 0.0f, new RGB::Set(filter,2) ); bAdjust->setWidth( 125 ); bAdjust->setHeight( 12 ); bAdjust->setVertAlign( Control::ALIGN_CENTER ); s_layerBox->setControl( 1, 3, bAdjust ); s_layerBox->setControl( 2, 3, new LabelControl(bAdjust) ); // Reset button LabelControl* resetButton = new LabelControl( "Reset" ); resetButton->setBackColor( Color::Gray ); resetButton->setActiveColor( Color::Blue ); resetButton->addEventHandler( new Reset(rAdjust, gAdjust, bAdjust) ); s_layerBox->setControl( 1, 4, resetButton ); }
void addControls(GammaColorFilter* filter, Container* container, unsigned i) { // the outer container: Grid* s_layerBox = container->addControl(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_TOP ); // Title: s_layerBox->setControl( 0, 0, new LabelControl(Stringify()<<"Layer "<<i, Color::Yellow) ); // Gamma: LabelControl* gLabel = new LabelControl( "Gamma" ); gLabel->setVertAlign( Control::ALIGN_CENTER ); s_layerBox->setControl( 0, 1, gLabel ); HSliderControl* gAdjust = new HSliderControl( 0.1f, 3.0f, 1.0f, new GAMMA::Set(filter) ); gAdjust->setWidth( 125 ); gAdjust->setHeight( 12 ); gAdjust->setVertAlign( Control::ALIGN_CENTER ); s_layerBox->setControl( 1, 1, gAdjust ); s_layerBox->setControl( 2, 1, new LabelControl(gAdjust) ); // Reset button LabelControl* resetButton = new LabelControl( "Reset" ); resetButton->setBackColor( Color::Gray ); resetButton->setActiveColor( Color::Blue ); resetButton->addEventHandler( new Reset(gAdjust) ); s_layerBox->setControl( 1, 3, resetButton ); }
void addControls(BrightnessContrastColorFilter* filter, Container* container, unsigned i) { // the outer container: Grid* s_layerBox = container->addControl(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_TOP ); // Title: s_layerBox->setControl( 0, 0, new LabelControl(Stringify()<<"Layer "<<i, Color::Yellow) ); // Brightness: LabelControl* bLabel = new LabelControl( "Brightness" ); bLabel->setVertAlign( Control::ALIGN_CENTER ); s_layerBox->setControl( 0, 1, bLabel ); HSliderControl* bAdjust = new HSliderControl( 0.0f, 5.0f, 1.0f, new BC::Set(filter,0) ); bAdjust->setWidth( 125 ); bAdjust->setHeight( 12 ); bAdjust->setVertAlign( Control::ALIGN_CENTER ); s_layerBox->setControl( 1, 1, bAdjust ); s_layerBox->setControl( 2, 1, new LabelControl(bAdjust) ); // Contrast: LabelControl* cLabel = new LabelControl( "Contrast" ); cLabel->setVertAlign( Control::ALIGN_CENTER ); s_layerBox->setControl( 0, 2, cLabel ); HSliderControl* cAdjust = new HSliderControl( 0.0f, 5.0f, 1.0f, new BC::Set(filter,1) ); cAdjust->setWidth( 125 ); cAdjust->setHeight( 12 ); cAdjust->setVertAlign( Control::ALIGN_CENTER ); s_layerBox->setControl( 1, 2, cAdjust ); s_layerBox->setControl( 2, 2, new LabelControl(cAdjust) ); // Reset button LabelControl* resetButton = new LabelControl( "Reset" ); resetButton->setBackColor( Color::Gray ); resetButton->setActiveColor( Color::Blue ); resetButton->addEventHandler( new Reset(bAdjust, cAdjust) ); s_layerBox->setControl( 1, 3, resetButton ); }
int main(int argc, char** argv) { 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); #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(); }
void addControls(CMYKColorFilter* filter, Container* container, unsigned i) { // the outer container: Grid* s_layerBox = container->addControl(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_TOP ); // Title: s_layerBox->setControl( 0, 0, new LabelControl(Stringify()<<"Layer "<<i, Color::Yellow) ); // Cyan: LabelControl* cLabel = new LabelControl( "Cyan" ); cLabel->setVertAlign( Control::ALIGN_CENTER ); s_layerBox->setControl( 0, 1, cLabel ); HSliderControl* cAdjust = new HSliderControl( -1.0f, 1.0f, 0.0f, new CMYK::Set(filter,0) ); cAdjust->setWidth( 125 ); cAdjust->setHeight( 12 ); cAdjust->setVertAlign( Control::ALIGN_CENTER ); s_layerBox->setControl( 1, 1, cAdjust ); s_layerBox->setControl( 2, 1, new LabelControl(cAdjust) ); // Magenta: LabelControl* mLabel = new LabelControl( "Magenta" ); mLabel->setVertAlign( Control::ALIGN_CENTER ); s_layerBox->setControl( 0, 2, mLabel ); HSliderControl* mAdjust = new HSliderControl( -1.0f, 1.0f, 0.0f, new CMYK::Set(filter,1) ); mAdjust->setWidth( 125 ); mAdjust->setHeight( 12 ); mAdjust->setVertAlign( Control::ALIGN_CENTER ); s_layerBox->setControl( 1, 2, mAdjust ); s_layerBox->setControl( 2, 2, new LabelControl(mAdjust) ); // Yellow LabelControl* yLabel = new LabelControl( "Yellow" ); yLabel->setVertAlign( Control::ALIGN_CENTER ); s_layerBox->setControl( 0, 3, yLabel ); HSliderControl* yAdjust = new HSliderControl( -1.0f, 1.0f, 0.0f, new CMYK::Set(filter,2) ); yAdjust->setWidth( 125 ); yAdjust->setHeight( 12 ); yAdjust->setVertAlign( Control::ALIGN_CENTER ); s_layerBox->setControl( 1, 3, yAdjust ); s_layerBox->setControl( 2, 3, new LabelControl(yAdjust) ); // Black LabelControl* kLabel = new LabelControl( "Black" ); kLabel->setVertAlign( Control::ALIGN_CENTER ); s_layerBox->setControl( 0, 4, kLabel ); HSliderControl* kAdjust = new HSliderControl( -1.0f, 1.0f, 0.0f, new CMYK::Set(filter,3) ); kAdjust->setWidth( 125 ); kAdjust->setHeight( 12 ); kAdjust->setVertAlign( Control::ALIGN_CENTER ); s_layerBox->setControl( 1, 4, kAdjust ); s_layerBox->setControl( 2, 4, new LabelControl(kAdjust) ); // Reset button LabelControl* resetButton = new LabelControl( "Reset" ); resetButton->setBackColor( Color::Gray ); resetButton->setActiveColor( Color::Blue ); resetButton->addEventHandler( new Reset(cAdjust, mAdjust, yAdjust, kAdjust) ); s_layerBox->setControl( 1, 5, resetButton ); }