Public Member Functions | Static Public Attributes | Protected Slots | Protected Member Functions | Protected Attributes

QmitkSimpleExampleView Class Reference
[Internal]

QmitkSimpleExampleView. More...

#include <QmitkSimpleExampleView.h>

Inheritance diagram for QmitkSimpleExampleView:
Inheritance graph
[legend]
Collaboration diagram for QmitkSimpleExampleView:
Collaboration graph
[legend]

List of all members.

Public Member Functions

 QmitkSimpleExampleView ()
virtual ~QmitkSimpleExampleView ()
virtual void CreateQtPartControl (QWidget *parent)
virtual void CreateConnections ()
 Creation of the connections of main and control widget.
virtual void Activated ()
 Called when the functionality is activated.
virtual void Deactivated ()
virtual void StdMultiWidgetAvailable (QmitkStdMultiWidget &stdMultiWidget)
virtual void StdMultiWidgetNotAvailable ()

Static Public Attributes

static const std::string VIEW_ID = "org.mitk.views.simpleexample"

Protected Slots

void stereoSelectionChanged (int id)
void initNavigators ()
void generateMovie ()
QmitkRenderWindowGetMovieRenderWindow ()
void OnRenderWindow1Clicked ()
void OnRenderWindow2Clicked ()
void OnRenderWindow3Clicked ()
void OnRenderWindow4Clicked ()
void OnTakeHighResolutionScreenshot ()
 takes screenshot of the 3D window in 4x resolution of the render window
void OnTakeScreenshot ()
 takes screenshot of the selected render window

Protected Member Functions

void TakeScreenshot (vtkRenderer *renderer, unsigned int magnificationFactor, QString fileName)
 writes a screenshot in JPEG or PNG format to the file fileName

Protected Attributes

Ui::QmitkSimpleExampleViewControlsm_Controls
QmitkStdMultiWidgetm_MultiWidget
bool m_NavigatorsInitialized

Detailed Description

QmitkSimpleExampleView.

Document your class here.

See also:
QmitkFunctionality

Definition at line 38 of file QmitkSimpleExampleView.h.


Constructor & Destructor Documentation

QmitkSimpleExampleView::QmitkSimpleExampleView (  )

Definition at line 45 of file QmitkSimpleExampleView.cpp.

QmitkSimpleExampleView::~QmitkSimpleExampleView (  ) [virtual]

Definition at line 53 of file QmitkSimpleExampleView.cpp.

{
}

Member Function Documentation

void QmitkSimpleExampleView::Activated (  ) [virtual]

Called when the functionality is activated.

Reimplemented from QmitkFunctionality.

Definition at line 100 of file QmitkSimpleExampleView.cpp.

void QmitkSimpleExampleView::CreateConnections (  ) [virtual]

Creation of the connections of main and control widget.

Definition at line 84 of file QmitkSimpleExampleView.cpp.

References generateMovie(), Ui_QmitkSimpleExampleViewControls::genMovieButton, initNavigators(), m_Controls, Ui_QmitkSimpleExampleViewControls::m_RenderWindow1Button, Ui_QmitkSimpleExampleViewControls::m_RenderWindow2Button, Ui_QmitkSimpleExampleViewControls::m_RenderWindow3Button, Ui_QmitkSimpleExampleViewControls::m_RenderWindow4Button, Ui_QmitkSimpleExampleViewControls::m_TakeHighResScreenShotBtn, Ui_QmitkSimpleExampleViewControls::m_TakeScreenshotBtn, OnRenderWindow1Clicked(), OnRenderWindow2Clicked(), OnRenderWindow3Clicked(), OnRenderWindow4Clicked(), OnTakeHighResolutionScreenshot(), OnTakeScreenshot(), Ui_QmitkSimpleExampleViewControls::reInitializeNavigatorsButton, Ui_QmitkSimpleExampleViewControls::stereoSelect, and stereoSelectionChanged().

Referenced by CreateQtPartControl().

{
  if ( m_Controls )
  {
    connect(m_Controls->stereoSelect, SIGNAL(activated(int)), this, SLOT(stereoSelectionChanged(int)) );
    connect(m_Controls->reInitializeNavigatorsButton, SIGNAL(clicked()), this, SLOT(initNavigators()) );
    connect(m_Controls->genMovieButton, SIGNAL(clicked()), this, SLOT(generateMovie()) );
    connect(m_Controls->m_RenderWindow1Button, SIGNAL(clicked()), this, SLOT(OnRenderWindow1Clicked()) );
    connect(m_Controls->m_RenderWindow2Button, SIGNAL(clicked()), this, SLOT(OnRenderWindow2Clicked()) );
    connect(m_Controls->m_RenderWindow3Button, SIGNAL(clicked()), this, SLOT(OnRenderWindow3Clicked()) );
    connect(m_Controls->m_RenderWindow4Button, SIGNAL(clicked()), this, SLOT(OnRenderWindow4Clicked()) );
    connect(m_Controls->m_TakeScreenshotBtn, SIGNAL(clicked()), this, SLOT(OnTakeScreenshot()) );
    connect(m_Controls->m_TakeHighResScreenShotBtn, SIGNAL(clicked()), this, SLOT(OnTakeHighResolutionScreenshot()) );
  }
}
void QmitkSimpleExampleView::CreateQtPartControl ( QWidget *  parent ) [virtual]
void QmitkSimpleExampleView::Deactivated (  ) [virtual]

