ATLAS Offline Software
Loading...
Searching...
No Matches
VP1CustomStereoEditor Class Reference

#include <VP1CustomStereoEditor.h>

Inheritance diagram for VP1CustomStereoEditor:
Collaboration diagram for VP1CustomStereoEditor:

Classes

class  Imp

Public Member Functions

 VP1CustomStereoEditor (VP1ExaminerViewer *)
void setState (QByteArray)
QByteArray state () const
virtual ~VP1CustomStereoEditor ()

Protected Member Functions

void closeEvent (QCloseEvent *)

Private Slots

void buttonClicked ()
void changedView (bool checked)
void changedView_viewer (bool checked)
void showEvent (QShowEvent *ev)
void updateFocal ()
void setToFocal30 ()
void perform3DCalculations (double value)

Private Attributes

Impm_d
SbBool m_leftEyeFilter [3]
SbBool m_rightEyeFilter [3]
SbBool m_leftEyeFilter_def [3]
SbBool m_rightEyeFilter_def [3]

Detailed Description

Definition at line 30 of file VP1CustomStereoEditor.h.

Constructor & Destructor Documentation

◆ VP1CustomStereoEditor()

VP1CustomStereoEditor::VP1CustomStereoEditor ( VP1ExaminerViewer * viewer)

WARNING!!!!!!

we hide the viewer section for the tag, because it is still under development.

Comment out the line below to develop and debug, and then for the final release.

Definition at line 103 of file VP1CustomSteroEditor.cxx.

104: QWidget(0,Qt::WindowStaysOnTopHint), m_d(new Imp)
105{
106 VP1Msg::messageDebug("VP1CustomStereoEditor::VP1CustomStereoEditor()");
107
108 // set the default anaglyph masks
109 m_leftEyeFilter_def[0] = true; m_leftEyeFilter_def[1] = false; m_leftEyeFilter_def[2] = false;
110 m_rightEyeFilter_def[0] = false; m_rightEyeFilter_def[1] = true; m_rightEyeFilter_def[2] = true;
111
112 m_d->theclass = this;
113 m_d->ui.setupUi(this);
114 m_d->ui.groupBox_camera->setChecked(true);
115 m_d->ui.groupBox_viewer->setChecked(false);
116 // m_d->ui.widget_utilityZoomContents->setVisible(false);
117
118 // a handle on the main viewer widget
119 m_d->viewer = viewer;
120
121 setWindowIcon(QIcon(QString(":/vp1/icons/icons/3d_32x32.png")));
122
123 // set default values
124 m_d->ui.label_focal->setText( QString::number(m_d->viewer->getCamera()->focalDistance.getValue()) );
125 m_d->ui.doubleSpinBox_offset->setValue(m_d->viewer->stereo_offset_camera);
126 m_d->ui.doubleSpinBox_parallax->setValue(m_d->viewer->stereo_parallax_camera);
127 m_d->ui.doubleSpinBox_offset_viewer->setValue(m_d->viewer->stereo_offset_viewer);
128
129
130 connect(m_d->ui.pushButton_focal,SIGNAL(clicked()),this,SLOT(updateFocal()));
131
132 connect(m_d->ui.pushButton_setToFocal30,SIGNAL(clicked()),this,SLOT(setToFocal30()));
133
134
135 connect(m_d->ui.pushButton_defCamera,SIGNAL(clicked()),this,SLOT(buttonClicked()));
136 connect(m_d->ui.pushButton_defViewer,SIGNAL(clicked()),this,SLOT(buttonClicked()));
137
138 connect(m_d->ui.pushButton_refresh,SIGNAL(clicked()),this,SLOT(buttonClicked()));
139 connect(m_d->ui.pushButton_refreshViewer,SIGNAL(clicked()),this,SLOT(buttonClicked()));
140
141 connect(m_d->ui.radioButton_standard,SIGNAL(toggled(bool)),this,SLOT(changedView(bool)));
142 connect(m_d->ui.radioButton_left,SIGNAL(toggled(bool)),this,SLOT(changedView(bool)));
143 connect(m_d->ui.radioButton_right,SIGNAL(toggled(bool)),this,SLOT(changedView(bool)));
144
145 connect(m_d->ui.radioButton_left_viewer,SIGNAL(toggled(bool)),this,SLOT(changedView_viewer(bool)));
146 connect(m_d->ui.radioButton_right_viewer,SIGNAL(toggled(bool)),this,SLOT(changedView_viewer(bool)));
147 connect(m_d->ui.radioButton_standard_viewer,SIGNAL(toggled(bool)),this,SLOT(changedView_viewer(bool)));
148
149 connect(m_d->ui.radioButton_noStereo,SIGNAL(toggled(bool)),this,SLOT(changedView_viewer(bool)));
150 connect(m_d->ui.radioButton_anaglyph,SIGNAL(toggled(bool)),this,SLOT(changedView_viewer(bool)));
151 connect(m_d->ui.radioButton_quadbuffer,SIGNAL(toggled(bool)),this,SLOT(changedView_viewer(bool)));
152 connect(m_d->ui.radioButton_int_rows,SIGNAL(toggled(bool)),this,SLOT(changedView_viewer(bool)));
153 connect(m_d->ui.radioButton_int_cols,SIGNAL(toggled(bool)),this,SLOT(changedView_viewer(bool)));
154
155 connect(m_d->ui.doubleSpinBox_imageWidth_meter,SIGNAL(valueChanged(double)),this,SLOT(perform3DCalculations(double)));
156 connect(m_d->ui.doubleSpinBox_imageWidth_inch,SIGNAL(valueChanged(double)),this,SLOT(perform3DCalculations(double)));
157 connect(m_d->ui.doubleSpinBox_offset,SIGNAL(valueChanged(double)),this,SLOT(perform3DCalculations(double)));
158
159
169 m_d->ui.groupBox_viewer->hide();
170
171}
void perform3DCalculations(double value)
void changedView_viewer(bool checked)
static void messageDebug(const QString &)
Definition VP1Msg.cxx:39

