Public Slots | Signals | Public Member Functions | Protected Member Functions | Protected Attributes

QmitkTransferFunctionGeneratorWidget Class Reference

#include <QmitkTransferFunctionGeneratorWidget.h>

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

List of all members.

Public Slots

void OnSavePreset ()
void OnLoadPreset ()
void OnMitkInternalPreset (int mode)
void OnDeltaLevelWindow (int dx, int dy)
void OnDeltaThreshold (int dx, int dy)

Signals

void SignalTransferFunctionModeChanged (int)
void SignalUpdateCanvas ()

Public Member Functions

 QmitkTransferFunctionGeneratorWidget (QWidget *parent=0, Qt::WindowFlags f=0)
 ~QmitkTransferFunctionGeneratorWidget ()
void SetDataNode (mitk::DataNode *node)

Protected Member Functions

std::string ReduceFileName (std::string fileNameLong)

Protected Attributes

mitk::TransferFunctionProperty::Pointer tfpToChange
int histoMinimum
int histoMaximum
int thPos
int thDelta
const mitk::Image::HistogramTypehistoGramm
QString presetFileName

Detailed Description

Definition at line 31 of file QmitkTransferFunctionGeneratorWidget.h.


Constructor & Destructor Documentation

QmitkTransferFunctionGeneratorWidget::QmitkTransferFunctionGeneratorWidget ( QWidget *  parent = 0,
Qt::WindowFlags  f = 0 
)

Definition at line 42 of file QmitkTransferFunctionGeneratorWidget.cpp.

References histoGramm, Ui_QmitkTransferFunctionGeneratorWidget::m_CrossLevelWindow, Ui_QmitkTransferFunctionGeneratorWidget::m_CrossThreshold, Ui_QmitkTransferFunctionGeneratorWidget::m_LoadPreset, Ui_QmitkTransferFunctionGeneratorWidget::m_SavePreset, Ui_QmitkTransferFunctionGeneratorWidget::m_TransferFunctionComboBox, numPresetNames, OnDeltaLevelWindow(), OnDeltaThreshold(), OnLoadPreset(), OnMitkInternalPreset(), OnSavePreset(), presetFileName, presetNames, Ui_QmitkTransferFunctionGeneratorWidget::setupUi(), and thDelta.

                     :
  QWidget(parent, f)
{
  histoGramm = NULL;

  this->setupUi(this);

  // LevelWindow Tab
  {
    connect( m_CrossLevelWindow, SIGNAL( SignalDeltaMove( int, int ) ), this, SLOT( OnDeltaLevelWindow( int, int ) ) );
  }
  
  // Threshold Tab
  {
    connect( m_CrossThreshold, SIGNAL( SignalDeltaMove( int, int ) ), this, SLOT( OnDeltaThreshold( int, int ) ) );
    thDelta = 100;
  }
   
  // Presets Tab
  {
    for(int r=0; r< numPresetNames; r++)
        m_TransferFunctionComboBox->addItem( QString::fromLocal8Bit(presetNames[r]));
    
    
    connect( m_TransferFunctionComboBox, SIGNAL( activated( int ) ), this, SLOT( OnMitkInternalPreset( int ) ) );

    connect( m_SavePreset, SIGNAL( clicked() ), this, SLOT( OnSavePreset() ) );
    
    connect( m_LoadPreset, SIGNAL( clicked() ), this, SLOT( OnLoadPreset() ) );
  }
  
  presetFileName = ".";
}
QmitkTransferFunctionGeneratorWidget::~QmitkTransferFunctionGeneratorWidget (  )

Definition at line 449 of file QmitkTransferFunctionGeneratorWidget.cpp.

{
}

Member Function Documentation

void QmitkTransferFunctionGeneratorWidget::OnDeltaLevelWindow ( int  dx,
int  dy 
) [slot]

Definition at line 239 of file QmitkTransferFunctionGeneratorWidget.cpp.