Only called when IsExclusiveFunctionality() returns true.

See also:
IsExclusiveFunctionality()

Reimplemented from QmitkFunctionality.

Definition at line 105 of file QmitkSimpleExampleView.cpp.

void QmitkSimpleExampleView::generateMovie (  ) [protected, slot]

generate a movie as *.avi from the active render window

Definition at line 122 of file QmitkSimpleExampleView.cpp.

References mitk::BaseRenderer::GetInstance(), GetMovieRenderWindow(), mitk::BaseController::GetSlice(), mitk::RenderWindowBase::GetSliceNavigationController(), and mitk::MovieGenerator::New().

Referenced by CreateConnections().

{
  QmitkRenderWindow* movieRenderWindow = GetMovieRenderWindow();
  //mitk::Stepper::Pointer stepper = multiWidget->mitkWidget1->GetSliceNavigationController()->GetSlice();
  mitk::Stepper::Pointer stepper = movieRenderWindow->GetSliceNavigationController()->GetSlice();
  mitk::MovieGenerator::Pointer movieGenerator = mitk::MovieGenerator::New();
  if (movieGenerator.IsNotNull()) {
    movieGenerator->SetStepper( stepper );
    movieGenerator->SetRenderer( mitk::BaseRenderer::GetInstance(movieRenderWindow->GetRenderWindow()) );

    QString movieFileName = QFileDialog::getSaveFileName(0, "Choose a file name", QString(), "Movie (*.avi)");
    if (!movieFileName.isEmpty()) {
      movieGenerator->SetFileName( movieFileName.toStdString().c_str() );
      movieGenerator->WriteMovie();
    }
  }
}
QmitkRenderWindow * QmitkSimpleExampleView::GetMovieRenderWindow (  ) [protected, slot]

return the renderwindow of which the movie shall be created, what depends on the toggled button

Definition at line 172 of file QmitkSimpleExampleView.cpp.

References m_Controls, m_MultiWidget, Ui_QmitkSimpleExampleViewControls::m_RenderWindow1Button, Ui_QmitkSimpleExampleViewControls::m_RenderWindow2Button, Ui_QmitkSimpleExampleViewControls::m_RenderWindow3Button, Ui_QmitkSimpleExampleViewControls::m_RenderWindow4Button, QmitkStdMultiWidget::mitkWidget1, QmitkStdMultiWidget::mitkWidget2, QmitkStdMultiWidget::mitkWidget3, and QmitkStdMultiWidget::mitkWidget4.

Referenced by generateMovie(), and OnTakeScreenshot().

{
  //check which RenderWindow should be used to generate the movie, e.g. which button is toggled
   if(m_Controls->m_RenderWindow1Button->isChecked())
   {
    return m_MultiWidget->mitkWidget1;
   }
   else if(m_Controls->m_RenderWindow2Button->isChecked())
   {
     return m_MultiWidget->mitkWidget2;
   }
   else if(m_Controls->m_RenderWindow3Button->isChecked())
   {
     return m_MultiWidget->mitkWidget3;
   }
   else if(m_Controls->m_RenderWindow4Button->isChecked())
   {
     return m_MultiWidget->mitkWidget4;
   }
   else //as default take widget1
   {
     return m_MultiWidget->mitkWidget1;
   }

}
void QmitkSimpleExampleView::initNavigators (  ) [protected, slot]

initialize the transversal, sagittal, coronal and temporal slider according to the image dimensions

Definition at line 110 of file QmitkSimpleExampleView.cpp.

References QmitkFunctionality::GetDataStorage(), mitk::RenderingManager::GetInstance(), m_NavigatorsInitialized, mitk::BoolProperty::New(), mitk::NodePredicateProperty::New(), and mitk::NodePredicateNot::New().

Referenced by CreateConnections().