◆ ~VP1CustomStereoEditor()

VP1CustomStereoEditor::~VP1CustomStereoEditor ( )
virtual

Definition at line 174 of file VP1CustomSteroEditor.cxx.

175{
176 // m_d->frameHolderWidget->deleteLater();
177 // for(VP1CustomTourFrameWidget*frame : m_d->frames)
178 // frame->deleteLater();
179 delete m_d;
180}

Member Function Documentation

◆ buttonClicked

void VP1CustomStereoEditor::buttonClicked ( )
privateslot

Definition at line 343 of file VP1CustomSteroEditor.cxx.

344{
345 VP1Msg::messageDebug("VP1CustomStereoEditor::buttonClicked() - updating STEREO settings...");
346
348 if (m_d->ui.pushButton_refresh==sender())
349 {
350 // get user's values
351 double offset(m_d->ui.doubleSpinBox_offset->value());
352 double parallax(m_d->ui.doubleSpinBox_parallax->value());
353 // get current values
354 float old_offset = m_d->viewer->stereo_offset_camera;
355 float old_parallax = m_d->viewer->stereo_parallax_camera;
356
357 SoCamera *camera = m_d->viewer->getCamera();
358
359 if (old_offset != offset) {
360 camera->setStereoAdjustment(offset);
361 m_d->viewer->stereo_offset_camera = offset;
362 VP1Msg::messageDebug("Changed CAMERA STEREO offset to: "+QString::number(offset));
363 }
364 if (old_parallax != parallax) {
365 camera->setBalanceAdjustment(parallax);
366 m_d->viewer->stereo_parallax_camera = parallax;
367 VP1Msg::messageDebug("Changed CAMERA STEREO balance/parallax to : "+QString::number(parallax));
368 }
369
370 }
371
372
374 else if (m_d->ui.pushButton_refreshViewer==sender())
375 {
376 // get user's value
377 double offset(m_d->ui.doubleSpinBox_offset_viewer->value());
378 // get current value
379 float old_offset = m_d->viewer->stereo_offset_viewer;
380
381 if (old_offset != offset) {
382 m_d->viewer->setStereoOffsetSlot(offset);
383 m_d->viewer->stereo_offset_viewer = offset;
384 VP1Msg::messageDebug("Changed VIEWER STEREO offset to: "+QString::number(offset));
385 }
386 }
387
389 else if (m_d->ui.pushButton_defCamera==sender())
390 {
391 // set default values
392
393 /*
394 * Default Interaxial (aka Stereo Base) distance.
395 *
396 * The value is chosen because it's the approximate distance between the human eyes.
397 * See:
398 * - http://doc.coin3d.org/Coin/classSoCamera.html#a6ed2d2527604e86cc8be234b1e429991
399 * - http://www.sky.com/shop/export/sites/www.sky.com/shop/__PDF/3D/Basic_Principles_of_Stereoscopic_3D_v1.pdf
400 * - http://www.dashwood3d.com/blog/beginners-guide-to-shooting-stereoscopic-3d/
401 */
402 double defOff = 0.1;
403
404 /*
405 * Default Zero Parallax Plane
406 *
407 * The value 1.0 for the Balance/Parallax, puts the Zero Parallax Plane at the Focal Legth.
408 *
409 * See:
410 * - http://www.dashwood3d.com/blog/beginners-guide-to-shooting-stereoscopic-3d/
411 * - http://www.cafedownloads.com/reviews/r13/3dstereo.html
412 */
413 double defParall = 1.0;
414
415 m_d->ui.doubleSpinBox_offset->setValue(defOff);
416 m_d->ui.doubleSpinBox_parallax->setValue(defParall);
417
418 }
419
420
422 else if (m_d->ui.pushButton_defViewer==sender())
423 {
424 // set default values
425
426 /* Default Interaxial (aka Stereo Base) distance.
427 * The value is chosen because it's the approximate distance between the human eyes.
428 * See:
429 * - http://doc.coin3d.org/Coin/classSoCamera.html#a6ed2d2527604e86cc8be234b1e429991
430 * - http://www.sky.com/shop/export/sites/www.sky.com/shop/__PDF/3D/Basic_Principles_of_Stereoscopic_3D_v1.pdf
431 * - http://www.dashwood3d.com/blog/beginners-guide-to-shooting-stereoscopic-3d/
432 */
433 double defOff = 0.1;
434
435 m_d->ui.doubleSpinBox_offset_viewer->setValue(defOff);
436
437 }
438
439
440}

