Skip to content

Commit cb65937

Browse files
committed
Handle screen distance stereo setting
1 parent 0f85a6c commit cb65937

File tree

6 files changed

+86
-64
lines changed

6 files changed

+86
-64
lines changed

src/plugins/globe/globe_plugin.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -164,7 +164,7 @@ void GlobePlugin::settings()
164164
{
165165
if (mSettingsDialog.exec())
166166
{
167-
viewer.QgsGLWidgetAdapter::setStereoMode(mSettingsDialog.stereoMode);
167+
//viewer stereo settings set by mSettingsDialog and stored in QSettings
168168
}
169169
}
170170

src/plugins/globe/globe_plugin_dialog.cpp

Lines changed: 73 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -32,16 +32,16 @@
3232
#include <QStringList>
3333
#include <QVariant>
3434

35-
#include <osgViewer/Viewer>
35+
#include <osg/DisplaySettings>
3636

3737
//constructor
3838
QgsGlobePluginDialog::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

7373
void 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

171173
void 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+
}

src/plugins/globe/globe_plugin_dialog.h

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,16 +30,22 @@ class QgsGlobePluginDialog:public QDialog, private Ui::QgsGlobePluginDialogGuiBa
3030
public:
3131
QgsGlobePluginDialog( QWidget * parent = 0, Qt::WFlags fl = 0 );
3232
~QgsGlobePluginDialog();
33-
QString stereoMode;
3433

3534
private:
3635
QString earthFile;
3736
QString openFile();
3837
QSettings settings;
39-
void setStereoMode();
4038
void restartGlobe();
4139
bool globeRunning();
4240
void showMessageBox( QString text);
41+
//! Init dialog from osg/DisplaySettings
42+
void getStereoConfig();
43+
//! Set osg/DisplaySettings
44+
void setStereoConfig();
45+
//! Init dialog from settings
46+
void loadStereoConfig();
47+
//! Save settings
48+
void saveStereoConfig();
4349

4450
private slots:
4551
void on_buttonBox_accepted();

src/plugins/globe/globe_plugin_dialog_guibase.ui

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@
3434
<item>
3535
<widget class="QTabWidget" name="tabWidget">
3636
<property name="currentIndex">
37-
<number>1</number>
37+
<number>0</number>
3838
</property>
3939
<widget class="QWidget" name="elevation">
4040
<attribute name="title">
@@ -212,15 +212,15 @@
212212
<item row="1" column="0">
213213
<widget class="QLabel" name="label">
214214
<property name="text">
215-
<string>SCREEN_DISTANCE</string>
215+
<string>Screen distance</string>
216216
</property>
217217
<property name="buddy">
218-
<cstring>xxxx</cstring>
218+
<cstring>screenDistance</cstring>
219219
</property>
220220
</widget>
221221
</item>
222222
<item row="1" column="2">
223-
<widget class="QDoubleSpinBox" name="xxxx"/>
223+
<widget class="QDoubleSpinBox" name="screenDistance"/>
224224
</item>
225225
<item row="2" column="0">
226226
<widget class="QLabel" name="label_3">

src/plugins/globe/qgsosgviewer.cpp

Lines changed: 0 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,6 @@ QgsGLWidgetAdapter::QgsGLWidgetAdapter( QWidget * parent, const char * name, con
2828
QGLWidget(parent, shareWidget, f)
2929
{
3030
_gw = new osgViewer::GraphicsWindowEmbedded(0,0,width(),height());
31-
setStereoMode();
3231
setFocusPolicy(Qt::ClickFocus);
3332
setMouseTracking ( true );
3433
}
@@ -86,46 +85,3 @@ void QgsGLWidgetAdapter::wheelEvent(QWheelEvent *event)
8685
{
8786
_gw->getEventQueue()->mouseScroll((event->delta()>0) ? osgGA::GUIEventAdapter::SCROLL_DOWN : osgGA::GUIEventAdapter::SCROLL_UP);
8887
}
89-
90-
void QgsGLWidgetAdapter::setStereoMode()
91-
{
92-
setStereoMode(settings.value( "/Plugin-Globe/stereoMode", "OFF" ).toString());
93-
}
94-
95-
void QgsGLWidgetAdapter::setStereoMode(QString stereoMode)
96-
{
97-
settings.setValue( "/Plugin-Globe/stereoMode", stereoMode );
98-
if("OFF" == stereoMode)
99-
{
100-
osg::DisplaySettings::instance()->setStereo( false );
101-
}
102-
else
103-
{
104-
osg::DisplaySettings::instance()->setStereo( true );
105-
106-
if("ANAGLYPHIC" == stereoMode)
107-
{
108-
osg::DisplaySettings::instance()->setStereoMode( osg::DisplaySettings::ANAGLYPHIC );
109-
}
110-
else if("VERTICAL_SPLIT" == stereoMode)
111-
{
112-
osg::DisplaySettings::instance()->setStereoMode( osg::DisplaySettings::VERTICAL_SPLIT );
113-
}
114-
else if("HORIZONTAL_SPLIT" == stereoMode)
115-
{
116-
osg::DisplaySettings::instance()->setStereoMode( osg::DisplaySettings::HORIZONTAL_SPLIT );
117-
}
118-
else if("QUAD_BUFFER" == stereoMode)
119-
{
120-
osg::DisplaySettings::instance()->setStereoMode( osg::DisplaySettings::QUAD_BUFFER );
121-
}
122-
else
123-
{
124-
//should never get here
125-
settings.setValue( "/Plugin-Globe/stereoMode", "ANAGLYPHIC" );
126-
QMessageBox msgBox;
127-
msgBox.setText("This stereo mode has not been implemented yet. Defaulting to ANAGLYPHIC");
128-
msgBox.exec();
129-
}
130-
}
131-
}

src/plugins/globe/qgsosgviewer.h

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -20,12 +20,10 @@
2020
#define QGS_OSG_VIEWER_H
2121

2222
#include <osgViewer/Viewer>
23-
#include <osgViewer/CompositeViewer>
2423

2524
#include <QtOpenGL/QGLWidget>
2625
#include <QtGui/QKeyEvent>
2726
#include <QtCore/QTimer>
28-
#include <QSettings>
2927

3028
using Qt::WindowFlags;
3129

@@ -39,9 +37,6 @@ class QgsGLWidgetAdapter : public QGLWidget
3937

4038
osgViewer::GraphicsWindow* getGraphicsWindow() { return _gw.get(); }
4139
const osgViewer::GraphicsWindow* getGraphicsWindow() const { return _gw.get(); }
42-
43-
void setStereoMode();
44-
void setStereoMode(QString stereoMode);
4540

4641
protected:
4742

@@ -56,9 +51,6 @@ class QgsGLWidgetAdapter : public QGLWidget
5651

5752
osg::ref_ptr<osgViewer::GraphicsWindowEmbedded> _gw;
5853

59-
private:
60-
61-
QSettings settings;
6254
};
6355

6456

0 commit comments

Comments
 (0)