]> Creatis software - clitk.git/blobdiff - vv/vvToolRigidReg.cxx
reads from a config file and performs the registration
[clitk.git] / vv / vvToolRigidReg.cxx
index ec5d1ae4040df9a6ff3384e0e59341252b13c299..bd288500eeba1e1ca70b4e9bd61e8f96c25e8b01 100644 (file)
@@ -28,7 +28,7 @@
 
 // clitk
 #include "clitkTransformUtilities.h"
-
+#include "clitkAffineRegistrationGenericFilter.h"      
 // qt
 #include <QMessageBox>
 #include <QFileDialog>
@@ -55,13 +55,12 @@ vvToolRigidReg::vvToolRigidReg(vvMainWindowBase * parent, Qt::WindowFlags f):
 //    qsize.setWidth(850);
 //    mToolWidget->setFixedSize(qsize);
 
-
   // Set how many inputs are needed for this tool
// mFilter = new clitk::AffineTransformGenericFilter<args_info_clitkAffineTransform>;
 mFilter = new clitk::AffineRegistrationGenericFilter<args_info_clitkAffineRegistration>;
 
   // Set how many inputs are needed for this tool
- AddInputSelector("Select moving image");
- AddInputSelector("Select fixed image");
+ AddInputSelector("Select moving image",mFilter);
+ AddInputSelector("Select fixed image",mFilter);
 }
 //------------------------------------------------------------------------------
 
@@ -83,14 +82,56 @@ bool vvToolRigidReg::close()
 //------------------------------------------------------------------------------
 void vvToolRigidReg::reject()
 {
-   return vvToolWidgetBase::reject();
+
+  return vvToolWidgetBase::reject();
 }
 //------------------------------------------------------------------------------
 
 //------------------------------------------------------------------------------
 void vvToolRigidReg::GetArgsInfoFromGUI()
-{
-  DD("works");
+{   
+  QFont font=QFont("Times New Roman",10);
+  tab2textedit->setTextColor(QColor(255,0,0));
+  tab2textedit->setCurrentFont(font);
+  tab2textedit->update();
+  QString str;
+  QString file = QFileDialog::getOpenFileName(
+                    this,
+                   "Choose the Transformation Parameters file",
+                    mMainWindow->GetInputPathName(),
+                    "Text (*.conf *.txt *.rtf *.doc)");
+    if (file.isEmpty())
+    return;
+   QFile Qfile1(file);
+  // ifstream readfile;
+   std::string configfile= file.toStdString();
+   cmdline_parser_clitkAffineRegistration_configfile(const_cast<char*>(configfile.c_str()),&mArgsInfo,1,1,1);
+   mArgsInfo.gradient_flag=1;
+   
+   //Read from File and display it on the TextBox 2
+   ifstream readfile;
+   std::vector<QString> Qstr;
+   readfile.open(configfile.c_str());
+   if (readfile.is_open()) 
+   {
+    while (!readfile.eof())
+      {
+      readfile >> configfile;
+      Qstr.push_back(QString(configfile.c_str()));
+      }
+      readfile.close();
+   }
+    else {
+      cout << "Unable to open file";
+    }
+    for(unsigned int i=0;i<Qstr.size();i++)
+      {
+    str=tab2textedit->toPlainText();
+    str.append(Qstr.at(i));
+    tab2textedit->setText(str);
+    str.append("\n");
+    tab2textedit->setText(str);
+      }
 }
 //------------------------------------------------------------------------------
 
@@ -112,14 +153,16 @@ void vvToolRigidReg::InputIsSelected(std::vector<vvSlicerManager *> & l)
     QMessageBox::information(this, "Warning","Your Reference and Target Images are the same");
   }
   mTwoInputs = true;
-  SetOverlay();
+  SetOverlay(mInput2->GetImage());
   mImageSize=mInput1->GetImage()->GetSize();
   SetRotationCenter();
   SetSliderRanges();
 
     //connect all sigs to slots
    connect(resetbutton, SIGNAL(pressed()), this, SLOT(ResetTransform()));
