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

QmitkVolumetryView Class Reference
[Internal]

QmitkVolumetryView. More...

#include <QmitkVolumetryView.h>

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

List of all members.

Public Member Functions

 QmitkVolumetryView ()
virtual ~QmitkVolumetryView ()
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.volumetry"

Protected Slots

void OnCalculateVolume ()
void OnTimeSeriesButtonClicked ()
void OnThresholdSliderChanged (int value)
void OnSaveCsvButtonClicked ()
void OnImageSelected (const mitk::DataNode *item)

Protected Member Functions

mitk::ImageGetImage ()
mitk::DataNodeGetOverlayNode ()
void CreateOverlayChild ()
void UpdateSliderLabel ()
void UpdateSlider ()
const mitk::DataNodeGetImageNode ()

Protected Attributes

Ui::QmitkVolumetryViewControls * m_Controls
QmitkStdMultiWidgetm_MultiWidget
mitk::WeakPointer< mitk::DataNodem_SelectedDataNode
 store weak pointer of the DataNode
mitk::DataNode::Pointer m_OverlayNode
mitk::DataStorage::Pointer m_DataStorage

Detailed Description

QmitkVolumetryView.

Document your class here.

See also:
QmitkFunctionality

Definition at line 38 of file QmitkVolumetryView.h.


Constructor & Destructor Documentation

QmitkVolumetryView::QmitkVolumetryView (  )

Definition at line 42 of file QmitkVolumetryView.cpp.

: QmitkFunctionality(),
  m_Controls(NULL),
  m_MultiWidget(NULL)
{
  //m_DataStorage = this->GetDefaultDataStorage();
}
QmitkVolumetryView::~QmitkVolumetryView (  ) [virtual]

Definition at line 50 of file QmitkVolumetryView.cpp.

{
}

Member Function Documentation

void QmitkVolumetryView::Activated (  ) [virtual]

Called when the functionality is activated.

Reimplemented from QmitkFunctionality.

Definition at line 96 of file QmitkVolumetryView.cpp.

void QmitkVolumetryView::CreateConnections (  ) [virtual]

Creation of the connections of main and control widget.

Definition at line 79 of file QmitkVolumetryView.cpp.

References m_Controls, OnCalculateVolume(), OnImageSelected(), OnSaveCsvButtonClicked(), QmitkFunctionality::OnSelectionChanged(), OnThresholdSliderChanged(), and OnTimeSeriesButtonClicked().

Referenced by CreateQtPartControl().

{
  if ( m_Controls )
  {

    connect( m_Controls->m_ImageSelector, SIGNAL(OnSelectionChanged(const mitk::DataNode*)), this, SLOT(OnImageSelected(const mitk::DataNode*)) );

    //connect( (QObject*)(m_Controls->m_Button), SIGNAL(clicked()), this, SLOT(DoSomething()) );
    connect( (QObject*)(m_Controls->m_ThresholdSlider), SIGNAL(valueChanged(int)), this, SLOT(OnThresholdSliderChanged(int)) );
    //connect( (QObject*)(m_Controls->m_ThresholdLineEdit), SIGNAL(valueChanged(int)), this, SLOT(OnThresholdLineEdit(int)) );
    //connect( (QObject*)(m_Controls->m_TextEdit), SIGNAL(valueChanged(int)), this, SLOT(OnTextEditChanged(int)) );
    connect( (QObject*)(m_Controls->m_CalcButton), SIGNAL(clicked()), this, SLOT(OnCalculateVolume()) ); 
    connect( (QObject*)(m_Controls->m_TimeSeriesButton), SIGNAL(clicked()), this, SLOT(OnTimeSeriesButtonClicked()) ); 
    connect( (QObject*)(m_Controls->m_SaveCsvButton), SIGNAL(clicked()), this, SLOT(OnSaveCsvButtonClicked()) ); 
  }
}
void QmitkVolumetryView::CreateOverlayChild (  ) [protected]

Definition at line 345 of file QmitkVolumetryView.cpp.

References QmitkFunctionality::GetDefaultDataStorage(), mitk::WeakPointer< TObjectType >::IsNotNull(), m_Controls, m_OverlayNode, m_SelectedDataNode, mitk::StringProperty::New(), and mitk::DataNode::New().

Referenced by OnImageSelected().

