X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;ds=sidebyside;f=vv%2FvvToolResample.cxx;fp=vv%2FvvResamplerDialog.cxx;h=202d04e8fcadf4ed0b1bf4a62d5b5521dfe348d7;hb=7d75fa08ff542ba0c30fdf47001c1652cb7ac159;hp=9e4c3ae706a849da6576fb9711250da3a083f11c;hpb=a2df2b8fbe6e9e78ab861e899e6b6c0a7f80588d;p=clitk.git diff --git a/vv/vvResamplerDialog.cxx b/vv/vvToolResample.cxx similarity index 82% rename from vv/vvResamplerDialog.cxx rename to vv/vvToolResample.cxx index 9e4c3ae..202d04e 100644 --- a/vv/vvResamplerDialog.cxx +++ b/vv/vvToolResample.cxx @@ -16,60 +16,32 @@ - CeCILL-B http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html ======================================================================-====*/ -#ifndef _VVRESAMPLERDIALOG_CXX -#define _VVRESAMPLERDIALOG_CXX - -#include "vvResamplerDialog.h" -#include "clitkImageResampleGenericFilter.h" +#include "vvToolResample.h" #include "vvSlicer.h" +#include "vvToolCreator.h" #include #include #define COLUMN_IMAGE_NAME 7 -//==================================================================== -vvResamplerDialog::vvResamplerDialog(QWidget * parent, Qt::WindowFlags f) - :QDialog(parent,f), Ui::vvResamplerDialog() { - - // initialization - setupUi(this); - Init(); - - // Connect signals & slots - connect(this, SIGNAL(accepted()), this, SLOT(Resample())); - connect(mImagesComboBox, SIGNAL(currentIndexChanged(QString)), this, SLOT(UpdateCurrentInputImage())); - - connect(sizeRadioButton, SIGNAL(clicked()), this, SLOT(UpdateControlSizeAndSpacing())); - connect(scaleSizeRadioButton, SIGNAL(clicked()), this, SLOT(UpdateControlSizeAndSpacing())); - connect(isoSizeRadioButton, SIGNAL(clicked()), this, SLOT(UpdateControlSizeAndSpacing())); - connect(spacingRadioButton, SIGNAL(clicked()), this, SLOT(UpdateControlSizeAndSpacing())); - connect(scaleSpacingRadioButton, SIGNAL(clicked()), this, SLOT(UpdateControlSizeAndSpacing())); - connect(isoSpacingRadioButton, SIGNAL(clicked()), this, SLOT(UpdateControlSizeAndSpacing())); - - connect(xSizeLineEdit, SIGNAL(textEdited(QString)),this,SLOT(ComputeNewSpacingFromSize())); - connect(ySizeLineEdit, SIGNAL(textEdited(QString)),this,SLOT(ComputeNewSpacingFromSize())); - connect(zSizeLineEdit, SIGNAL(textEdited(QString)),this,SLOT(ComputeNewSpacingFromSize())); - connect(xSpacingLineEdit, SIGNAL(textEdited(QString)),this,SLOT(ComputeNewSizeFromSpacing())); - connect(ySpacingLineEdit, SIGNAL(textEdited(QString)),this,SLOT(ComputeNewSizeFromSpacing())); - connect(zSpacingLineEdit, SIGNAL(textEdited(QString)),this,SLOT(ComputeNewSizeFromSpacing())); - connect(scaleSizeLineEdit,SIGNAL(textEdited(QString)),this,SLOT(ComputeNewSizeFromScale())); - connect(scaleSpacingLineEdit,SIGNAL(textEdited(QString)),this,SLOT(ComputeNewSpacingFromScale())); - connect(isoSizeLineEdit,SIGNAL(textEdited(QString)),this,SLOT(ComputeNewSizeFromIso())); - connect(isoSpacingLineEdit,SIGNAL(textEdited(QString)),this,SLOT(ComputeNewSpacingFromIso())); +ADD_TOOL(vvToolResample); - connect(gaussianFilterCheckBox,SIGNAL(stateChanged(int)),this,SLOT(UpdateGaussianFilter())); - connect(interpolationComboBox,SIGNAL(currentIndexChanged(QString)),this,SLOT(UpdateInterpolation())); -} //==================================================================== +vvToolResample::vvToolResample(vvMainWindowBase * parent, Qt::WindowFlags f): + vvToolWidgetBase(parent,f), + vvToolBase(parent), + Ui::vvToolResample() +{ + Ui_vvToolResample::setupUi(mToolWidget); -//==================================================================== -void vvResamplerDialog::Init() { + mFilter = clitk::ImageResampleGenericFilter::New(); mLastError =""; mInputFileFormat = ""; ComponentType = ""; mPixelType = ""; + mCurrentSlicerManager=NULL; mInputSize.resize(0); mInputSpacing.resize(0); @@ -114,21 +86,50 @@ void vvResamplerDialog::Init() { mInputSizeLabel->setPalette(qPalette); mInputSpacingLabel->setPalette(qPalette); - UpdateCurrentInputImage(); + // Set how many inputs are needed for this tool + AddInputSelector("Select an image to resample", mFilter); + + // Connect signals & slots + + connect(sizeRadioButton, SIGNAL(clicked()), this, SLOT(UpdateControlSizeAndSpacing())); + connect(scaleSizeRadioButton, SIGNAL(clicked()), this, SLOT(UpdateControlSizeAndSpacing())); + connect(isoSizeRadioButton, SIGNAL(clicked()), this, SLOT(UpdateControlSizeAndSpacing())); + connect(spacingRadioButton, SIGNAL(clicked()), this, SLOT(UpdateControlSizeAndSpacing())); + connect(scaleSpacingRadioButton, SIGNAL(clicked()), this, SLOT(UpdateControlSizeAndSpacing())); + connect(isoSpacingRadioButton, SIGNAL(clicked()), this, SLOT(UpdateControlSizeAndSpacing())); + + connect(xSizeLineEdit, SIGNAL(textEdited(QString)),this,SLOT(ComputeNewSpacingFromSize())); + connect(ySizeLineEdit, SIGNAL(textEdited(QString)),this,SLOT(ComputeNewSpacingFromSize())); + connect(zSizeLineEdit, SIGNAL(textEdited(QString)),this,SLOT(ComputeNewSpacingFromSize())); + connect(xSpacingLineEdit, SIGNAL(textEdited(QString)),this,SLOT(ComputeNewSizeFromSpacing())); + connect(ySpacingLineEdit, SIGNAL(textEdited(QString)),this,SLOT(ComputeNewSizeFromSpacing())); + connect(zSpacingLineEdit, SIGNAL(textEdited(QString)),this,SLOT(ComputeNewSizeFromSpacing())); + connect(scaleSizeLineEdit,SIGNAL(textEdited(QString)),this,SLOT(ComputeNewSizeFromScale())); + connect(scaleSpacingLineEdit,SIGNAL(textEdited(QString)),this,SLOT(ComputeNewSpacingFromScale())); + connect(isoSizeLineEdit,SIGNAL(textEdited(QString)),this,SLOT(ComputeNewSizeFromIso())); + connect(isoSpacingLineEdit,SIGNAL(textEdited(QString)),this,SLOT(ComputeNewSpacingFromIso())); + + connect(gaussianFilterCheckBox,SIGNAL(stateChanged(int)),this,SLOT(UpdateGaussianFilter())); + connect(interpolationComboBox,SIGNAL(currentIndexChanged(QString)),this,SLOT(UpdateInterpolation())); } //==================================================================== //==================================================================== -void vvResamplerDialog::UpdateCurrentInputImage() { - // Set current image & index - mCurrentIndex = mImagesComboBox->currentIndex(); - if (mCurrentIndex == -1) { - mCurrentImage = NULL; - return ; - } - mCurrentImage = mSlicerManagers[mCurrentIndex]->GetSlicer(0)->GetImage(); +void vvToolResample::Initialize() { + SetToolName("Resample Image"); + SetToolMenuName("Resample"); + SetToolIconFilename(":/common/icons/resample.png"); + SetToolTip("Resample image with various interpolation methods."); +} +//==================================================================== + +//==================================================================== +void vvToolResample::InputIsSelected(vvSlicerManager* m) { + + mCurrentSlicerManager = m; + mCurrentImage = mCurrentSlicerManager->GetSlicer(0)->GetImage(); if (mCurrentImage.IsNull()) return; - mInputFileName = mSlicerManagers[mCurrentIndex]->GetFileName().c_str(); + mInputFileName = mCurrentSlicerManager->GetFileName().c_str(); // Set current information mPixelType = mCurrentImage->GetScalarTypeAsString().c_str(); @@ -168,7 +169,7 @@ void vvResamplerDialog::UpdateCurrentInputImage() { //==================================================================== //==================================================================== -void vvResamplerDialog::UpdateOutputInfo() { +void vvToolResample::UpdateOutputInfo() { mOutputSizeLabel->setText(GetVectorIntAsString(mOutputSize)); mOutputSpacingLabel->setText(GetVectorDoubleAsString(mOutputSpacing)); mOutputMemoryLabel->setText(GetSizeInBytes(mOutputSize)); @@ -176,7 +177,7 @@ void vvResamplerDialog::UpdateOutputInfo() { //==================================================================== //==================================================================== -QString vvResamplerDialog::GetSizeInBytes(std::vector & size) { +QString vvToolResample::GetSizeInBytes(std::vector & size) { int t = 1; for (unsigned int i=0; iGetScalarSize()*mCurrentImage->GetNumberOfScalarComponents(); @@ -202,7 +203,7 @@ QString vvResamplerDialog::GetSizeInBytes(std::vector & size) { //==================================================================== //==================================================================== -QString vvResamplerDialog::GetVectorDoubleAsString(std::vector vectorDouble) { +QString vvToolResample::GetVectorDoubleAsString(std::vector vectorDouble) { QString result; for (unsigned int i= 0; i vectorDou //==================================================================== //==================================================================== -QString vvResamplerDialog::GetVectorIntAsString(std::vector vectorInt) { +QString vvToolResample::GetVectorIntAsString(std::vector vectorInt) { QString result; for (unsigned int i= 0; i vectorInt) { //==================================================================== //==================================================================== -void vvResamplerDialog::FillSizeEdit(std::vector size) { +void vvToolResample::FillSizeEdit(std::vector size) { xSizeLineEdit->setText(QString::number(size[0])); ySizeLineEdit->setText(QString::number(size[1])); if (size.size() > 2) @@ -235,7 +236,7 @@ void vvResamplerDialog::FillSizeEdit(std::vector size) { //==================================================================== //==================================================================== -void vvResamplerDialog::FillSpacingEdit(std::vector spacing) { +void vvToolResample::FillSpacingEdit(std::vector spacing) { xSpacingLineEdit->setText(QString::number(spacing[0])); ySpacingLineEdit->setText(QString::number(spacing[1])); if (spacing.size() > 2) @@ -244,7 +245,7 @@ void vvResamplerDialog::FillSpacingEdit(std::vector spacing) { //==================================================================== //==================================================================== -void vvResamplerDialog::UpdateOutputSizeAndSpacing() { +void vvToolResample::UpdateOutputSizeAndSpacing() { mOutputSize.resize(mDimension); mOutputSize = mInputSize; mOutputSpacing.resize(mDimension); @@ -264,7 +265,7 @@ void vvResamplerDialog::UpdateOutputSizeAndSpacing() { //==================================================================== //==================================================================== -void vvResamplerDialog::UpdateControlSizeAndSpacing() { +void vvToolResample::UpdateControlSizeAndSpacing() { scaleSizeLineEdit->setText(""); scaleSpacingLineEdit->setText(""); isoSizeLineEdit->setText(""); @@ -308,7 +309,7 @@ void vvResamplerDialog::UpdateControlSizeAndSpacing() { //==================================================================== //==================================================================== -void vvResamplerDialog::ComputeNewSpacingFromSize() { +void vvToolResample::ComputeNewSpacingFromSize() { double newSpacing = mInputSpacing[0]*mInputSize[0]; xSpacingLineEdit->setText(QString::number(newSpacing/xSizeLineEdit->text().toDouble())); newSpacing = mInputSpacing[1]*mInputSize[1]; @@ -323,7 +324,7 @@ void vvResamplerDialog::ComputeNewSpacingFromSize() { //==================================================================== //==================================================================== -void vvResamplerDialog::ComputeNewSizeFromSpacing() { +void vvToolResample::ComputeNewSizeFromSpacing() { double newSize = mInputSpacing[0]*mInputSize[0]; xSizeLineEdit->setText(QString::number(newSize/xSpacingLineEdit->text().toDouble())); newSize = mInputSpacing[1]*mInputSize[1]; @@ -338,7 +339,7 @@ void vvResamplerDialog::ComputeNewSizeFromSpacing() { //==================================================================== //==================================================================== -void vvResamplerDialog::ComputeNewSpacingFromScale() { +void vvToolResample::ComputeNewSpacingFromScale() { xSpacingLineEdit->setText(QString::number(mInputSpacing[0]*scaleSpacingLineEdit->text().toDouble()/100)); ySpacingLineEdit->setText(QString::number(mInputSpacing[1]*scaleSpacingLineEdit->text().toDouble()/100)); if (mDimension > 2) @@ -348,7 +349,7 @@ void vvResamplerDialog::ComputeNewSpacingFromScale() { //==================================================================== //==================================================================== -void vvResamplerDialog::ComputeNewSizeFromScale() { +void vvToolResample::ComputeNewSizeFromScale() { xSizeLineEdit->setText(QString::number(mInputSize[0]*scaleSizeLineEdit->text().toDouble()/100)); ySizeLineEdit->setText(QString::number(mInputSize[1]*scaleSizeLineEdit->text().toDouble()/100)); if (mDimension > 2) @@ -358,7 +359,7 @@ void vvResamplerDialog::ComputeNewSizeFromScale() { //==================================================================== //==================================================================== -void vvResamplerDialog::ComputeNewSpacingFromIso() { +void vvToolResample::ComputeNewSpacingFromIso() { xSpacingLineEdit->setText(QString::number(isoSpacingLineEdit->text().toDouble())); ySpacingLineEdit->setText(QString::number(isoSpacingLineEdit->text().toDouble())); if (mDimension > 2) @@ -368,7 +369,7 @@ void vvResamplerDialog::ComputeNewSpacingFromIso() { //==================================================================== //==================================================================== -void vvResamplerDialog::ComputeNewSizeFromIso() { +void vvToolResample::ComputeNewSizeFromIso() { xSizeLineEdit->setText(QString::number(isoSizeLineEdit->text().toDouble())); ySizeLineEdit->setText(QString::number(isoSizeLineEdit->text().toDouble())); if (mDimension > 2) @@ -378,7 +379,7 @@ void vvResamplerDialog::ComputeNewSizeFromIso() { //==================================================================== //==================================================================== -void vvResamplerDialog::UpdateInterpolation() { +void vvToolResample::UpdateInterpolation() { if (interpolationComboBox->currentText() == "BSpline") { bSplineLabel->show(); bSplineOrderSpinBox->show(); @@ -401,7 +402,7 @@ void vvResamplerDialog::UpdateInterpolation() { //==================================================================== //==================================================================== -void vvResamplerDialog::UpdateGaussianFilter() { +void vvToolResample::UpdateGaussianFilter() { if (gaussianFilterCheckBox->isChecked()) { gaussianFilterLabel->show(); xGaussianLineEdit->show(); @@ -418,18 +419,9 @@ void vvResamplerDialog::UpdateGaussianFilter() { } //==================================================================== -//==================================================================== -void vvResamplerDialog::SetSlicerManagers(std::vector & m,int current_image_index) { - mSlicerManagers = m; - for (unsigned int i = 0; i < mSlicerManagers.size(); i++) { - mImagesComboBox->addItem(mSlicerManagers[i]->GetFileName().c_str()); - } - mImagesComboBox->setCurrentIndex(current_image_index); -} -//==================================================================== //==================================================================== -void vvResamplerDialog::Resample() { +void vvToolResample::apply() { // Get resampler options std::vector sigma; @@ -437,36 +429,33 @@ void vvResamplerDialog::Resample() { sigma.push_back(yGaussianLineEdit->text().toDouble()); if (mDimension > 2) sigma.push_back(zGaussianLineEdit->text().toDouble()); - - // Create resampler filter - clitk::ImageResampleGenericFilter::Pointer filter = clitk::ImageResampleGenericFilter::New(); - filter->SetOutputSize(mOutputSize); - filter->SetOutputSpacing(mOutputSpacing); - filter->SetInterpolationName(interpolationComboBox->currentText().toLower().toStdString()); + mFilter->SetOutputSize(mOutputSize); + mFilter->SetOutputSpacing(mOutputSpacing); + mFilter->SetInterpolationName(interpolationComboBox->currentText().toLower().toStdString()); if (interpolationComboBox->currentText() == "BSpline") - filter->SetBSplineOrder(bSplineOrderSpinBox->value()); + mFilter->SetBSplineOrder(bSplineOrderSpinBox->value()); else if (interpolationComboBox->currentText() == "Blut (faster BSpline)") { - filter->SetInterpolationName("blut"); - filter->SetBSplineOrder(bSplineOrderSpinBox->value()); - filter->SetBLUTSampling(bLUTSpinBox->value()); + mFilter->SetInterpolationName("blut"); + mFilter->SetBSplineOrder(bSplineOrderSpinBox->value()); + mFilter->SetBLUTSampling(bLUTSpinBox->value()); } if (gaussianFilterCheckBox->isChecked()) - filter->SetGaussianSigma(sigma); - // filter->SetOutputFileName(OutputFileName.toStdString()); - filter->SetDefaultPixelValue(defaultPixelValueLineEdit->text().toDouble()); - filter->SetInputVVImage(mCurrentImage); + mFilter->SetGaussianSigma(sigma); + // mFilter->SetOutputFileName(OutputFileName.toStdString()); + mFilter->SetDefaultPixelValue(defaultPixelValueLineEdit->text().toDouble()); + mFilter->SetInputVVImage(mCurrentImage); // Go ! - filter->Update(); - mOutput = filter->GetOutputVVImage(); + mFilter->Update(); + mOutput = mFilter->GetOutputVVImage(); + AddImage(mOutput,GetOutputFileName()); + close(); } //==================================================================== -std::string vvResamplerDialog::GetOutputFileName() +std::string vvToolResample::GetOutputFileName() { - QFileInfo info(mImagesComboBox->currentText()); + QFileInfo info(QString(mCurrentSlicerManager->GetFileName().c_str())); return (info.path().toStdString() + "/resampled_" + info.fileName().toStdString()); } -#endif /* end #define _vvResamplerDialog_CXX */ -