]> Creatis software - clitk.git/blob - vv/vvToolRigidReg.cxx
added functionalities such as Reset a Transform, Save and view transformations etc.
[clitk.git] / vv / vvToolRigidReg.cxx
1 /*=========================================================================
2   Program:   vv                     http://www.creatis.insa-lyon.fr/rio/vv
3
4   Authors belong to:
5   - University of LYON              http://www.universite-lyon.fr/
6   - Léon Bérard cancer center       http://oncora1.lyon.fnclcc.fr
7   - CREATIS CNRS laboratory         http://www.creatis.insa-lyon.fr
8
9   This software is distributed WITHOUT ANY WARRANTY; without even
10   the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
11   PURPOSE.  See the copyright notices for more information.
12
13   It is distributed under dual licence
14
15   - BSD        See included LICENSE.txt file
16   - CeCILL-B   http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html
17 ======================================================================-====*/
18 #include "vvToolRigidReg.h"
19 #include <QComboBox>
20 #include <QCursor>
21 #include <QApplication>
22 #include <vtkImageData.h>
23 #include <vtkSmartPointer.h>
24 #include <vtkTransform.h>
25 #include "vvImage.h"
26 #include "vvSlicer.h"
27 #include <QFile>
28 #include <QString>
29 #include <QMessageBox>
30 #include <vvMainWindow.h>
31 #include <QFileDialog>
32 #include <QTextStream>
33 //------------------------------------------------------------------------------
34 // Create the tool and automagically (I like this word) insert it in
35 // the main window menu.
36 ADD_TOOL(vvToolRigidReg);
37 //------------------------------------------------------------------------------
38
39 //------------------------------------------------------------------------------
40 vvToolRigidReg::vvToolRigidReg(vvMainWindowBase * parent, Qt::WindowFlags f):
41     vvToolWidgetBase(parent, f),
42     vvToolBase<vvToolRigidReg>(parent),
43     Ui::vvToolRigidReg()
44 {
45   // GUI Initialization
46   Ui_vvToolRigidReg::setupUi(mToolWidget);
47
48   // Set how many inputs are needed for this tool
49   AddInputSelector("Select the Reference Image");
50   AddInputSelector("Select the Target Image");
51     mOrder=QString("Rotation Order: ");
52  
53    
54 }
55 //------------------------------------------------------------------------------
56
57 //------------------------------------------------------------------------------
58 vvToolRigidReg::~vvToolRigidReg()
59 {
60 }
61 //------------------------------------------------------------------------------
62
63 //------------------------------------------------------------------------------
64 bool vvToolRigidReg::close()
65 {
66    
67   return vvToolWidgetBase::close();
68 }
69 //------------------------------------------------------------------------------
70
71 //------------------------------------------------------------------------------
72 void vvToolRigidReg::reject()
73 {
74   mInput2->Reload();    
75   for(int i=0;i<mCurrentSlicerManager->NumberOfSlicers();i++)
76       { 
77         mInput1->GetSlicer(i)->RemoveActor("overlay",0);
78         mInput1->SetColorMap(0);
79         mInput1->Render();
80       }
81   return vvToolWidgetBase::reject();
82 }
83 //------------------------------------------------------------------------------
84
85 //------------------------------------------------------------------------------
86 void vvToolRigidReg::InputIsSelected(std::vector<vvSlicerManager *> & l)
87 {
88   //inputs
89   mInput1 = l[0];
90   mInput2 = l[1];
91   mTwoInputs = true;
92   SetOverlay();
93   this->mImageSize=mCurrentSlicerManager->GetImage()->GetSize();
94   
95   SetRotationCenter();
96   SetSliderRanges();
97   
98     //connect all sigs to slots 
99   connect(resetbutton, SIGNAL(pressed()), this, SLOT(ResetTransform()));
100   
101   connect(Xval, SIGNAL(editingFinished()), this, SLOT(SetXvalue()));
102   connect(Yval, SIGNAL(editingFinished()), this, SLOT(SetYvalue()));
103   connect(Zval, SIGNAL(editingFinished()), this, SLOT(SetZvalue()));
104   
105   connect(xtrans_slider, SIGNAL(sliderReleased()), this, SLOT(SetOrderXtrans()));
106   connect(ytrans_slider, SIGNAL(sliderReleased()), this, SLOT(SetOrderYtrans()));
107   connect(ztrans_slider, SIGNAL(sliderReleased()), this, SLOT(SetOrderZtrans()));
108   connect(xrot_slider, SIGNAL(sliderReleased()), this, SLOT(SetOrderXrot()));
109   connect(yrot_slider, SIGNAL(sliderReleased()), this, SLOT(SetOrderYrot()));
110   connect(zrot_slider, SIGNAL(sliderReleased()), this, SLOT(SetOrderZrot()));
111   
112   
113   connect(xtrans_slider, SIGNAL(valueChanged(int)), this, SLOT(UpdateXtranslider()));
114   
115   connect(ytrans_slider, SIGNAL(valueChanged(int)), this, SLOT(UpdateYtranslider()));
116   connect(ztrans_slider, SIGNAL(valueChanged(int)), this, SLOT(UpdateZtranslider()));
117   
118   
119   connect(xrot_slider, SIGNAL(valueChanged(int)), this, SLOT(UpdateXrotslider()));
120   connect(yrot_slider, SIGNAL(valueChanged(int)), this, SLOT(UpdateYrotslider()));
121   connect(zrot_slider, SIGNAL(valueChanged(int)), this, SLOT(UpdateZrotslider()));
122   
123         
124    connect(xtrans_sb, SIGNAL(valueChanged(int)), this, SLOT(UpdateXtransb()));
125    connect(ytrans_sb, SIGNAL(valueChanged(int)), this, SLOT(UpdateYtransb()));
126    connect(ztrans_sb, SIGNAL(valueChanged(int)), this, SLOT(UpdateZtransb()));
127    connect(xrot_sb, SIGNAL(valueChanged(int)), this, SLOT(UpdateXrotsb()));
128    connect(yrot_sb, SIGNAL(valueChanged(int)), this, SLOT(UpdateYrotsb()));
129    connect(zrot_sb, SIGNAL(valueChanged(int)), this, SLOT(UpdateZrotsb()));
130    
131   
132   connect(loadbutton, SIGNAL(pressed()), this, SLOT(ReadFile()));
133   connect(savebutton, SIGNAL(pressed()), this, SLOT(SaveFile()));
134 }
135 //------------------------------------------------------------------------------
136
137 //------------------------------------------------------------------------------
138 void vvToolRigidReg::apply()
139 {
140   std::ostringstream osstream;
141   osstream <<   "Transformed_"  
142            << mInput2->GetSlicer(0)->GetFileName() << ".mhd";
143   AddImage(mInput2->GetImage(),osstream.str()); 
144   QApplication::restoreOverrideCursor();
145   close();
146 }
147 //------------------------------------------------------------------------------
148
149 //------------------------------------------------------------------------------
150 void vvToolRigidReg::SetOverlay()
151 {
152   mCurrentSlicerManager=mInput2;
153   for (int i =0; i<mCurrentSlicerManager->NumberOfSlicers(); i++) {
154     mInput1->GetSlicer(i)->SetOverlay(mInput2->GetImage());
155     mInput1->GetSlicer(i)->SetActorVisibility("overlay",0,true);
156     mInput1->SetColorMap();
157     mInput1->Render();
158    }
159   }
160 //------------------------------------------------------------------------------
161
162 //------------------------------------------------------------------------------
163 void vvToolRigidReg::SetXvalue()
164 {
165   QString xstr = Xval->text();
166 }
167 //------------------------------------------------------------------------------
168
169 //------------------------------------------------------------------------------
170 void vvToolRigidReg::SetYvalue()
171 {
172   QString ystr = Yval->text();
173 }
174 //------------------------------------------------------------------------------
175
176 //------------------------------------------------------------------------------
177 void vvToolRigidReg::SetZvalue()
178 {
179   QString zstr = Zval->text();
180 }
181 //------------------------------------------------------------------------------
182
183 //------------------------------------------------------------------------------
184 void vvToolRigidReg::SetTransform(double tX, double tY, double tZ, double aX, double aY, double aZ)
185 {
186    
187   vtkSmartPointer<vtkTransform> transform = mCurrentSlicerManager->GetImage()->GetTransform();
188   transform->PostMultiply();
189   //Rotations
190   if (aX!=0 || aY!=0 || aZ!=0) {
191     double x, y ,z;
192     x= Xval->text().toDouble();
193     y= Yval->text().toDouble();
194     z= Zval->text().toDouble();
195     transform->Translate(-x,-y,-z);
196     if (aX!=0) transform->RotateX(aX);
197     if (aY!=0) transform->RotateY(aY);
198     if (aZ!=0) transform->RotateZ(aZ);
199     transform->Translate(x,y,z);
200   }
201   //Translations
202   if (tX!=0||tY!=0||tZ!=0)
203     transform->Translate(tX,tY,tZ);
204
205     transform->Update();
206
207   for (int i=0; i<mCurrentSlicerManager->NumberOfSlicers(); i++) {
208     mCurrentSlicerManager->GetImage()->UpdateReslice();
209     mCurrentSlicerManager->GetSlicer(i)->ForceUpdateDisplayExtent();
210     mCurrentSlicerManager->GetSlicer(i)->Render();
211   }
212 }
213 //------------------------------------------------------------------------------
214
215 //------------------------------------------------------------------------------
216 void vvToolRigidReg::SetTransform(vtkMatrix4x4 *matrix)
217 {
218     vtkSmartPointer<vtkTransform> transform =mCurrentSlicerManager->GetImage()->GetTransform();
219     transform->SetMatrix(matrix);
220    // mCurrentSlicerManager->GetImage()->SetTransform(transform);
221     transform->PostMultiply();
222     transform->Concatenate(matrix);
223     transform->Update();
224     mCurrentSlicerManager->GetImage()->SetTransform(transform);
225     for (int i=0; i<mCurrentSlicerManager->NumberOfSlicers(); i++) {
226     mCurrentSlicerManager->GetImage()->UpdateReslice();
227    mCurrentSlicerManager->GetSlicer(i)->ForceUpdateDisplayExtent();
228     mCurrentSlicerManager->GetSlicer(i)->Render();
229     }
230 }
231 //------------------------------------------------------------------------------
232
233 //------------------------------------------------------------------------------
234   void vvToolRigidReg::UpdateTextEditor(vtkMatrix4x4 *matrix,QString SetOrder)
235 {
236    QString str1,str2,str3;
237    
238     QColor color;
239     textEdit->clear();
240     textEdit->setAcceptRichText(true);
241     str2=textEdit->toPlainText();
242     str2.append("Rotation Center(mm): \n");
243     textEdit->setText(str2);
244     
245     str2=textEdit->toPlainText();
246     textEdit->setTextColor(QColor(255,0,0));
247     str2.append(str3.append(Xval->text()));
248     textEdit->setText(str2);
249     str3.clear();
250
251     str2=textEdit->toPlainText();
252     str2.append("\t");
253     textEdit->setText(str2);
254
255     str2=textEdit->toPlainText();
256     str2.append(str3.append(Yval->text()));
257     textEdit->setText(str2);
258     str3.clear();
259     
260     str2=textEdit->toPlainText();
261     str2.append("\t");
262     textEdit->setText(str2);
263     
264
265     str2=textEdit->toPlainText();
266     str2.append(str3.append(Zval->text()));
267     textEdit->setText(str2);
268
269
270     str2=textEdit->toPlainText();
271     str2.append("\n");
272     textEdit->setText(str2);
273     
274
275     str2=textEdit->toPlainText();
276     str2.append("Transformation Matrix:\n");
277     textEdit->setText(str2);
278
279     
280     for(int i=0;i<4;i++)
281     {
282     for(int j=0;j<4;j++)
283       {
284     str2=textEdit->toPlainText();
285     str2.append("\t"+str1.setNum(matrix->Element[i][j]));
286     textEdit->setText(str2);
287       }
288     str2=textEdit->toPlainText();
289     str2.append("\n");  
290     textEdit->setText(str2);
291     }
292     //QString str = QFileDialog::getOpenFileName();
293     textEdit->setTextColor(QColor(255,0,0));
294     textEdit->setFont(QFont("courrier new",12,4,true));
295     textEdit->toPlainText().toAscii();
296     
297     str2=textEdit->toPlainText();
298     mOrder+=SetOrder+QString(" ");
299     str2.append(mOrder);
300     textEdit->setText(str2);
301 }
302 //------------------------------------------------------------------------------
303
304 //------------------------------------------------------------------------------
305 void vvToolRigidReg::SetOrderXtrans()
306 {
307   if(mOrder.size()-mOrder.lastIndexOf("Tx")<10) //see if the same Transformation Parameter has been used back to back
308   mOrder.chop(mOrder.size()-mOrder.lastIndexOf("Tx"));
309   UpdateTextEditor(mCurrentSlicerManager->GetImage()->GetTransform()->GetMatrix(),QString("Tx: ")+xtrans_sb->text());
310 }
311 //------------------------------------------------------------------------------
312
313 //------------------------------------------------------------------------------
314 void vvToolRigidReg::SetOrderYtrans()
315 {
316   if(mOrder.size()-mOrder.lastIndexOf("Ty")<10) 
317   mOrder.chop(mOrder.size()-mOrder.lastIndexOf("Ty"));
318   UpdateTextEditor(mCurrentSlicerManager->GetImage()->GetTransform()->GetMatrix(),QString("Ty: ")+ytrans_sb->text());
319 }
320
321 //------------------------------------------------------------------------------
322
323 //------------------------------------------------------------------------------
324 void vvToolRigidReg::SetOrderZtrans()
325 {
326   if(mOrder.size()-mOrder.lastIndexOf("Tz")<10) 
327   mOrder.chop(mOrder.size()-mOrder.lastIndexOf("Tz"));
328   UpdateTextEditor(mCurrentSlicerManager->GetImage()->GetTransform()->GetMatrix(),QString("Tz: ")+ztrans_sb->text());
329 }
330
331 //------------------------------------------------------------------------------
332
333 //------------------------------------------------------------------------------
334 void vvToolRigidReg::SetOrderXrot()
335 {
336   if(mOrder.size()-mOrder.lastIndexOf("Rx")<10) 
337   mOrder.chop(mOrder.size()-mOrder.lastIndexOf("Rx"));
338   UpdateTextEditor(mCurrentSlicerManager->GetImage()->GetTransform()->GetMatrix(),QString("Rx: ")+xrot_sb->text());
339 }
340
341 //------------------------------------------------------------------------------
342
343 //------------------------------------------------------------------------------
344 void vvToolRigidReg::SetOrderYrot()
345 {
346  if(mOrder.size()-mOrder.lastIndexOf("Ry")<10) //see if the same Transformation Parameter has been used back to back
347   mOrder.chop(mOrder.size()-mOrder.lastIndexOf("Ry"));
348  UpdateTextEditor(mCurrentSlicerManager->GetImage()->GetTransform()->GetMatrix(),QString("Ry: ")+yrot_sb->text());
349 }
350
351 //------------------------------------------------------------------------------
352
353 //------------------------------------------------------------------------------
354 void vvToolRigidReg::SetOrderZrot()
355 {
356   if(mOrder.size()-mOrder.lastIndexOf("Rz")<10) //see if the same Transformation Parameter has been used back to back
357   mOrder.chop(mOrder.size()-mOrder.lastIndexOf("Rz"));
358   UpdateTextEditor(mCurrentSlicerManager->GetImage()->GetTransform()->GetMatrix(),QString("Rz: ")+zrot_sb->text());
359 }
360 //------------------------------------------------------------------------------
361
362 //------------------------------------------------------------------------------
363 void vvToolRigidReg::UpdateXtransb()
364 {
365   int diff=0;
366   diff=xtrans_sb->value()-xtrans_slider->value();
367   this->SetTransform(diff, 0, 0, 0, 0, 0);
368   xtrans_slider->setValue(xtrans_sb->value());
369  // UpdateTextEditor(mCurrentSlicerManager->GetImage()->GetTransform()->GetMatrix(),QString("Tx:")+xtrans_sb->text());
370     
371 }
372 //------------------------------------------------------------------------------
373
374 //------------------------------------------------------------------------------
375 void vvToolRigidReg::UpdateXtranslider()
376 {
377   int diff=0;
378   diff=xtrans_slider->value()-xtrans_sb->value();
379   this->SetTransform(diff, 0, 0, 0, 0, 0);
380   xtrans_sb->setValue(xtrans_slider->value());
381   //UpdateTextEditor(mCurrentSlicerManager->GetImage()->GetTransform()->GetMatrix(),QString("Tx:")+xtrans_sb->text());
382 }
383 //------------------------------------------------------------------------------
384
385 //------------------------------------------------------------------------------
386 void vvToolRigidReg::UpdateYtransb()
387 {
388
389   int diff=0;
390   diff=ytrans_sb->value()-ytrans_slider->value();
391   this->SetTransform(0, diff, 0, 0, 0, 0);
392   ytrans_slider->setValue(ytrans_sb->value());
393 //  UpdateTextEditor(mCurrentSlicerManager->GetImage()->GetTransform()->GetMatrix(),QString("Ty:")+ytrans_sb->text());
394 }
395
396 //------------------------------------------------------------------------------
397
398 //------------------------------------------------------------------------------
399 void vvToolRigidReg::UpdateYtranslider()
400 {
401   int diff=0;
402   diff=ytrans_slider->value()-ytrans_sb->value();
403   this->SetTransform(0, diff, 0, 0, 0, 0);
404   ytrans_sb->setValue(ytrans_slider->value());
405 // UpdateTextEditor(mCurrentSlicerManager->GetImage()->GetTransform()->GetMatrix(),QString("Ty:")+ytrans_sb->text());
406 }
407 //------------------------------------------------------------------------------
408
409 //------------------------------------------------------------------------------
410 void vvToolRigidReg::UpdateZtransb()
411 {
412
413   int diff=0;
414   diff=ztrans_sb->value()-ztrans_slider->value();
415   this->SetTransform(0, 0, diff, 0, 0, 0);
416   ztrans_slider->setValue(ztrans_sb->value());
417  // UpdateTextEditor(mCurrentSlicerManager->GetImage()->GetTransform()->GetMatrix(),QString("Tz:")+ztrans_sb->text());
418 }
419
420 //------------------------------------------------------------------------------
421
422 //------------------------------------------------------------------------------
423 void vvToolRigidReg::UpdateZtranslider()
424 {
425   int diff=0;
426   diff=ztrans_slider->value()-ztrans_sb->value();
427   this->SetTransform(0, 0, diff, 0, 0, 0);
428   ztrans_sb->setValue(ztrans_slider->value());
429 // UpdateTextEditor(mCurrentSlicerManager->GetImage()->GetTransform()->GetMatrix(),QString("Tz:")+ztrans_sb->text());
430 }
431 //------------------------------------------------------------------------------
432
433 //------------------------------------------------------------------------------
434 void vvToolRigidReg::UpdateXrotsb()
435 {
436
437   int diff=0;
438   diff=xrot_sb->value()-xrot_slider->value();
439   this->SetTransform(0, 0, 0, diff, 0, 0);
440   xrot_slider->setValue(xrot_sb->value());
441  // UpdateTextEditor(mCurrentSlicerManager->GetImage()->GetTransform()->GetMatrix(),QString("Rx:")+xrot_sb->text());
442 }
443
444 //------------------------------------------------------------------------------
445
446 //------------------------------------------------------------------------------
447 void vvToolRigidReg::UpdateXrotslider()
448 {
449   int diff=0;
450   diff=xrot_slider->value()-xrot_sb->value();
451   this->SetTransform(0, 0, 0, diff, 0, 0);
452   xrot_sb->setValue(xrot_slider->value());
453  // UpdateTextEditor(mCurrentSlicerManager->GetImage()->GetTransform()->GetMatrix(),QString("Rx:")+xrot_sb->text());
454 }
455 //------------------------------------------------------------------------------
456
457 //------------------------------------------------------------------------------
458 void vvToolRigidReg::UpdateYrotsb()
459 {
460
461   int diff=0;
462   diff=yrot_sb->value()-yrot_slider->value();
463   this->SetTransform(0, 0, 0, 0, diff, 0);
464   yrot_slider->setValue(yrot_sb->value());
465  // UpdateTextEditor(mCurrentSlicerManager->GetImage()->GetTransform()->GetMatrix(),QString("Ry:")+yrot_sb->text());
466 }
467
468 //------------------------------------------------------------------------------
469
470 //------------------------------------------------------------------------------
471 void vvToolRigidReg::UpdateYrotslider()
472 {
473   int diff=0;
474   diff=yrot_slider->value()-yrot_sb->value();
475   this->SetTransform(0, 0, 0, 0, diff, 0);
476   yrot_sb->setValue(yrot_slider->value());
477 //  UpdateTextEditor(mCurrentSlicerManager->GetImage()->GetTransform()->GetMatrix(),QString("Ry:")+yrot_sb->text());
478 }
479 //------------------------------------------------------------------------------
480
481 //------------------------------------------------------------------------------
482 void vvToolRigidReg::UpdateZrotsb()
483 {
484
485   int diff=0;
486   diff=zrot_sb->value()-zrot_slider->value();
487   this->SetTransform(0, 0, 0, 0, 0,diff);
488   zrot_slider->setValue(zrot_sb->value());
489  // UpdateTextEditor(mCurrentSlicerManager->GetImage()->GetTransform()->GetMatrix(),QString("Rz:")+zrot_sb->text());
490 }
491
492 //------------------------------------------------------------------------------
493
494 //------------------------------------------------------------------------------
495 void vvToolRigidReg::UpdateZrotslider()
496 {
497   int diff=0;
498   diff=zrot_slider->value()-zrot_sb->value();
499   this->SetTransform(0, 0, 0, 0, 0, diff);
500   zrot_sb->setValue(zrot_slider->value());
501 //  UpdateTextEditor(mCurrentSlicerManager->GetImage()->GetTransform()->GetMatrix(),QString("Rz:")+zrot_sb->text());
502 }
503 //------------------------------------------------------------------------------
504
505 //------------------------------------------------------------------------------
506 void vvToolRigidReg::SaveFile()
507 {       
508    QString s = QFileDialog::getSaveFileName(this, tr("Save File"),
509                             "/home/bharath/clitk3_27Apr/clitk3/build/bin/text.txt",
510                             tr("Text (*.txt *.doc *.rtf)"));
511     QFile file(s);
512     if (file.open(QFile::WriteOnly | QFile::Truncate)) {
513     QTextStream out(&file);
514     out << textEdit->toPlainText() ;
515     }
516 }
517 //------------------------------------------------------------------------------
518
519 //------------------------------------------------------------------------------
520 void vvToolRigidReg::ReadFile()
521 {       
522   QString parameters=QString("Tx: Ty: Tz:");
523    vtkSmartPointer<vtkTransform> transform = mCurrentSlicerManager->GetImage()->GetTransform();
524    
525    
526    QString s = QFileDialog::getOpenFileName(
527                     this,
528                     "Choose a file",
529                     "/home/bharath/clitk3_27Apr/clitk3/build/bin/",
530                     "Text (*.txt *.rtf *.doc)");
531    QFile file(s);
532    ifstream readfile;
533    std::string x;
534    std::vector<QString> Qstr;
535    
536    readfile.open("text.txt");
537    if (readfile.is_open()) 
538    {
539     while (!readfile.eof())
540       {
541       readfile >> x;
542       Qstr.push_back(QString(x.c_str()));
543       }
544       readfile.close();
545    }
546    else cout << "Unable to open file";
547
548    //Obtain the Rotation Center 
549     Xval->setText(Qstr.at(2));
550     Yval->setText(Qstr.at(3));
551     Zval->setText(Qstr.at(4));
552
553 //    InitializeSliders();
554     double * orientations=new double[4];
555     double * translations=new double[3];
556     transform->PostMultiply();
557   //Works currently wit the ROtation order Y Z X 
558     transform->GetPosition(translations);
559     transform->GetOrientation(orientations);
560    /* xtrans_slider->setValue(Qstr.at(10).toDouble());
561     UpdateXtranslider();
562     ytrans_slider->setValue(Qstr.at(14).toDouble());
563     UpdateYtranslider();
564     ztrans_slider->setValue(Qstr.at(18).toDouble());
565     UpdateZtranslider();
566 */
567     DD(translations[0]);
568     DD(translations[1]);
569     DD(translations[2]);
570     DD(orientations[0]);
571     DD(orientations[1]);
572     DD(orientations[2]);
573     DD(orientations[3]);
574     DD(*transform->GetMatrix());
575     //Obtain the Transformation Matrix
576     /*QString str;
577    str=QString(value.at(10).c_str());
578    DD(str.toStdString());
579    */
580 // DD(value[6]);
581             // DD(value[10]);   
582    //put the streamed values in matrix array
583   /* for(int i=0;i<4;i++)
584    {
585      for(int j=0;j<4;j++)
586      {
587        matrix->Element[i][j]=value[i*4+j];
588      }
589    }
590    SetTransform( matrix);*/
591
592  /*xtrans_slider->setValue(value.at(10));
593    ytrans_slider->setValue(value.at(14));
594    ztrans_slider->setValue(value.at(18));
595    UpdateXtranslider();
596    UpdateYtranslider();
597    UpdateZtranslider();*/
598 }
599 //------------------------------------------------------------------------------
600
601 //------------------------------------------------------------------------------
602 void vvToolRigidReg::ResetTransform()
603 {
604   vtkMatrix4x4 *matrix = vtkMatrix4x4::New();
605    matrix->Identity();
606    
607    SetRotationCenter();
608    SetSliderRanges();
609    SetTransform(matrix);
610    mOrder.clear();
611    mOrder=QString("Rotation Order: ");
612    UpdateTextEditor(matrix,mOrder);
613 }
614 //------------------------------------------------------------------------------
615
616 //------------------------------------------------------------------------------
617 void vvToolRigidReg::SetRotationCenter()
618 {
619     //default image rotation center is the center of the image
620     QString xcord,ycord,zcord;
621     std::vector<double> imageorigin;
622     imageorigin=mCurrentSlicerManager->GetImage()->GetOrigin();
623     
624     xcord=xcord.setNum(imageorigin[0]+mImageSize[0]*mCurrentSlicerManager->GetImage()->GetSpacing()[0]/2, 'g', 3);
625     ycord=ycord.setNum(imageorigin[1]+mImageSize[1]*mCurrentSlicerManager->GetImage()->GetSpacing()[1]/2, 'g', 3);
626     zcord=zcord.setNum(imageorigin[2]+mImageSize[2]*mCurrentSlicerManager->GetImage()->GetSpacing()[2]/2, 'g', 3);
627
628     Xval->setText(xcord);
629     Yval->setText(ycord);
630     Zval->setText(zcord);
631     InitializeSliders();
632 }
633 //------------------------------------------------------------------------------
634
635 //------------------------------------------------------------------------------
636 void vvToolRigidReg::InitializeSliders()
637 {
638      xtrans_slider->signalsBlocked();
639      ytrans_slider->signalsBlocked();
640      ztrans_slider->signalsBlocked();
641      xtrans_sb->signalsBlocked();
642      ytrans_sb->signalsBlocked();
643      ztrans_sb->signalsBlocked();
644      xrot_slider->signalsBlocked();
645      yrot_slider->signalsBlocked();
646      zrot_slider->signalsBlocked();
647      xrot_sb->signalsBlocked();
648      yrot_sb->signalsBlocked();
649      zrot_sb->signalsBlocked();
650      
651     xtrans_sb->setValue(0);
652     ytrans_sb->setValue(0);
653     ztrans_sb->setValue(0);
654     
655     xtrans_slider->setValue(0);
656     ytrans_slider->setValue(0);
657     ztrans_slider->setValue(0);
658     
659     xrot_sb->setValue(0);
660     yrot_sb->setValue(0);
661     zrot_sb->setValue(0);
662
663     xrot_slider->setValue(0);
664     yrot_slider->setValue(0);
665     zrot_slider->setValue(0);
666 }
667 //------------------------------------------------------------------------------
668
669 //------------------------------------------------------------------------------
670 void vvToolRigidReg::SetSliderRanges()
671 {
672   xtrans_slider->setMaximum(1000);
673   xtrans_slider->setMinimum(-1000);
674   ytrans_slider->setMaximum(1000);
675   ytrans_slider->setMinimum(-1000);
676   ztrans_slider->setMaximum(1000);
677   ztrans_slider->setMinimum(-1000);
678
679   xtrans_sb->setMaximum(1000);
680   xtrans_sb->setMinimum(-1000);
681   ytrans_sb->setMaximum(1000);
682   ytrans_sb->setMinimum(-1000);
683   ztrans_sb->setMaximum(1000);
684   ztrans_sb->setMinimum(-1000);
685
686   xrot_slider->setMaximum(360);
687   xrot_slider->setMinimum(-360);
688   yrot_slider->setMaximum(360);
689   yrot_slider->setMinimum(-360);
690   zrot_slider->setMaximum(360);
691   zrot_slider->setMinimum(-360);
692
693   xrot_sb->setMaximum(360);
694   xrot_sb->setMinimum(-360);
695   yrot_sb->setMaximum(360);
696   yrot_sb->setMinimum(-360);
697   zrot_sb->setMaximum(360);
698   zrot_sb->setMinimum(-360);
699 }