{
  if (m_SelectedDataNode.IsNotNull())
  {
    m_OverlayNode = mitk::DataNode::New();
    mitk::StringProperty::Pointer nameProp = mitk::StringProperty::New("volume threshold overlay image" );
    m_OverlayNode->SetProperty( "reslice interpolation", m_SelectedDataNode->GetProperty("reslice interpolation") );
    m_OverlayNode->SetProperty( "name", nameProp );
    m_OverlayNode->SetData(m_SelectedDataNode->GetData());
    m_OverlayNode->SetColor(0.0,1.0,0.0);
    m_OverlayNode->SetOpacity(.25);
    int layer = 0;
    m_SelectedDataNode->GetIntProperty("layer", layer);
    m_OverlayNode->SetIntProperty("layer", layer+1);
    m_OverlayNode->SetLevelWindow(mitk::LevelWindow(m_Controls->m_ThresholdSlider->value(),1));


    this->GetDefaultDataStorage()->Add(m_OverlayNode);

    //mitk::DataTreeIteratorClone iteratorClone = m_DataTreeIteratorClone;
    //while ( !iteratorClone->IsAtEnd() )
    //{
    //  mitk::DataNode::Pointer node = iteratorClone->Get();
    //  if (  node == m_SelectedDataNode )
    //  {
    //    iteratorClone->Add(m_OverlayNode);
    //    break;
    //  }
    //  ++iteratorClone;
    //}
  }
}
void QmitkVolumetryView::CreateQtPartControl ( QWidget *  parent ) [virtual]

Implements berry::QtViewPart.

Definition at line 54 of file QmitkVolumetryView.cpp.

References CreateConnections(), QmitkFunctionality::GetDefaultDataStorage(), m_Controls, and mitk::NodePredicateDataType::New().

{
  if (!m_Controls)
  {
    // create GUI widgets
    m_Controls = new Ui::QmitkVolumetryViewControls;
    m_Controls->setupUi(parent);
    this->CreateConnections();

    // define data type for combobox
    m_Controls->m_ImageSelector->SetDataStorage( this->GetDefaultDataStorage() );
    m_Controls->m_ImageSelector->SetPredicate( mitk::NodePredicateDataType::New("Image") );
  }
}
void QmitkVolumetryView::Deactivated (  ) [virtual]

Only called when IsExclusiveFunctionality() returns true.

See also:
IsExclusiveFunctionality()

Reimplemented from QmitkFunctionality.

Definition at line 101 of file QmitkVolumetryView.cpp.

mitk::Image * QmitkVolumetryView::GetImage (  ) [protected]

Definition at line 388 of file QmitkVolumetryView.cpp.

References m_SelectedDataNode.

{
  return dynamic_cast<mitk::Image*>(m_SelectedDataNode->GetData());
}
const mitk::DataNode * QmitkVolumetryView::GetImageNode (  ) [protected]

Definition at line 309 of file QmitkVolumetryView.cpp.

References m_SelectedDataNode.

{
  return m_SelectedDataNode;
}
mitk::DataNode * QmitkVolumetryView::GetOverlayNode (  ) [protected]

Definition at line 380 of file QmitkVolumetryView.cpp.

References m_OverlayNode.

{
  return m_OverlayNode;
}
void QmitkVolumetryView::OnCalculateVolume (  ) [protected, slot]

Definition at line 264 of file QmitkVolumetryView.cpp.

References mitk::Image::GetDimension(), mitk::WeakPointer< TObjectType >::IsNotNull(), m_Controls, m_SelectedDataNode, and mitk::VolumeCalculator::New().

Referenced by CreateConnections().

{
  if (m_SelectedDataNode.IsNotNull() )
  {
    mitk::Image* image = dynamic_cast<mitk::Image*>(m_SelectedDataNode->GetData());
    if (image)
    {
      std::cout << "Dimension:" << image->GetDimension() << std::endl;
      std::cout << "Dimension[3]:" << image->GetDimension(3) << std::endl;
      mitk::VolumeCalculator::Pointer volCalc = mitk::VolumeCalculator::New();
      volCalc->SetImage(image);
      volCalc->SetThreshold(m_Controls->m_ThresholdSlider->value());
      volCalc->ComputeVolume();
      std::stringstream vs;
      vs << volCalc->GetVolume() << " ml";
      m_Controls->m_Result->setText(vs.str().c_str() );
    }
  }
}
void QmitkVolumetryView::OnImageSelected ( const mitk::DataNode item ) [protected, slot]