References mitk::RenderingManager::GetInstance(), histoMaximum, histoMinimum, Ui_QmitkTransferFunctionGeneratorWidget::m_InfoLevelWindow, SignalUpdateCanvas(), stepFunctionGlocke(), tfpToChange, thDelta, thPos, and transformationGlocke().

Referenced by QmitkTransferFunctionGeneratorWidget().

{
  //std::string infoText;
  
//  m_InfoThreshold->setText( QString( x.c_str() ) );

  if(tfpToChange.IsNull())
    return;

  thPos += dx;
  thDelta -= dy;
  
  if(thDelta < 1)
    thDelta = 1;
    
  if(thDelta > 1024)
    thDelta = 1024;
    
  if(thPos < histoMinimum)
    thPos = histoMinimum;
    
  if(thPos > histoMaximum)
    thPos = histoMaximum;

  std::stringstream ss;
  
  ss << "Click on the cross and move the mouse"<<"\n"
     <<"\n"
     << "center at " << thPos << "\n"
     << "width " << thDelta * 2;
     
  m_InfoLevelWindow->setText( QString( ss.str().c_str() ) );

  mitk::TransferFunction::Pointer tf = tfpToChange->GetValue();
  
  // grayvalue->opacity
  {   
    vtkPiecewiseFunction *f=tf->GetScalarOpacityFunction();
    f->RemoveAllPoints();
    
    for( int r = 0; r<= 6; r++)
    {
      double relPos = (r / 6.0) * 0.5 + 0.5;
      f->AddPoint(thPos+thDelta*(-transformationGlocke(relPos)),stepFunctionGlocke(relPos));
      f->AddPoint(thPos+thDelta*( transformationGlocke(relPos)),stepFunctionGlocke(relPos));
    }

    f->Modified();
  }  

  // gradient at grayvalue->opacity
  {  
    vtkPiecewiseFunction *f=tf->GetGradientOpacityFunction();
    f->RemoveAllPoints();
    
    
    f->AddPoint( 0, 1.0 );
    f->Modified();
  }
/*
  // grayvalue->color
  {  
    vtkColorTransferFunction *ctf=tf->GetColorTransferFunction();
    ctf->RemoveAllPoints();
    ctf->AddRGBPoint( 0, 1.0, 1.0, 1.0 );
    ctf->Modified();
  }
  */
  tf->Modified();

  mitk::RenderingManager::GetInstance()->RequestUpdateAll();
  emit SignalUpdateCanvas();
}
void QmitkTransferFunctionGeneratorWidget::OnDeltaThreshold ( int  dx,
int  dy 
) [slot]

Definition at line 323 of file QmitkTransferFunctionGeneratorWidget.cpp.

References mitk::RenderingManager::GetInstance(), histoMaximum, histoMinimum, Ui_QmitkTransferFunctionGeneratorWidget::m_InfoThreshold, SignalUpdateCanvas(), stepFunctionThreshold(), tfpToChange, thDelta, and thPos.

Referenced by QmitkTransferFunctionGeneratorWidget().

