void StereoController::InitializeUi() { settings_widget_ = new StereoWidget(renderer_->GetFramework()); QObject::connect(settings_widget_, SIGNAL(EnableStereo(QString&, qreal, qreal, qreal, qreal)), this,SLOT(EnableStereo(QString&, qreal, qreal, qreal, qreal) )); QObject::connect(settings_widget_, SIGNAL(DisableStereo()), this, SLOT(DisableStereo())); QObject::connect(settings_widget_, SIGNAL(ChangeColorLeft(qreal, qreal, qreal)), this, SLOT(ChangeColorLeft(qreal, qreal, qreal))); QObject::connect(settings_widget_, SIGNAL(ChangeColorRight(qreal, qreal, qreal)), this, SLOT(ChangeColorRight(qreal, qreal, qreal))); QObject::connect(settings_widget_, SIGNAL(StereoFlip()), this, SLOT(StereoFlip())); }
void VimridViewer::OnControlSelectRelease(Control &control) { // HACK: Comparing text when pointer should be compared. if ((control.GetName() == "loadDicomSet1Button") || (control.GetName() == "loadDicomSet2Button") || (control.GetName() == "loadDicomSet3Button") || (control.GetName() == "loadDicomSet4Button")) { const Button *buttonPtr = dynamic_cast<const Button*>(&control); mDicomClient.DownloadAsync(buttonPtr->GetText()); } // HACK: Comparing text when pointer should be compared. if (control.GetName() == "toggleStatusButton") { EnableRenderStatusText = !EnableRenderStatusText; } // Cancel loading of DICOM data. if (&control == mFilterLoadingScreenCancelButton) { mDicomLoadCancel = true; } // Turns transparency on and off. if (&control == mToggleAlphaButton) { mAlphaEnabled = !mAlphaEnabled; } if (&control == mFilterRestoreButton) { pthread_create(&mFilterRestoreThread, NULL, _filterRestore, NULL); } /* HACK: If any other button pressed, filter mode is reset. This * conveniently does the same thing as what the cancel button does * so it works fine for the time being, but this should only really * be reset on specific scenarios (such as cancel button press). */ mFilterMode = VV_FM_None; if (&control == mSobelXNormalButton) { mFilterMode = VV_FM_SobelXNormal; } else if (&control == mSobelYNormalButton) { mFilterMode = VV_FM_SobelYNormal; } else if (&control == mSobelXYNormalButton) { mFilterMode = VV_FM_SobelXYNormal; } else if (&control == mSobelXYScopedButton) { mFilterMode = VV_FM_SobelXYScoped; } // Once filter mode potentially set, check and if it is, process! if (mFilterMode != VV_FM_None) { pthread_create(&mProcessorThread, NULL, _processImages, NULL); } if (&control == mToggleStereoButton) { if (IsStereoEnabled()) { DisableStereo(); } else { EnableStereo(); } } if (&control == mToggleTrackdButton) { VimridMenu &mainMenu = *mMainMenu; if (GetUtility().IsTrackdEnabled()) { GetUtility().DisableTrackd(); GetUiContainer().ResetCursor(); if (mainMenu.HasToggleMode(UI_MTM_CENTRE_CURSOR)) { mainMenu.RemoveToggleMode(UI_MTM_CENTRE_CURSOR); } } else { GetUtility().EnableTrackd(); GetUiContainer().CentreCursor(*mMainMenu); if (!mainMenu.HasToggleMode(UI_MTM_CENTRE_CURSOR)) { mainMenu.AddToggleMode(UI_MTM_CENTRE_CURSOR); } } } if (&control == mExitVimridButton) { Exit(); } }
void StereoController::EnableStereo(QString& tech_type, qreal eye_dist, qreal focal_l, qreal offset, qreal scrn_width) { DisableStereo(); if (tech_type == "anaglyph") { QVector<Ogre::RenderWindow*> windows = getRenderWindows(); for(int i=0; i< windows.size();i++) { StereoManager* mngr = new StereoManager(renderer_); Ogre::RenderWindow *original_window = windows.at(i); Ogre::Viewport * viewport = original_window->getViewport(0); mngr->init(viewport,0,StereoManager::SM_ANAGLYPH); mngr->setEyesSpacing(eye_dist); mngr->setFocalLength(focal_l); mngr->setPixelOffset(offset); if(scrn_width > 0) { mngr->setScreenWidth(scrn_width); } QString name = prefix_; name += QString::number(number_of_views_); stereo_views_[name] = mngr; number_of_views_++; } } else if (tech_type == "passive") { QVector<Ogre::RenderWindow*> windows = getRenderWindows(); for(int i=0; i< windows.size();i++) { QString name = prefix_; name += QString::number(number_of_views_); StereoManager* mngr = new StereoManager(renderer_); Ogre::RenderWindow *original_window = windows.at(i); Ogre::Viewport *viewport = original_window->getViewport(0); ExternalRenderWindow* window = new ExternalRenderWindow(); window->CreateRenderWindow((name + "_right").toStdString(),original_window->getWidth(), original_window->getHeight(),0,0,false); window->setGeometry(20,20,original_window->getWidth(),original_window->getHeight()); window->getRenderWindow()->addViewport(viewport->getCamera()); windows_to_dispose_.append(window); mngr->init(viewport,window->getRenderWindow()->getViewport(0),StereoManager::SM_DUALOUTPUT); mngr->setEyesSpacing(eye_dist); mngr->setFocalLength(focal_l); mngr->setPixelOffset(offset); if(scrn_width > 0) mngr->setScreenWidth(scrn_width); stereo_views_[name] = mngr; number_of_views_++; window->show(); } } else if (tech_type == "active") { QVector<Ogre::RenderWindow*> windows = getRenderWindows(); for(int i=0; i< windows.size();i++) { QString name = prefix_; name += QString::number(number_of_views_); StereoManager* mngr = new StereoManager(renderer_); Ogre::RenderWindow *original_window = windows.at(i); Ogre::Viewport *viewport = original_window->getViewport(0); mngr->init(viewport,0,StereoManager::SM_SHUTTER); mngr->setEyesSpacing(eye_dist); mngr->setFocalLength(focal_l); mngr->setPixelOffset(offset); if(scrn_width > 0) mngr->setScreenWidth(scrn_width); stereo_views_[name] = mngr; number_of_views_++; } } else if (tech_type == "horizontal") { QVector<Ogre::RenderWindow*> windows = getRenderWindows(); for(int i=0; i< windows.size();i++) { QString name = prefix_; name += QString::number(number_of_views_); StereoManager* mngr = new StereoManager(renderer_); Ogre::RenderWindow *original_window = windows.at(i); Ogre::Viewport *viewport = original_window->getViewport(0); mngr->init(viewport,0,StereoManager::SM_INTERLACED_H); mngr->setEyesSpacing(eye_dist); mngr->setFocalLength(focal_l); mngr->setPixelOffset(offset); mngr->inverseStereo(flip_); if(scrn_width > 0) mngr->setScreenWidth(scrn_width); stereo_views_[name] = mngr; number_of_views_++; flip_ = mngr->isStereoInversed(); } } else if (tech_type == "vertical") { QVector<Ogre::RenderWindow*> windows = getRenderWindows(); for(int i=0; i< windows.size();i++) { QString name = prefix_; name += QString::number(number_of_views_); StereoManager* mngr = new StereoManager(renderer_); Ogre::RenderWindow *original_window = windows.at(i); Ogre::Viewport *viewport = original_window->getViewport(0); mngr->init(viewport,0,StereoManager::SM_INTERLACED_V); mngr->setEyesSpacing(eye_dist); mngr->setFocalLength(focal_l); mngr->setPixelOffset(offset); mngr->inverseStereo(flip_); if(scrn_width > 0) mngr->setScreenWidth(scrn_width); stereo_views_[name] = mngr; number_of_views_++; flip_ = mngr->isStereoInversed(); } } else if (tech_type == "checkboard") { QVector<Ogre::RenderWindow*> windows = getRenderWindows(); for(int i=0; i< windows.size();i++) { QString name = prefix_; name += QString::number(number_of_views_); StereoManager* mngr = new StereoManager(renderer_); Ogre::RenderWindow *original_window = windows.at(i); Ogre::Viewport *viewport = original_window->getViewport(0); mngr->init(viewport,0,StereoManager::SM_INTERLACED_CB); mngr->setEyesSpacing(eye_dist); mngr->setFocalLength(focal_l); mngr->setPixelOffset(offset); mngr->inverseStereo(flip_); if(scrn_width > 0) mngr->setScreenWidth(scrn_width); stereo_views_[name] = mngr; number_of_views_++; flip_ = mngr->isStereoInversed(); } } }