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()));
 }
예제 #2
0
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();
            }
        }
    }