#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().
1.7.2