{

  if(tfpToChange.IsNull())
    return;

  thPos += dx;
  thDelta += dy;
  
  if(thDelta < 1)
    thDelta = 1;
    
  if(thDelta > 1024)
    thDelta = 1024;
    
  if(thPos < histoMinimum)
    thPos = histoMinimum;
    
  if(thPos > histoMaximum)
    thPos = histoMaximum;
          /*
  MITK_INFO << "threshold pos: " << thPos << " delta: " << thDelta;

  MITK_INFO << "histoMinimum: " << histoMinimum << " max: " << histoMaximum;
            */
 

  std::stringstream ss;
  
  ss << "Click on the cross and move the mouse"<<"\n"
     <<"\n"
     << "threshold at " << thPos << "\n"
     << "width " << thDelta * 2;
     
  m_InfoThreshold->setText( QString( ss.str().c_str() ) );

  mitk::TransferFunction::Pointer tf = tfpToChange->GetValue();
  
  // grayvalue->opacity
  {   
    vtkPiecewiseFunction *f=tf->GetScalarOpacityFunction();
    f->RemoveAllPoints();
    
    for( int r = 1; r<= 4; r++)
    {
      double relPos = r / 4.0;
      f->AddPoint(thPos+thDelta*(-relPos),stepFunctionThreshold(-relPos));
      f->AddPoint(thPos+thDelta*( relPos),stepFunctionThreshold( relPos));
    }
    f->Modified();
  }  

  // gradient at grayvalue->opacity
  {  
    vtkPiecewiseFunction *f=tf->GetGradientOpacityFunction();
    f->RemoveAllPoints();
    f->AddPoint( 0, 1.0 );
    f->Modified();
  }
/*
  // grayvalue->color
  {  
    vtkColorTransferFunction *ctf=tf->GetColorTransferFunction();
    ctf->RemoveAllPoints();
    ctf->AddRGBPoint( 0, 1.0, 1.0, 1.0 );
    ctf->Modified();
  }
  */

  tf->Modified();
  mitk::RenderingManager::GetInstance()->RequestUpdateAll();
  emit SignalUpdateCanvas();

}
void QmitkTransferFunctionGeneratorWidget::OnLoadPreset (  ) [slot]

Definition at line 154 of file QmitkTransferFunctionGeneratorWidget.cpp.

References mitk::TransferFunctionPropertyDeserializer::DeserializeTransferFunction(), mitk::RenderingManager::GetInstance(), Ui_QmitkTransferFunctionGeneratorWidget::m_InfoPreset, MITK_INFO, presetFileName, ReduceFileName(), SignalUpdateCanvas(), and tfpToChange.

Referenced by QmitkTransferFunctionGeneratorWidget().

{
  if(tfpToChange.IsNull())
    return;

  std::string fileName;
  std::string fileNameOutput;

  presetFileName = QFileDialog::getOpenFileName( this,"Choose a file to open the transferfunction from",presetFileName, "Transferfunction (*.xml)"  );

  fileName=presetFileName.toLocal8Bit().constData();

  MITK_INFO << "Loading Transferfunction from path: " << fileName;
  
  fileNameOutput= ReduceFileName(fileName);

  mitk::TransferFunction::Pointer tf = mitk::TransferFunctionPropertyDeserializer::DeserializeTransferFunction(fileName.c_str());

  if(tf.IsNotNull())
  {
    /*
    if( histoGramm )
      tf->InitializeByItkHistogram( histoGramm );
    */
    
    tfpToChange->SetValue( tf );
   
    m_InfoPreset->setText( QString( (std::string("loaded ")+ fileNameOutput).c_str() ) );
    mitk::RenderingManager::GetInstance()->RequestUpdateAll();
    emit SignalUpdateCanvas();

    /*
    vtkFloatingPointType* dp = tf->GetScalarOpacityFunction()->GetDataPointer();
    for (int i = 0; i < tf->GetScalarOpacityFunction()->GetSize(); i++)
    {
      MITK_INFO << "x: " << dp[i * 2] << " y: " << dp[i * 2 + 1];
    }
    */
  }
}
void QmitkTransferFunctionGeneratorWidget::OnMitkInternalPreset ( int  mode ) [slot]

Definition at line 195 of file QmitkTransferFunctionGeneratorWidget.cpp.

References mitk::RenderingManager::GetInstance(), Ui_QmitkTransferFunctionGeneratorWidget::m_InfoPreset, Ui_QmitkTransferFunctionGeneratorWidget::m_TransferFunctionComboBox, mitk::TransferFunctionInitializer::New(), presetNames, SignalUpdateCanvas(), and tfpToChange.

Referenced by QmitkTransferFunctionGeneratorWidget().