◆ changedView

void VP1CustomStereoEditor::changedView ( bool checked)
privateslot

Definition at line 267 of file VP1CustomSteroEditor.cxx.

268{
269 if (checked) {
270 SoCamera *camera = m_d->viewer->getCamera();
271 if (m_d->ui.radioButton_standard->isChecked() ) {
272 camera->setStereoMode(SoCamera::MONOSCOPIC);
273 VP1Msg::messageDebug("Changed camera STEREO view to STANDARD.");
274 }
275 else if (m_d->ui.radioButton_left->isChecked() ) {
276 camera->setStereoMode(SoCamera::LEFT_VIEW);
277 VP1Msg::messageDebug("Changed camera STEREO view to LEFT EYE.");
278 }
279 else if (m_d->ui.radioButton_right->isChecked() ) {
280 camera->setStereoMode(SoCamera::RIGHT_VIEW);
281 VP1Msg::messageDebug("Changed camera STEREO view to RIGHT EYE.");
282 }
283 m_d->viewer->show(); // update the view
284 }
285}

◆ changedView_viewer

void VP1CustomStereoEditor::changedView_viewer ( bool checked)
privateslot

Definition at line 287 of file VP1CustomSteroEditor.cxx.

288{
289 if (checked) {
290 // we only show the LEFT view in REAL color
291 if (m_d->ui.radioButton_left_viewer->isChecked())
292 {
293 m_leftEyeFilter[0] = true; m_leftEyeFilter[1] = true; m_leftEyeFilter[2] = true;
294 m_rightEyeFilter[0] = false; m_rightEyeFilter[1] = false; m_rightEyeFilter[2] = false;
295 m_d->viewer->setAnaglyphStereoColorMasksSlot(m_leftEyeFilter, m_rightEyeFilter);
296 }
297 // we only show the RIGHT view in REAL color
298 if (m_d->ui.radioButton_right_viewer->isChecked())
299 {
300 m_leftEyeFilter[0] = false; m_leftEyeFilter[1] = false; m_leftEyeFilter[2] = false;
301 m_rightEyeFilter[0] = true; m_rightEyeFilter[1] = true; m_rightEyeFilter[2] = true;
302 m_d->viewer->setAnaglyphStereoColorMasksSlot(m_leftEyeFilter, m_rightEyeFilter);
303 }
304 // we set the standard Red/Cyan anaglyph view
305 if (m_d->ui.radioButton_standard_viewer->isChecked())
306 {
307 m_d->viewer->setAnaglyphStereoColorMasksSlot(m_leftEyeFilter_def, m_rightEyeFilter_def);
308 }
309 if (m_d->ui.radioButton_noStereo->isChecked())
310 {
311 m_d->viewer->setStereoTypeSlot(SoQtViewer::STEREO_NONE);
312 m_d->ui.groupBox_2->setEnabled(false);
313 }
314 if (m_d->ui.radioButton_anaglyph->isChecked())
315 {
316 m_d->viewer->setStereoTypeSlot(SoQtViewer::STEREO_ANAGLYPH);
317 m_d->ui.groupBox_2->setEnabled(true);
318 }
319 if (m_d->ui.radioButton_quadbuffer->isChecked())
320 {
321 m_d->viewer->setStereoTypeSlot(SoQtViewer::STEREO_QUADBUFFER);
322 m_d->ui.groupBox_2->setEnabled(true);
323 }
324 if (m_d->ui.radioButton_int_rows->isChecked())
325 {
326 m_d->viewer->setStereoTypeSlot(SoQtViewer::STEREO_INTERLEAVED_ROWS);
327 m_d->ui.groupBox_2->setEnabled(true);
328 }
329 if (m_d->ui.radioButton_int_cols->isChecked())
330 {
331 m_d->viewer->setStereoTypeSlot(SoQtViewer::STEREO_INTERLEAVED_COLUMNS);
332 m_d->ui.groupBox_2->setEnabled(true);
333 }
334
335
336 m_d->viewer->show(); // update the view
337 }
338}

