+ UpdateTextEditor(mCurrentSlicerManager->GetImage()->GetTransform()->GetMatrix());
+}
+//------------------------------------------------------------------------------
+
+//------------------------------------------------------------------------------
+void vvToolRigidReg::SaveFile()
+{
+ QString s = QFileDialog::getSaveFileName(this, tr("Save File"),
+ "/home",
+ tr("Text (*.txt *.doc *.rtf)"));
+ QFile file(s);
+ if (file.open(QFile::WriteOnly | QFile::Truncate)) {
+ QTextStream out(&file);
+ out<<textEdit->toPlainText() ;
+ }
+}
+//------------------------------------------------------------------------------
+
+//------------------------------------------------------------------------------
+void vvToolRigidReg::ReadFile()
+{
+ vtkMatrix4x4 *matrix=vtkMatrix4x4::New();
+ vtkSmartPointer<vtkTransform> transform = mCurrentSlicerManager->GetImage()->GetTransform();
+ QString s = QFileDialog::getOpenFileName(
+ this,
+ "Choose a file",
+ "/home",
+ "Text (*.txt *.rtf *.doc)");
+ if (s.isEmpty())
+ return;
+
+ QFile file(s);
+ ifstream readfile;
+ std::string x= s.toStdString();
+ std::vector<QString> Qstr;
+ readfile.open(x.c_str());
+ if (readfile.is_open())
+ {
+ while (!readfile.eof())
+ {
+ readfile >> x;
+ Qstr.push_back(QString(x.c_str()));
+ }
+ readfile.close();
+ }
+ else {
+ cout << "Unable to open file";
+ }
+ //Set the transformation matrix
+ int index =7;
+ for(int i=0;i<4;i++)
+ {
+ for(int j=0;j<4;j++)
+ {
+ matrix->Element[i][j]=Qstr.at(index).toDouble();
+ index++;
+ }
+ }
+ transform->SetMatrix(matrix);
+ // SetTransform(matrix);
+ double * orientations=new double[3];
+ double * translations=new double[3];
+ transform->GetOrientation(orientations);
+ transform->PostMultiply();
+
+ //Obtain the Rotation Center
+ Xval->setText(Qstr.at(2));
+ Yval->setText(Qstr.at(3));
+ Zval->setText(Qstr.at(4));
+
+ //In the Order or Y X Z //
+ //now postmultiply for the rotations
+ SetTransform(0,0,0,0,0,-orientations[2],false);
+ SetTransform(0,0,0,-orientations[0],0,0,false);
+ SetTransform(0,0,0,0,-orientations[1],0,false);
+
+ transform->GetPosition(translations);
+ transform->Identity();
+
+ /* DD(translations[0]/mInput1->GetImage()->GetSpacing()[0]);
+ DD(translations[1]/mInput1->GetImage()->GetSpacing()[1]);
+ DD(translations[2]/mInput1->GetImage()->GetSpacing()[2]);
+ DD(orientations[0]);
+ DD(orientations[1]);
+ DD(orientations[2]);*/
+ //set the sliders and spin box values
+ xtrans_slider->setValue(rint(translations[0]/mInput1->GetImage()->GetSpacing()[0]));
+ UpdateXtranslider();
+ ytrans_slider->setValue(rint(translations[1]/mInput1->GetImage()->GetSpacing()[1]));
+ UpdateYtranslider();
+ ztrans_slider->setValue(rint(translations[2]/mInput1->GetImage()->GetSpacing()[2]));
+ UpdateZtranslider();
+ yrot_slider->setValue(rint(orientations[1]));
+ UpdateYrotslider();
+ xrot_slider->setValue(rint(orientations[0]));
+ UpdateXrotslider();
+ zrot_slider->setValue(rint(orientations[2]));
+ UpdateZrotslider();
+}
+//------------------------------------------------------------------------------
+
+//------------------------------------------------------------------------------
+void vvToolRigidReg::ResetTransform()
+{
+ vtkMatrix4x4 *matrix = vtkMatrix4x4::New();
+ matrix->Identity();
+ mInput1->Reload();
+ mInput1->Render();
+ mInput2->Reload();
+ mInput2->Render();
+ SetRotationCenter();
+ SetSliderRanges();
+ SetTransform(matrix);
+ UpdateTextEditor(matrix);
+}
+//------------------------------------------------------------------------------
+
+//------------------------------------------------------------------------------
+void vvToolRigidReg::SetRotationCenter()
+{
+ //default image rotation center is the center of the image
+ QString xcord,ycord,zcord;
+ std::vector<double> imageorigin;
+ imageorigin=mInput1->GetImage()->GetOrigin();
+
+ 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);
+
+ Xval->setText(xcord);
+ Yval->setText(ycord);
+ Zval->setText(zcord);
+ InitializeSliders();
+}
+//------------------------------------------------------------------------------
+
+//------------------------------------------------------------------------------
+void vvToolRigidReg::InitializeSliders()
+{
+ xtrans_slider->signalsBlocked();
+ ytrans_slider->signalsBlocked();
+ ztrans_slider->signalsBlocked();
+ xtrans_sb->signalsBlocked();
+ ytrans_sb->signalsBlocked();
+ ztrans_sb->signalsBlocked();
+ xrot_slider->signalsBlocked();
+ yrot_slider->signalsBlocked();
+ zrot_slider->signalsBlocked();
+ xrot_sb->signalsBlocked();
+ yrot_sb->signalsBlocked();
+ zrot_sb->signalsBlocked();
+
+ xtrans_sb->setValue(0);
+ ytrans_sb->setValue(0);
+ ztrans_sb->setValue(0);
+
+ xtrans_slider->setValue(0);
+ ytrans_slider->setValue(0);
+ ztrans_slider->setValue(0);
+
+ xrot_sb->setValue(0);
+ yrot_sb->setValue(0);
+ zrot_sb->setValue(0);
+
+ xrot_slider->setValue(0);
+ yrot_slider->setValue(0);
+ zrot_slider->setValue(0);
+}
+//------------------------------------------------------------------------------
+
+//------------------------------------------------------------------------------
+void vvToolRigidReg::SetSliderRanges()
+{
+ xtrans_slider->setMaximum(1000);
+ xtrans_slider->setMinimum(-1000);
+ ytrans_slider->setMaximum(1000);
+ ytrans_slider->setMinimum(-1000);
+ ztrans_slider->setMaximum(1000);
+ ztrans_slider->setMinimum(-1000);
+
+ xtrans_sb->setMaximum(1000);
+ xtrans_sb->setMinimum(-1000);
+ ytrans_sb->setMaximum(1000);
+ ytrans_sb->setMinimum(-1000);
+ ztrans_sb->setMaximum(1000);
+ ztrans_sb->setMinimum(-1000);
+
+ xrot_slider->setMaximum(360);
+ xrot_slider->setMinimum(-360);
+ yrot_slider->setMaximum(360);
+ yrot_slider->setMinimum(-360);
+ zrot_slider->setMaximum(360);
+ zrot_slider->setMinimum(-360);
+
+ xrot_sb->setMaximum(360);
+ xrot_sb->setMinimum(-360);
+ yrot_sb->setMaximum(360);
+ yrot_sb->setMinimum(-360);
+ zrot_sb->setMaximum(360);
+ zrot_sb->setMinimum(-360);