Definition at line 107 of file QmitkVolumetryView.cpp.

References CreateOverlayChild(), mitk::DataNode::GetData(), QmitkFunctionality::GetDefaultDataStorage(), mitk::Image::GetDimension(), mitk::RenderingManager::GetInstance(), mitk::Image::GetScalarValue2ndMin(), mitk::Image::GetScalarValueMaxNoRecompute(), int(), mitk::BaseData::IsInitialized(), mitk::WeakPointer< TObjectType >::IsNotNull(), m_Controls, m_OverlayNode, m_SelectedDataNode, and UpdateSlider().

Referenced by CreateConnections().

{
  // nothing selected (NULL selection)
  if( item == NULL  || item->GetData() == NULL )
    return;

  if( item->GetData()->GetSource() == NULL ) 
  {
    m_SelectedDataNode = 0;
    return; 
  }

  m_SelectedDataNode = const_cast<mitk::DataNode*>(item);

  std::cout << "Selected mitk::Image at address " << m_SelectedDataNode->GetData() << std::endl;


  if(item == m_OverlayNode.GetPointer())
    return;

  if (m_OverlayNode)
  {
    this->GetDefaultDataStorage()->Remove(m_OverlayNode);
    // remove it from the tree
    //mitk::DataTreeIteratorClone overlayIt = mitk::DataTreeHelper::FindIteratorToNode(m_DataTreeIteratorClone->GetTree(),m_OverlayNode);
    //if (overlayIt.IsNotNull()) { overlayIt->Remove(); }
    m_OverlayNode = NULL;
  }

  this->CreateOverlayChild();
  
  //std::string name;
  //if (node->GetName(name))
  //{
  //  //    m_TreeNodeNameLabel->setText( name.c_str() );
  //}

  m_Controls->m_CalcButton->setEnabled(false);
  m_Controls->m_TimeSeriesButton->setEnabled(false);
  m_Controls->m_SaveCsvButton->setEnabled(false);
  m_Controls->m_TextEdit->clear();

  if (m_SelectedDataNode.IsNotNull() )
  {
    mitk::Image* image = dynamic_cast<mitk::Image*>(m_SelectedDataNode->GetData());
    image->Update();
    if (image && image->IsInitialized())
    {
      if (image->GetDimension() == 4)
      {
        m_Controls->m_TimeSeriesButton->setEnabled(true);
      }
      else
      {
        m_Controls->m_CalcButton->setEnabled(true);
      }
      int minVal = (int)image->GetScalarValue2ndMin();
      int maxVal = (int)image->GetScalarValueMaxNoRecompute();
      if (minVal == maxVal)
        --minVal;
      m_Controls->m_ThresholdSlider->setMinimum(minVal);
      m_Controls->m_ThresholdSlider->setMaximum(maxVal);
      m_Controls->m_ThresholdSlider->setEnabled(true);
      this->UpdateSlider();
      mitk::RenderingManager::GetInstance()->RequestUpdateAll();
    }
  }
}
void QmitkVolumetryView::OnSaveCsvButtonClicked (  ) [protected, slot]

Definition at line 392 of file QmitkVolumetryView.cpp.

References m_Controls, and QmitkFunctionality::m_Parent.

Referenced by CreateConnections().

{
  static QString lastSavePath = QDir::homePath();
  

  QString s = QFileDialog::getSaveFileName( this->m_Parent, "Save as..", lastSavePath, "CSV Files (*.csv)");
    /*"Save file dialog"
    "Choose a filename to save under" );*/


  if (! s.isEmpty())
  {
    lastSavePath = s;
    QFile saveFile(s);
    
    if ( saveFile.open(QIODevice::WriteOnly))
    {
      QTextStream stream( &saveFile );
      stream << m_Controls->m_TextEdit->toPlainText().replace('\t',';');
      saveFile.close();
    }
    else
    {
      // QMessageBox::critical(NULL,"Save Error!",QString("Saving of CSV failed! Couldn't open output file \"") + saveFile + QString("\""),QMessageBox:Ok,QMessageBox::NoButton);
      //QMessageBox::critical(NULL,"Save Error!","Saving of CSV failed! Couldn't open output file \"" + saveFile.name() +"\"",QMessageBox::Ok,QMessageBox::NoButton);
    }
  }
}
void QmitkVolumetryView::OnThresholdSliderChanged ( int  value ) [protected, slot]