-   connect(tab2loadbutton, SIGNAL(pressed()), this, SLOT(AutoRegister()));
+   connect(tab2loadbutton, SIGNAL(pressed()), this, SLOT(GetArgsInfoFromGUI()));
+   connect(tab2applybutton, SIGNAL(pressed()), this, SLOT(AutoRegister()));
+
 
    connect(Xval, SIGNAL(editingFinished()), this, SLOT(SetXvalue()));
    connect(Yval, SIGNAL(editingFinished()), this, SLOT(SetYvalue()));
@@ -140,7 +183,7 @@ void vvToolRigidReg::InputIsSelected(std::vector<vvSlicerManager *> & l)
    connect(xrot_sb, SIGNAL(valueChanged(double)), this, SLOT(UpdateTransform_sb()));
    connect(yrot_sb, SIGNAL(valueChanged(double)), this, SLOT(UpdateTransform_sb()));
    connect(zrot_sb, SIGNAL(valueChanged(double)), this, SLOT(UpdateTransform_sb()));
-
+   
    connect(loadbutton, SIGNAL(pressed()), this, SLOT(ReadFile()));
    connect(savebutton, SIGNAL(pressed()), this, SLOT(SaveFile()));
 
@@ -155,10 +198,10 @@ void vvToolRigidReg::apply()
 //------------------------------------------------------------------------------
 
 //------------------------------------------------------------------------------
-void vvToolRigidReg::SetOverlay()
+void vvToolRigidReg::SetOverlay(vvImage::Pointer Image)
 {
     for (int i =0; i<mCurrentSlicerManager->NumberOfSlicers(); i++) {
-   mCurrentSlicerManager->GetSlicer(i)->SetOverlay(mInput2->GetImage());
+   mCurrentSlicerManager->GetSlicer(i)->SetOverlay(Image);
    mCurrentSlicerManager->GetSlicer(i)->SetActorVisibility("overlay",0,true);
    mCurrentSlicerManager->SetColorMap();
    mCurrentSlicerManager->Render();
@@ -226,17 +269,20 @@ void vvToolRigidReg::SetTransform(double tX, double tY, double tZ, double aX, do
 //------------------------------------------------------------------------------
 void vvToolRigidReg::SetTransform(vtkMatrix4x4 *matrix)
 {
-    vtkSmartPointer<vtkTransform> transform =mCurrentSlicerManager->GetImage()->GetTransform();
-    transform->SetMatrix(matrix);
+    vtkSmartPointer<vtkTransform> transform=vtkSmartPointer<vtkTransform>::New();
+    for(int i=0; i<4;i++)
+      for(int j=0;j<4;j++)
+    mCurrentSlicerManager->GetImage()->GetTransform()->GetMatrix()->SetElement(i,j,matrix->GetElement(i,j));
+    
     Render();
 }
 //------------------------------------------------------------------------------
-
+  
 //------------------------------------------------------------------------------
 void vvToolRigidReg::Render()
 {
     for (int i=0; i<mCurrentSlicerManager->NumberOfSlicers(); i++) {
-      mCurrentSlicerManager->GetSlicer(i)->ForceUpdateDisplayExtent();
+       mCurrentSlicerManager->GetSlicer(i)->ForceUpdateDisplayExtent();
       mCurrentSlicerManager->GetSlicer(i)->Render();
       }
 }
@@ -320,8 +366,8 @@ void vvToolRigidReg::UpdateTransform_sliders()
                         ytrans_slider->value()*mInput1->GetImage()->GetSpacing()[1],
                         ztrans_slider->value()*mInput1->GetImage()->GetSpacing()[2],
                        xrot_slider->value(),yrot_slider->value(),zrot_slider->value(),false);
-      UpdateTransform(true);
-      Render();
+        UpdateTransform(true);
+       // Render();
 }
 //------------------------------------------------------------------------------
 
@@ -332,20 +378,42 @@ void vvToolRigidReg::UpdateTransform_sb()
       ytrans_sb->value(),
       ztrans_sb->value(),
                        xrot_sb->value(),yrot_sb->value(),zrot_sb->value(),false);