{
  /* get all nodes that have not set "includeInBoundingBox" to false */
  mitk::NodePredicateNot::Pointer pred = mitk::NodePredicateNot::New(mitk::NodePredicateProperty::New("includeInBoundingBox", mitk::BoolProperty::New(false)));
  mitk::DataStorage::SetOfObjects::ConstPointer rs = this->GetDataStorage()->GetSubset(pred);
  /* calculate bounding geometry of these nodes */
  mitk::TimeSlicedGeometry::Pointer bounds = this->GetDataStorage()->ComputeBoundingGeometry3D(rs);
  /* initialize the views to the bounding geometry */
  m_NavigatorsInitialized = mitk::RenderingManager::GetInstance()->InitializeViews(bounds);
  //m_NavigatorsInitialized = mitk::RenderingManager::GetInstance()->InitializeViews(GetDefaultDataStorage());
}
void QmitkSimpleExampleView::OnRenderWindow1Clicked (  ) [protected, slot]
void QmitkSimpleExampleView::OnRenderWindow2Clicked (  ) [protected, slot]
void QmitkSimpleExampleView::OnRenderWindow3Clicked (  ) [protected, slot]
void QmitkSimpleExampleView::OnRenderWindow4Clicked (  ) [protected, slot]
void QmitkSimpleExampleView::OnTakeHighResolutionScreenshot (  ) [protected, slot]

takes screenshot of the 3D window in 4x resolution of the render window

Definition at line 224 of file QmitkSimpleExampleView.cpp.

References mitk::RenderWindowBase::GetRenderer(), mitk::BaseRenderer::GetVtkRenderer(), m_MultiWidget, QmitkStdMultiWidget::mitkWidget4, and TakeScreenshot().

Referenced by CreateConnections().

{
  QString fileName = QFileDialog::getSaveFileName(NULL, "Save screenshot to...", QDir::currentPath(), "JPEG file (*.jpg);;PNG file (*.png)");

  // only works correctly for 3D RenderWindow
  vtkRenderer* renderer = m_MultiWidget->mitkWidget4->GetRenderer()->GetVtkRenderer();
  if (renderer == NULL)
    return;
  this->TakeScreenshot(renderer, 4, fileName);
}
void QmitkSimpleExampleView::OnTakeScreenshot (  ) [protected, slot]

takes screenshot of the selected render window

Definition at line 235 of file QmitkSimpleExampleView.cpp.

References GetMovieRenderWindow(), mitk::RenderWindowBase::GetRenderer(), mitk::BaseRenderer::GetVtkRenderer(), and TakeScreenshot().

Referenced by CreateConnections().

{
  QString fileName = QFileDialog::getSaveFileName(NULL, "Save screenshot to...", QDir::currentPath(), "JPEG file (*.jpg);;PNG file (*.png)");
  
  QmitkRenderWindow* renWin = this->GetMovieRenderWindow();
  if (renWin == NULL)
    return;

  vtkRenderer* renderer = renWin->GetRenderer()->GetVtkRenderer();
  if (renderer == NULL)
    return;
  this->TakeScreenshot(renderer, 1, fileName);
}
void QmitkSimpleExampleView::StdMultiWidgetAvailable ( QmitkStdMultiWidget stdMultiWidget ) [virtual]

Called when a StdMultiWidget is available. Should not be used anymore, see GetActiveStdMultiWidget()

See also:
GetActiveStdMultiWidget()

Reimplemented from QmitkFunctionality.

Definition at line 68 of file QmitkSimpleExampleView.cpp.

References mitk::BaseController::GetSlice(), mitk::RenderWindowBase::GetSliceNavigationController(), mitk::BaseController::GetTime(), QmitkStdMultiWidget::GetTimeNavigationController(), m_Controls, m_MultiWidget, QmitkStdMultiWidget::mitkWidget1, QmitkStdMultiWidget::mitkWidget2, QmitkStdMultiWidget::mitkWidget3, Ui_QmitkSimpleExampleViewControls::movieNavigatorTime, Ui_QmitkSimpleExampleViewControls::sliceNavigatorFrontal, Ui_QmitkSimpleExampleViewControls::sliceNavigatorSagittal, Ui_QmitkSimpleExampleViewControls::sliceNavigatorTime, and Ui_QmitkSimpleExampleViewControls::sliceNavigatorTransversal.

void QmitkSimpleExampleView::StdMultiWidgetNotAvailable (  ) [virtual]

Called when no StdMultiWidget is available anymore. Should not be used anymore, see GetActiveStdMultiWidget()

See also:
GetActiveStdMultiWidget()

Reimplemented from QmitkFunctionality.

Definition at line 79 of file QmitkSimpleExampleView.cpp.

References m_MultiWidget.

{
  m_MultiWidget = NULL;
}
void QmitkSimpleExampleView::stereoSelectionChanged ( int  id ) [protected, slot]

qt slot for event processing from a qt widget defining the stereo mode of widget 4

Definition at line 140 of file QmitkSimpleExampleView.cpp.

References QmitkStdMultiWidget::DisableDepartmentLogo(), mitk::BaseRenderer::GetInstance(), m_MultiWidget, QmitkStdMultiWidget::mitkWidget4, and QmitkStdMultiWidget::RequestUpdate().