◆ closeEvent()

void VP1CustomStereoEditor::closeEvent ( QCloseEvent * ev)
protected

Definition at line 211 of file VP1CustomSteroEditor.cxx.

212{
213 ev->ignore();
214 hide();
215}
int ev
Definition globals.cxx:25

◆ perform3DCalculations

void VP1CustomStereoEditor::perform3DCalculations ( double value)
privateslot

Definition at line 235 of file VP1CustomSteroEditor.cxx.

236{
237 double value_meters = 0.;
238
239 if (m_d->ui.doubleSpinBox_imageWidth_meter==sender()) {
240 // converting meters to inches, and set the new value on the screen
241 m_d->ui.doubleSpinBox_imageWidth_inch->setValue( value * 39.370);
242 value_meters = value;
243 }
244 else if (m_d->ui.doubleSpinBox_imageWidth_inch==sender()) {
245 // converting inches to meters, and set the new value on the screen
246 m_d->ui.doubleSpinBox_imageWidth_meter->setValue( value / 39.370);
247 value_meters = value / 39.370;
248 }
249 else {
250 value_meters = m_d->ui.doubleSpinBox_imageWidth_meter->value();
251 }
252
253 // perform S3D calculations
254 // --> see: http://www.dashwood3d.com/blog/beginners-guide-to-shooting-stereoscopic-3d/
255 double nativeParallax = m_d->ui.doubleSpinBox_offset->value() / value_meters;
256 double minimumObjDistance = m_d->ui.doubleSpinBox_offset->value() / 30.;
257
258 // update the S3D values
259 m_d->ui.label_nativeParalValue->setText( QString::number(nativeParallax) );
260 m_d->ui.label_minObjDistValue->setText( QString::number(minimumObjDistance) );
261
262}

◆ setState()

void VP1CustomStereoEditor::setState ( QByteArray )

◆ setToFocal30

void VP1CustomStereoEditor::setToFocal30 ( )
privateslot

Definition at line 227 of file VP1CustomSteroEditor.cxx.

228{
229 m_d->ui.doubleSpinBox_offset->setValue( (m_d->viewer->getCamera()->focalDistance.getValue() / 30.0) );
230 m_d->ui.doubleSpinBox_offset_viewer->setValue( (m_d->viewer->getCamera()->focalDistance.getValue() / 30.0) );
231}

◆ showEvent

void VP1CustomStereoEditor::showEvent ( QShowEvent * ev)
privateslot

Definition at line 189 of file VP1CustomSteroEditor.cxx.

190{
191 // set default values
192
193 m_d->ui.label_focal->setText( QString::number(m_d->viewer->getCamera()->focalDistance.getValue()) );
194
195 m_d->ui.doubleSpinBox_offset->setValue(m_d->viewer->stereo_offset_camera);
196 m_d->ui.doubleSpinBox_parallax->setValue(m_d->viewer->stereo_parallax_camera);
197 m_d->ui.doubleSpinBox_offset_viewer->setValue(m_d->viewer->stereo_offset_viewer);
198
199 m_d->ui.radioButton_standard->setChecked(true);
200 m_d->ui.radioButton_noStereo->setChecked(true);
201 m_d->ui.radioButton_standard_viewer->setChecked(true);
202
203 m_d->ui.groupBox_2->setEnabled(false);
204
205 // go on with the default QWidget behavior
206 QWidget::showEvent(ev);
207}

◆ state()

QByteArray VP1CustomStereoEditor::state ( ) const

◆ updateFocal

void VP1CustomStereoEditor::updateFocal ( )
privateslot

Definition at line 220 of file VP1CustomSteroEditor.cxx.

221{
222 m_d->ui.label_focal->setText( QString::number(m_d->viewer->getCamera()->focalDistance.getValue()) );
223}

Member Data Documentation

◆ m_d

Imp* VP1CustomStereoEditor::m_d
private

Definition at line 71 of file VP1CustomStereoEditor.h.

◆ m_leftEyeFilter

SbBool VP1CustomStereoEditor::m_leftEyeFilter[3]
private

Definition at line 74 of file VP1CustomStereoEditor.h.

◆ m_leftEyeFilter_def

SbBool VP1CustomStereoEditor::m_leftEyeFilter_def[3]
private

Definition at line 80 of file VP1CustomStereoEditor.h.

◆ m_rightEyeFilter

SbBool VP1CustomStereoEditor::m_rightEyeFilter[3]
private

Definition at line 75 of file VP1CustomStereoEditor.h.

◆ m_rightEyeFilter_def

SbBool VP1CustomStereoEditor::m_rightEyeFilter_def[3]
private

Definition at line 81 of file VP1CustomStereoEditor.h.


The documentation for this class was generated from the following files: