void RadialLineOfSightNode::setMapNode( MapNode* mapNode ) { MapNode* oldMapNode = getMapNode(); if ( oldMapNode != mapNode ) { if ( oldMapNode ) { if ( _terrainChangedCallback.valid() ) { oldMapNode->getTerrain()->removeTerrainCallback( _terrainChangedCallback.get() ); } } _mapNode = mapNode; if ( _mapNode.valid() && _terrainChangedCallback.valid() ) { _mapNode->getTerrain()->addTerrainCallback( _terrainChangedCallback.get() ); } compute( getNode() ); } }
int main(int argc, char** argv) { osg::ArgumentParser arguments(&argc,argv); // help? if ( arguments.read("--help") ) return usage(argv[0]); osgViewer::Viewer viewer(arguments); EarthManipulator* em = new EarthManipulator(); viewer.setCameraManipulator( em ); // load an earth file, and support all or our example command-line options // and earth file <external> tags osg::Node* earth = MapNodeHelper().load( arguments, &viewer ); MapNode* mapNode = MapNode::get(earth); if (!mapNode) return usage(argv[0]); // load the model file into the local coordinate frame, which will be // +X=east, +Y=north, +Z=up. osg::Node* model = osgDB::readNodeFile("cessna.osgt.1,-1,1.scale"); if ( !model ) return usage(argv[0]); osg::Group* root = new osg::Group(); root->addChild( earth ); App app; app.srs = mapNode->getMapSRS(); app.geo = new GeoTransform(); app.geo->setTerrain( mapNode->getTerrain() ); app.pat = new osg::PositionAttitudeTransform(); app.pat->addChild( model ); app.geo->addChild( app.pat ); root->addChild( app.geo ); viewer.setSceneData( root ); viewer.getCamera()->setNearFarRatio(0.00002); viewer.getCamera()->setSmallFeatureCullingPixelSize(-1.0f); ui::ControlCanvas::getOrCreate(&viewer)->addControl( makeUI(app) ); app.apply(); em->setTetherNode( app.geo ); osgEarth::Viewpoint vp; vp.setNode( app.geo ); vp.heading()->set( -45.0, Units::DEGREES ); vp.pitch()->set( -20.0, Units::DEGREES ); vp.range()->set( model->getBound().radius()*10.0, Units::METERS ); em->setViewpoint( vp ); return viewer.run(); }
void Dragger::setMapNode( MapNode* mapNode ) { MapNode* oldMapNode = getMapNode(); if ( oldMapNode != mapNode ) { if ( oldMapNode && _autoClampCallback.valid() ) { oldMapNode->getTerrain()->removeTerrainCallback( _autoClampCallback.get() ); } _mapNode = mapNode; if ( _mapNode.valid() && _autoClampCallback.valid() ) { _mapNode->getTerrain()->addTerrainCallback( _autoClampCallback.get() ); } } }