3232#include < QStringList>
3333#include < QVariant>
3434
35- #include < osgViewer/Viewer >
35+ #include < osg/DisplaySettings >
3636
3737// constructor
3838QgsGlobePluginDialog::QgsGlobePluginDialog ( QWidget* parent, Qt::WFlags fl )
3939 : QDialog( parent, fl )
4040{
4141 setupUi ( this );
42- stereoMode = settings. value ( " /Plugin-Globe/stereoMode " , " OFF " ). toString ();
43- comboStereoMode-> setCurrentIndex ( comboStereoMode-> findText ( stereoMode ) );
44- // showMessageBox("constructor " + stereoMode);
42+ getStereoConfig (); // default values from OSG
43+ loadStereoConfig ( );
44+ setStereoConfig (); // overwrite with values from QSettings
4545}
4646
4747// destructor
@@ -72,6 +72,8 @@ bool QgsGlobePluginDialog::globeRunning()
7272
7373void QgsGlobePluginDialog::on_buttonBox_accepted ()
7474{
75+ setStereoConfig ();
76+ saveStereoConfig ();
7577 /*
7678 *
7779 // Validate input settings
@@ -170,7 +172,6 @@ void QgsGlobePluginDialog::on_buttonBox_rejected()
170172
171173void QgsGlobePluginDialog::on_comboStereoMode_currentIndexChanged ( QString mode )
172174{
173- stereoMode = mode;
174175 // showMessageBox("index_changed " + stereoMode);
175176}
176177
@@ -180,3 +181,70 @@ void QgsGlobePluginDialog::showMessageBox( QString text )
180181 msgBox.setText (text);
181182 msgBox.exec ();
182183}
184+
185+ void QgsGlobePluginDialog::getStereoConfig ()
186+ {
187+ // stereoMode ignored
188+
189+ screenDistance->setValue ( osg::DisplaySettings::instance ()->getScreenDistance () );
190+ }
191+
192+ void QgsGlobePluginDialog::setStereoConfig ()
193+ {
194+ // http://www.openscenegraph.org/projects/osg/wiki/Support/UserGuides/StereoConfig
195+ // http://www.openscenegraph.org/documentation/OpenSceneGraphReferenceDocs/a00181.html
196+
197+ QString stereoMode = comboStereoMode->currentText ();
198+ if (" OFF" == stereoMode)
199+ {
200+ osg::DisplaySettings::instance ()->setStereo ( false );
201+ }
202+ else
203+ {
204+ osg::DisplaySettings::instance ()->setStereo ( true );
205+
206+ if (" ANAGLYPHIC" == stereoMode)
207+ {
208+ osg::DisplaySettings::instance ()->setStereoMode ( osg::DisplaySettings::ANAGLYPHIC );
209+ }
210+ else if (" VERTICAL_SPLIT" == stereoMode)
211+ {
212+ osg::DisplaySettings::instance ()->setStereoMode ( osg::DisplaySettings::VERTICAL_SPLIT );
213+ }
214+ else if (" HORIZONTAL_SPLIT" == stereoMode)
215+ {
216+ osg::DisplaySettings::instance ()->setStereoMode ( osg::DisplaySettings::HORIZONTAL_SPLIT );
217+ }
218+ else if (" QUAD_BUFFER" == stereoMode)
219+ {
220+ osg::DisplaySettings::instance ()->setStereoMode ( osg::DisplaySettings::QUAD_BUFFER );
221+ }
222+ else
223+ {
224+ // should never get here
225+ QMessageBox msgBox;
226+ msgBox.setText (" This stereo mode has not been implemented yet. Defaulting to ANAGLYPHIC" );
227+ msgBox.exec ();
228+ }
229+ }
230+
231+ osg::DisplaySettings::instance ()->setScreenDistance ( screenDistance->value () );
232+ }
233+
234+ void QgsGlobePluginDialog::loadStereoConfig ()
235+ {
236+ if ( settings.contains ( " /Plugin-Globe/stereoMode" ) )
237+ {
238+ comboStereoMode->setCurrentIndex ( comboStereoMode->findText ( settings.value ( " /Plugin-Globe/stereoMode" ).toString () ) );
239+ }
240+ if ( settings.contains ( " /Plugin-Globe/screenDistance" ) )
241+ {
242+ screenDistance->setValue ( settings.value ( " /Plugin-Globe/screenDistance" ).toDouble () );
243+ }
244+ }
245+
246+ void QgsGlobePluginDialog::saveStereoConfig ()
247+ {
248+ settings.setValue ( " /Plugin-Globe/stereoMode" , comboStereoMode->currentText () );
249+ settings.setValue ( " /Plugin-Globe/screenDistance" , screenDistance->value () );
250+ }
0 commit comments