@@ -75,6 +75,7 @@ GlobePlugin::GlobePlugin( QgisInterface* theQgisInterface )
7575 , mQActionPointer( NULL )
7676 , mQActionSettingsPointer( NULL )
7777 , mOsgViewer( 0 )
78+ , mViewerWidget( 0 )
7879 , mQgisMapLayer( 0 )
7980 , mTileSource( 0 )
8081 , mElevationManager( NULL )
@@ -215,81 +216,88 @@ void GlobePlugin::initGui()
215216
216217void GlobePlugin::run ()
217218{
219+ if ( mViewerWidget == 0 )
220+ {
218221#ifdef QGISDEBUG
219- if ( !getenv ( " OSGNOTIFYLEVEL" ) ) osgEarth::setNotifyLevel ( osg::DEBUG_INFO );
222+ if ( !getenv ( " OSGNOTIFYLEVEL" ) ) osgEarth::setNotifyLevel ( osg::DEBUG_INFO );
220223#endif
221224
222- if ( mOsgViewer == 0 ) mOsgViewer = new osgViewer::Viewer ();
225+ mOsgViewer = new osgViewer::Viewer ();
223226
224- // install the programmable manipulator.
225- osgEarth::Util::EarthManipulator* manip = new osgEarth::Util::EarthManipulator ();
226- mOsgViewer ->setCameraManipulator ( manip );
227+ // install the programmable manipulator.
228+ osgEarth::Util::EarthManipulator* manip = new osgEarth::Util::EarthManipulator ();
229+ mOsgViewer ->setCameraManipulator ( manip );
227230
228- mIsGlobeRunning = true ;
229- setupProxy ();
231+ mIsGlobeRunning = true ;
232+ setupProxy ();
230233
231- if ( getenv ( " MAPXML" ) )
232- {
233- char * mapxml = getenv ( " MAPXML" );
234- QgsDebugMsg ( mapxml );
235- osg::Node* node = osgDB::readNodeFile ( mapxml );
236- if ( !node )
234+ if ( getenv ( " MAPXML" ) )
237235 {
238- QgsDebugMsg ( " Failed to load earth file " );
239- return ;
236+ char * mapxml = getenv ( " MAPXML" );
237+ QgsDebugMsg ( mapxml );
238+ osg::Node* node = osgDB::readNodeFile ( mapxml );
239+ if ( !node )
240+ {
241+ QgsDebugMsg ( " Failed to load earth file " );
242+ return ;
243+ }
244+ mMapNode = MapNode::findMapNode ( node );
245+ mRootNode = new osg::Group ();
246+ mRootNode ->addChild ( node );
247+ }
248+ else
249+ {
250+ setupMap ();
240251 }
241- mMapNode = MapNode::findMapNode ( node );
242- mRootNode = new osg::Group ();
243- mRootNode ->addChild ( node );
244- }
245- else
246- {
247- setupMap ();
248- }
249252
250- // create a surface to house the controls
251- mControlCanvas = ControlCanvas::get ( mOsgViewer );
252- mRootNode ->addChild ( mControlCanvas );
253+ // create a surface to house the controls
254+ mControlCanvas = ControlCanvas::get ( mOsgViewer );
255+ mRootNode ->addChild ( mControlCanvas );
253256
254- mOsgViewer ->setSceneData ( mRootNode );
257+ mOsgViewer ->setSceneData ( mRootNode );
255258
256- mOsgViewer ->setThreadingModel ( osgViewer::Viewer::SingleThreaded );
259+ mOsgViewer ->setThreadingModel ( osgViewer::Viewer::SingleThreaded );
257260
258- mOsgViewer ->addEventHandler ( new osgViewer::StatsHandler () );
259- mOsgViewer ->addEventHandler ( new osgViewer::WindowSizeHandler () );
260- mOsgViewer ->addEventHandler ( new osgViewer::ThreadingHandler () );
261- mOsgViewer ->addEventHandler ( new osgViewer::LODScaleHandler () );
262- mOsgViewer ->addEventHandler ( new osgGA::StateSetManipulator ( mOsgViewer ->getCamera ()->getOrCreateStateSet () ) );
263- // add a handler that will automatically calculate good clipping planes
264- // mOsgViewer->addEventHandler( new osgEarth::Util::AutoClipPlaneHandler() );
265- // osgEarth benefits from pre-compilation of GL objects in the pager. In newer versions of
266- // OSG, this activates OSG's IncrementalCompileOpeartion in order to avoid frame breaks.
267- mOsgViewer ->getDatabasePager ()->setDoPreCompile ( true );
261+ mOsgViewer ->addEventHandler ( new osgViewer::StatsHandler () );
262+ mOsgViewer ->addEventHandler ( new osgViewer::WindowSizeHandler () );
263+ mOsgViewer ->addEventHandler ( new osgViewer::ThreadingHandler () );
264+ mOsgViewer ->addEventHandler ( new osgViewer::LODScaleHandler () );
265+ mOsgViewer ->addEventHandler ( new osgGA::StateSetManipulator ( mOsgViewer ->getCamera ()->getOrCreateStateSet () ) );
266+ // add a handler that will automatically calculate good clipping planes
267+ // mOsgViewer->addEventHandler( new osgEarth::Util::AutoClipPlaneHandler() );
268+ // osgEarth benefits from pre-compilation of GL objects in the pager. In newer versions of
269+ // OSG, this activates OSG's IncrementalCompileOpeartion in order to avoid frame breaks.
270+ mOsgViewer ->getDatabasePager ()->setDoPreCompile ( true );
268271
269- mSettingsDialog ->setViewer ( mOsgViewer );
272+ mSettingsDialog ->setViewer ( mOsgViewer );
270273
271274#ifdef GLOBE_OSG_STANDALONE_VIEWER
272- mOsgViewer ->run ();
275+ mOsgViewer ->run ();
273276#endif
274277
275- QWidget* viewerWidget = new osgEarth::QtGui::ViewerWidget ( mOsgViewer );
276- viewerWidget ->setGeometry ( 100 , 100 , 1024 , 800 );
277- viewerWidget ->show ();
278+ mViewerWidget = new osgEarth::QtGui::ViewerWidget ( mOsgViewer );
279+ mViewerWidget ->setGeometry ( 100 , 100 , 1024 , 800 );
280+ mViewerWidget ->show ();
278281
279- // Set a home viewpoint
280- manip->setHomeViewpoint (
281- osgEarth::Util::Viewpoint ( osg::Vec3d ( -90 , 0 , 0 ), 0.0 , -90.0 , 4e7 ),
282- 1.0 );
282+ // Set a home viewpoint
283+ manip->setHomeViewpoint (
284+ osgEarth::Util::Viewpoint ( osg::Vec3d ( -90 , 0 , 0 ), 0.0 , -90.0 , 4e7 ),
285+ 1.0 );
283286
284- setupControls ();
287+ setupControls ();
285288
286- // add our handlers
287- mOsgViewer ->addEventHandler ( new FlyToExtentHandler ( this ) );
288- mOsgViewer ->addEventHandler ( new KeyboardControlHandler ( manip, mQGisIface ) );
289+ // add our handlers
290+ mOsgViewer ->addEventHandler ( new FlyToExtentHandler ( this ) );
291+ mOsgViewer ->addEventHandler ( new KeyboardControlHandler ( manip, mQGisIface ) );
289292
290- mOsgViewer ->addEventHandler ( new QueryCoordinatesHandler ( this , mElevationManager ,
291- mMapNode ->getMap ()->getProfile ()->getSRS () )
292- );
293+ mOsgViewer ->addEventHandler ( new QueryCoordinatesHandler ( this , mElevationManager ,
294+ mMapNode ->getMap ()->getProfile ()->getSRS () )
295+ );
296+ }
297+ else
298+ {
299+ mViewerWidget ->show ();
300+ }
293301}
294302
295303void GlobePlugin::settings ()
@@ -878,7 +886,8 @@ bool NavigationControl::handle( const osgGA::GUIEventAdapter& ea, osgGA::GUIActi
878886 _mouse_down_event = NULL ;
879887 break ;
880888 default :
881- /* ignore */ ;
889+ /* ignore */
890+ ;
882891 }
883892 if ( _mouse_down_event )
884893 {
0 commit comments