{
  if(tfpToChange.IsNull())
    return;

  //first item is only information
  if( --mode == -1 )
    return;

  //revert to first item
  m_TransferFunctionComboBox->setCurrentIndex( 0 );

  // -- Creat new TransferFunction
  mitk::TransferFunctionInitializer::Pointer tfInit = mitk::TransferFunctionInitializer::New(tfpToChange->GetValue());
  tfInit->SetTransferFunctionMode(mode);
  mitk::RenderingManager::GetInstance()->RequestUpdateAll();
  emit SignalUpdateCanvas();
  m_InfoPreset->setText( QString( (std::string("selected ")+ std::string(presetNames[mode+1])).c_str() ) );
}
void QmitkTransferFunctionGeneratorWidget::OnSavePreset (  ) [slot]

Definition at line 80 of file QmitkTransferFunctionGeneratorWidget.cpp.

References Ui_QmitkTransferFunctionGeneratorWidget::m_InfoPreset, MITK_INFO, presetFileName, ReduceFileName(), mitk::TransferFunctionPropertySerializer::SerializeTransferFunction(), and tfpToChange.

Referenced by QmitkTransferFunctionGeneratorWidget().

{
  if(tfpToChange.IsNull())
    return;
    
  mitk::TransferFunction::Pointer tf = tfpToChange->GetValue();

  std::string fileName;
  std::string fileNameOutput;

  presetFileName = QFileDialog::getSaveFileName( this,"Choose a filename to save the transferfunction",presetFileName, "Transferfunction (*.xml)" );
  

  fileName=presetFileName.toLocal8Bit().constData();
 
  MITK_INFO << "Saving Transferfunction under path: " << fileName;
  
  fileNameOutput= ReduceFileName(fileName);

  if ( mitk::TransferFunctionPropertySerializer::SerializeTransferFunction( fileName.c_str(),  tf ))
    m_InfoPreset->setText( QString( (std::string("saved ")+ fileNameOutput).c_str() ) );
  else
    m_InfoPreset->setText( QString( std::string("saving failed").c_str() ) );
                                           /*
  FILE *f=fopen("c:\\temp.txt","w");
  

  // grayvalue -> opacity
  {  
    mitk::TransferFunction::ControlPoints scalarOpacityPoints = tf->GetScalarOpacityPoints();
    fprintf(f,"// grayvalue->opacity \n"
              "{\n"
              "  vtkPiecewiseFunction *f=tf->GetScalarOpacityFunction();\n"
              "  f->RemoveAllPoints();\n");
    for ( mitk::TransferFunction::ControlPoints::iterator iter = scalarOpacityPoints.begin(); iter != scalarOpacityPoints.end(); ++iter )
    fprintf(f,"  f->AddPoint(%f,%f);\n",iter->first, iter->second);
    fprintf(f,"  f->Modified();\n"
              "}\n");
  }

  // gradient
  {
    mitk::TransferFunction::ControlPoints gradientOpacityPoints = tf->GetGradientOpacityPoints();
    fprintf(f,"// gradient at grayvalue->opacity \n"
              "{\n"
              "  vtkPiecewiseFunction *f=tf->GetGradientOpacityFunction();\n"
              "  f->RemoveAllPoints();\n");
    for ( mitk::TransferFunction::ControlPoints::iterator iter = gradientOpacityPoints.begin(); iter != gradientOpacityPoints.end(); ++iter )
    fprintf(f,"  f->AddPoint(%f,%f);\n",iter->first, iter->second);
    fprintf(f,"  f->Modified();\n"
              "}\n");
  }

  // color
  {
    mitk::TransferFunction::RGBControlPoints points = tf->GetRGBPoints();

    fprintf(f,"// grayvalue->color \n"
              "{\n"
              "  vtkColorTransferFunction *f=tf->GetColorTransferFunction();\n"
              "  f->RemoveAllPoints();\n");
    for ( mitk::TransferFunction::RGBControlPoints::iterator iter = points.begin(); iter != points.end(); ++iter )
    fprintf(f,"  f->AddRGBPoint(%f,%f,%f,%f);\n",iter->first, iter->second[0], iter->second[1], iter->second[2]);
    fprintf(f,"  f->Modified();\n"
              "}\n");
  }
  
  fclose(f);
  
  MITK_INFO << "saved under C:\\temp.txt";
                                             */
}
std::string QmitkTransferFunctionGeneratorWidget::ReduceFileName ( std::string  fileNameLong ) [protected]