+                       DD(xtrans_sb->value());
       UpdateTransform(false);
-      Render();
+   //   Render();
 }
 //------------------------------------------------------------------------------
 
 //------------------------------------------------------------------------------
 void vvToolRigidReg::AutoRegister()
-{
- GetArgsInfoFromGUI();
-    //clitk::AffineRegistrationGenericFilter::Pointer filter =
-   // clitk::AffineRegistrationGenericFilter::New();
-    //filter->SetArgsInfo(mArgsInfo);
-   // filter->Update();
-
+{ 
+    if (!mCurrentSlicerManager) close();
+    QApplication::setOverrideCursor(QCursor(Qt::WaitCursor));
+  
+    std::vector<vvImage::Pointer> inputs;
+    // Input
+    inputs.push_back(mInput1->GetImage());
+    inputs.push_back(mInput2->GetImage());
+    // Check input type
+    // Main filter
+    clitk::AffineRegistrationGenericFilter<args_info_clitkAffineRegistration>::Pointer filter =
+    clitk::AffineRegistrationGenericFilter<args_info_clitkAffineRegistration>::New();
+    filter->SetInputVVImages(inputs);
+    filter->SetArgsInfo(mArgsInfo);
+    DD("ArgsInfo given in");
+    filter->EnableReadOnDisk(false);
+    filter->Update();
+    DD("I am done...! Updated");
+    vvImage::Pointer output = filter->GetOutputVVImage();
+    DD("filter getoutput done...");
+    std::ostringstream osstream;
+    //osstream << "Registered" << "_ "
+      //     << mCurrentSlicerManager->GetSlicer(0)->GetFileName() << ".mhd";
+    //AddImage(output,osstream.str());
+     SetOverlay(output);
+   
+    QApplication::restoreOverrideCursor();
+   // close();
 }
 //------------------------------------------------------------------------------
 
@@ -504,7 +572,7 @@ void vvToolRigidReg::SetRotationCenter()
     QString xcord,ycord,zcord;
     std::vector<double> imageorigin;
     imageorigin=mInput1->GetImage()->GetOrigin();
-
+    DD("before bug");
     xcord=xcord.setNum(imageorigin[0]+mImageSize[0]*mInput1->GetImage()->GetSpacing()[0]/2, 'g', 3);
     ycord=ycord.setNum(imageorigin[1]+mImageSize[1]*mInput1->GetImage()->GetSpacing()[1]/2, 'g', 3);
     zcord=zcord.setNum(imageorigin[2]+mImageSize[2]*mInput1->GetImage()->GetSpacing()[2]/2, 'g', 3);
@@ -535,7 +603,6 @@ void vvToolRigidReg::InitializeSliders(double xtrans,double ytrans, double ztran
 
     if(sliders){
     xtrans_slider->blockSignals(true);
-    DD(xtrans_slider->value());
     xtrans_slider->setValue(rint(xtrans));
     xtrans_slider->blockSignals(false);
     ytrans_slider->blockSignals(true);
@@ -546,7 +613,7 @@ void vvToolRigidReg::InitializeSliders(double xtrans,double ytrans, double ztran
     ztrans_slider->blockSignals(false);
     }
     xrot_sb->blockSignals(true);
-    xrot_sb->setValue(xrot);
+    xrot_sb->setValue(xrot);                                                                   
     xrot_sb->blockSignals(false);
     yrot_sb->blockSignals(true);
     yrot_sb->setValue(yrot);
@@ -608,7 +675,6 @@ void vvToolRigidReg::SetSliderRanges()
   zrot_slider->setRange(-360,360);
   zrot_slider->blockSignals(false);
 
-
   xrot_sb->blockSignals(true);
   xrot_sb->setRange(-360,360);
   xrot_sb->blockSignals(false);