-void vvDeformationDialog::computeDeformationField() {
- vvImage::Pointer sequence=mSlicerManagers[inputSequenceBox->currentIndex()]->GetSlicer(0)->GetImage();
- vtkImageData * first_image = sequence->GetVTKImages()[0];
- if (!sequence->IsTimeSequence())
- {
- this->setResult(QDialog::Rejected);
- QMessageBox::warning(this,tr("Image type error"), tr("Deformable image registration only makes sense on time sequences."));
+void vvDeformationDialog::computeDeformationField()
+{
+ vvImage::Pointer sequence=mSlicerManagers[inputSequenceBox->currentIndex()]->GetSlicer(0)->GetImage();
+ vtkImageData * first_image = sequence->GetVTKImages()[0];
+ if (!sequence->IsTimeSequence()) {
+ this->setResult(QDialog::Rejected);
+ QMessageBox::warning(this,tr("Image type error"), tr("Deformable image registration only makes sense on time sequences."));
+ } else if ((first_image->GetSpacing()[0] != first_image->GetSpacing()[1]) || (first_image->GetSpacing()[0] != first_image->GetSpacing()[2])) {
+ this->setResult(QDialog::Rejected);
+ QMessageBox::warning(this,tr("Image type error"), tr("Deformable registration only works well with isotropic voxels. Please resample the image."));
+ return;
+ } else {
+ bool aborted=false;
+ QProgressDialog progress(this);
+ QProgressDialog cancel(this);
+ cancel.setLabelText("Canceling, please wait...");
+ cancel.setCancelButtonText(0);
+ cancel.hide();
+ //1 step per registration plus one for each of the image conversions
+ progress.setMaximum(mSlicerManagers[inputSequenceBox->currentIndex()]
+ ->GetSlicer(0)->GetImage()->GetSize()[3]+2);
+ progress.setLabelText("Computing deformation model...");
+ progress.setMinimumDuration(0);
+ progress.setWindowModality(Qt::WindowModal);
+ progress.setCancelButtonText("Cancel");
+ qApp->processEvents();
+ QFileInfo info(outputLineEdit->text().toStdString().c_str());
+ if (info.isRelative()) { //this is a bit hackish, but should work
+ QFileInfo im_info(mSlicerManagers[inputSequenceBox->currentIndex()]->GetFileName().c_str());
+ outputLineEdit->setText((im_info.path().toStdString() + "/" + outputLineEdit->text().toStdString()).c_str());