Definition at line 398 of file QmitkTransferFunctionGeneratorWidget.cpp.

Referenced by OnLoadPreset(), and OnSavePreset().

{
  if (fileNameLong.length()< 40)
    return fileNameLong;
  
  //MITK_INFO <<" fileName > 20 ";
  
  std::string fileNameShort;
  std::string fileNameRevert;
  
  for(unsigned int i=0; i< fileNameLong.length(); i++)
  {
    if(i<3)
    {
      char x= fileNameLong[i];
      fileNameShort= fileNameShort+x;
    }
    if(i==3)
    {
      fileNameShort= fileNameShort+"...";
      break;
    }
  }
  //MITK_INFO <<" fileNameShort: " << fileNameShort.c_str();
  unsigned int len( fileNameLong.length() );
  for(unsigned int i=len-1; i <= len; i--)
  {
    std::string x=std::string("")+fileNameLong[i];
    
    if ( x.compare("/")==0 || x.compare("\\")==0)
    {
      fileNameRevert= "/" + fileNameRevert;
      break;
    }
      
    if (i>=fileNameLong.length()-24)
    {
      fileNameRevert= x+ fileNameRevert;
      //MITK_INFO <<" fileNameRevert: " << fileNameRevert.c_str();
    }
    else
    {
      fileNameRevert= "/..." + fileNameRevert;
      break;
    }
   
  }
  
  return fileNameShort+fileNameRevert;
}
void QmitkTransferFunctionGeneratorWidget::SetDataNode ( mitk::DataNode node )

Definition at line 454 of file QmitkTransferFunctionGeneratorWidget.cpp.

References mitk::DataNode::GetData(), mitk::DataNode::GetProperty(), histoGramm, histoMaximum, histoMinimum, Ui_QmitkTransferFunctionGeneratorWidget::m_InfoPreset, MITK_WARN, mitk::TransferFunctionProperty::New(), mitk::DataNode::SetProperty(), tfpToChange, and thPos.

{
  histoGramm = NULL;

  if (node)
  {
    tfpToChange = dynamic_cast<mitk::TransferFunctionProperty*>(node->GetProperty("TransferFunction"));
    
    if(!tfpToChange)
    {
      if (! dynamic_cast<mitk::Image*>(node->GetData()))
      {
        MITK_WARN << "QmitkTransferFunctionGeneratorWidget::SetDataNode called with non-image node";
        return;
      }
      
      node->SetProperty("TransferFunction", tfpToChange = mitk::TransferFunctionProperty::New() );
      dynamic_cast<mitk::TransferFunctionProperty*>(node->GetProperty("TransferFunction"));
    }
    
    mitk::TransferFunction::Pointer tf = tfpToChange->GetValue();

    if( mitk::Image* image = dynamic_cast<mitk::Image*>( node->GetData() ) )
    {
//      tf->InitializeByItkHistogram( histoGramm = image->GetScalarHistogram() );
      histoMinimum= image->GetScalarValueMin();
      histoMaximum= image->GetScalarValueMax();
    }
            
    thPos = ( histoMinimum + histoMaximum ) / 2; 
    
  }
  else
  {
    tfpToChange = 0;
    m_InfoPreset->setText( QString( "" ) );
    
  }
}
void QmitkTransferFunctionGeneratorWidget::SignalTransferFunctionModeChanged ( int   ) [signal]
void QmitkTransferFunctionGeneratorWidget::SignalUpdateCanvas (  ) [signal]

Member Data Documentation


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