#include <QmitkTransferFunctionGeneratorWidget.h>
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::HistogramType * | histoGramm |
QString | presetFileName |
Definition at line 31 of file QmitkTransferFunctionGeneratorWidget.h.
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.
{ }
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] |
Referenced by OnDeltaLevelWindow(), OnDeltaThreshold(), OnLoadPreset(), and OnMitkInternalPreset().
const mitk::Image::HistogramType* QmitkTransferFunctionGeneratorWidget::histoGramm [protected] |
Definition at line 67 of file QmitkTransferFunctionGeneratorWidget.h.
Referenced by QmitkTransferFunctionGeneratorWidget(), and SetDataNode().
int QmitkTransferFunctionGeneratorWidget::histoMaximum [protected] |
Definition at line 62 of file QmitkTransferFunctionGeneratorWidget.h.
Referenced by OnDeltaLevelWindow(), OnDeltaThreshold(), and SetDataNode().
int QmitkTransferFunctionGeneratorWidget::histoMinimum [protected] |
Definition at line 61 of file QmitkTransferFunctionGeneratorWidget.h.
Referenced by OnDeltaLevelWindow(), OnDeltaThreshold(), and SetDataNode().
QString QmitkTransferFunctionGeneratorWidget::presetFileName [protected] |
Definition at line 69 of file QmitkTransferFunctionGeneratorWidget.h.
Referenced by OnLoadPreset(), OnSavePreset(), and QmitkTransferFunctionGeneratorWidget().
mitk::TransferFunctionProperty::Pointer QmitkTransferFunctionGeneratorWidget::tfpToChange [protected] |
Definition at line 59 of file QmitkTransferFunctionGeneratorWidget.h.
Referenced by OnDeltaLevelWindow(), OnDeltaThreshold(), OnLoadPreset(), OnMitkInternalPreset(), OnSavePreset(), and SetDataNode().
int QmitkTransferFunctionGeneratorWidget::thDelta [protected] |
Definition at line 65 of file QmitkTransferFunctionGeneratorWidget.h.
Referenced by OnDeltaLevelWindow(), OnDeltaThreshold(), and QmitkTransferFunctionGeneratorWidget().
int QmitkTransferFunctionGeneratorWidget::thPos [protected] |
Definition at line 64 of file QmitkTransferFunctionGeneratorWidget.h.
Referenced by OnDeltaLevelWindow(), OnDeltaThreshold(), and SetDataNode().