Referenced by CreateConnections().

{
  /* From vtkRenderWindow.h tells us about stereo rendering:
  Set/Get what type of stereo rendering to use. CrystalEyes mode uses frame-sequential capabilities available in OpenGL to drive LCD shutter glasses and stereo projectors. RedBlue mode is a simple type of stereo for use with red-blue glasses. Anaglyph mode is a superset of RedBlue mode, but the color output channels can be configured using the AnaglyphColorMask and the color of the original image can be (somewhat maintained using AnaglyphColorSaturation; the default colors for Anaglyph mode is red-cyan. Interlaced stereo  mode produces a composite image where horizontal lines alternate between left and right views. StereoLeft and StereoRight modes choose one or the other stereo view. Dresden mode is yet another stereoscopic interleaving.
  */

  vtkRenderWindow * vtkrenderwindow = m_MultiWidget->mitkWidget4->GetRenderWindow();

  // note: foreground vtkRenderers (at least the department logo renderer) produce errors in stereoscopic visualization.
  // Therefore, we disable the logo visualization during stereo rendering.
  switch(id)
  {
  case 0:
    vtkrenderwindow->StereoRenderOff();
    break;
  case 1:
    vtkrenderwindow->SetStereoTypeToRedBlue();
    vtkrenderwindow->StereoRenderOn();
    m_MultiWidget->DisableDepartmentLogo();
    break;
  case 2:
    vtkrenderwindow->SetStereoTypeToDresden();
    vtkrenderwindow->StereoRenderOn();
    m_MultiWidget->DisableDepartmentLogo();
    break;
  }


  mitk::BaseRenderer::GetInstance(m_MultiWidget->mitkWidget4->GetRenderWindow())->SetMapperID(2);
  m_MultiWidget->RequestUpdate();
}
void QmitkSimpleExampleView::TakeScreenshot ( vtkRenderer *  renderer,
unsigned int  magnificationFactor,
QString  fileName 
) [protected]

writes a screenshot in JPEG or PNG format to the file fileName

Definition at line 250 of file QmitkSimpleExampleView.cpp.

References QmitkStdMultiWidget::DisableColoredRectangles(), QmitkStdMultiWidget::DisableDepartmentLogo(), QmitkStdMultiWidget::DisableGradientBackground(), QmitkStdMultiWidget::EnableColoredRectangles(), QmitkStdMultiWidget::EnableDepartmentLogo(), QmitkStdMultiWidget::EnableGradientBackground(), and m_MultiWidget.

Referenced by OnTakeHighResolutionScreenshot(), and OnTakeScreenshot().

{
  if ((renderer == NULL) ||(magnificationFactor < 1) || fileName.isEmpty())
    return;

  bool doubleBuffering( renderer->GetRenderWindow()->GetDoubleBuffer() );
  renderer->GetRenderWindow()->DoubleBufferOff();

  vtkImageWriter* fileWriter;

  QFileInfo fi(fileName);
  QString suffix = fi.suffix();
  if (suffix.compare("png", Qt::CaseInsensitive) == 0)
  {
    fileWriter = vtkPNGWriter::New();
  }
  else  // default is jpeg
  {
    vtkJPEGWriter* w = vtkJPEGWriter::New();
    w->SetQuality(100);
    w->ProgressiveOff();
    fileWriter = w;
  }
  vtkRenderLargeImage* magnifier = vtkRenderLargeImage::New();
  magnifier->SetInput(renderer);
  magnifier->SetMagnification(magnificationFactor);
  //magnifier->Update();
  fileWriter->SetInput(magnifier->GetOutput());
  fileWriter->SetFileName(fileName.toLatin1());

  // vtkRenderLargeImage has problems with different layers, therefore we have to 
  // temporarily deactivate all other layers.
  // we set the background to white, because it is nicer than black...
  double oldBackground[3];
  renderer->GetBackground(oldBackground);
  double white[] = {1.0, 1.0, 1.0};
  renderer->SetBackground(white);
  m_MultiWidget->DisableColoredRectangles();
  m_MultiWidget->DisableDepartmentLogo();
  m_MultiWidget->DisableGradientBackground();

  fileWriter->Write();  
  fileWriter->Delete();  

  m_MultiWidget->EnableColoredRectangles();
  m_MultiWidget->EnableDepartmentLogo();
  m_MultiWidget->EnableGradientBackground();
  renderer->SetBackground(oldBackground);
  
  renderer->GetRenderWindow()->SetDoubleBuffer(doubleBuffering);
}

Member Data Documentation

Definition at line 101 of file QmitkSimpleExampleView.h.

Referenced by initNavigators().

const std::string QmitkSimpleExampleView::VIEW_ID = "org.mitk.views.simpleexample" [static]

Definition at line 46 of file QmitkSimpleExampleView.h.


The documentation for this class was generated from the following files:
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Defines