Definition at line 334 of file QmitkVolumetryView.cpp.

References mitk::RenderingManager::GetInstance(), m_OverlayNode, and UpdateSlider().

Referenced by CreateConnections().

{
  if (m_OverlayNode)
  {
    m_OverlayNode->SetLevelWindow(mitk::LevelWindow(value,1));
    mitk::RenderingManager::GetInstance()->RequestUpdateAll();

    this->UpdateSlider();
  }
}
void QmitkVolumetryView::OnTimeSeriesButtonClicked (  ) [protected, slot]

Definition at line 284 of file QmitkVolumetryView.cpp.

References mitk::WeakPointer< TObjectType >::IsNotNull(), m_Controls, m_SelectedDataNode, and mitk::VolumeCalculator::New().

Referenced by CreateConnections().

{
  if (m_SelectedDataNode.IsNotNull() )
  {
    mitk::Image* image = dynamic_cast<mitk::Image*>(m_SelectedDataNode->GetData());
    if (image)
    {
      mitk::VolumeCalculator::Pointer volCalc = mitk::VolumeCalculator::New();
      volCalc->SetImage(image);
      volCalc->SetThreshold(m_Controls->m_ThresholdSlider->value());
      volCalc->ComputeVolume();
      std::vector<float> volumes = volCalc->GetVolumes();
      std::stringstream vs;
      int timeStep = 0;
      for (std::vector<float>::iterator it = volumes.begin(); it != volumes.end(); it++)
      {
        vs << timeStep++ << "\t" << *it << std::endl;
      }
      m_Controls->m_TextEdit->setText(vs.str().c_str());
      m_Controls->m_TextEdit->setTabStopWidth(20);
      m_Controls->m_SaveCsvButton->setEnabled(true);
    }
  }
}
void QmitkVolumetryView::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 69 of file QmitkVolumetryView.cpp.

References m_MultiWidget.

{
  m_MultiWidget = &stdMultiWidget;
}
void QmitkVolumetryView::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 74 of file QmitkVolumetryView.cpp.

References m_MultiWidget.

{
  m_MultiWidget = NULL;
}
void QmitkVolumetryView::UpdateSlider (  ) [protected]

Definition at line 314 of file QmitkVolumetryView.cpp.

References int(), mitk::WeakPointer< TObjectType >::IsNotNull(), m_Controls, and m_SelectedDataNode.

Referenced by OnImageSelected(), OnThresholdSliderChanged(), and UpdateSliderLabel().

{
  if (m_SelectedDataNode.IsNotNull() && dynamic_cast<mitk::Image*>(m_SelectedDataNode->GetData()))
  {
    int intSliderValue = (int)m_Controls->m_ThresholdSlider->value();
    QString stringSliderValue;
    stringSliderValue.setNum(intSliderValue);
    m_Controls->m_ThresholdLineEdit->setText(stringSliderValue);
  }
}
void QmitkVolumetryView::UpdateSliderLabel (  ) [protected]

Definition at line 326 of file QmitkVolumetryView.cpp.

References m_Controls, and UpdateSlider().

{
  int sliderValue = atoi(m_Controls->m_ThresholdLineEdit->text().toLatin1());
  m_Controls->m_ThresholdSlider->setValue(sliderValue);
  this->UpdateSlider();

}

Member Data Documentation

Ui::QmitkVolumetryViewControls* QmitkVolumetryView::m_Controls [protected]

Definition at line 106 of file QmitkVolumetryView.h.

Definition at line 98 of file QmitkVolumetryView.h.

Referenced by StdMultiWidgetAvailable(), and StdMultiWidgetNotAvailable().

store weak pointer of the DataNode

Definition at line 101 of file QmitkVolumetryView.h.

Referenced by CreateOverlayChild(), GetImage(), GetImageNode(), OnCalculateVolume(), OnImageSelected(), OnTimeSeriesButtonClicked(), and UpdateSlider().

const std::string QmitkVolumetryView::VIEW_ID = "org.mitk.views.volumetry" [static]

Definition at line 46 of file QmitkVolumetryView.h.


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