]> Creatis software - clitk.git/blob - vv/vvToolRigidReg.cxx
new tool for Registration
[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 "vvImage.h"
25 #include "vvSlicer.h"
26 #include <QString>
27 #include <QMessageBox>
28 #include <vvMainWindow.h>
29 //------------------------------------------------------------------------------
30 // Create the tool and automagically (I like this word) insert it in
31 // the main window menu.
32 ADD_TOOL(vvToolRigidReg);
33 //------------------------------------------------------------------------------
34
35
36 //------------------------------------------------------------------------------
37 vvToolRigidReg::vvToolRigidReg(vvMainWindowBase * parent, Qt::WindowFlags f):
38   vvToolWidgetBase(parent, f), 
39   vvToolBase<vvToolRigidReg>(parent), 
40   Ui::vvToolRigidReg() {
41   // GUI Initialization
42   Ui_vvToolRigidReg::setupUi(mToolWidget);
43   
44   // Set how many inputs are needed for this tool
45   AddInputSelector("Select the Reference Image");
46   AddInputSelector("Select the Target Image");
47   }
48 //------------------------------------------------------------------------------
49
50
51 //------------------------------------------------------------------------------
52 vvToolRigidReg::~vvToolRigidReg() {
53 }
54 //------------------------------------------------------------------------------
55
56
57 //------------------------------------------------------------------------------
58 bool vvToolRigidReg::close() { 
59   return vvToolWidgetBase::close(); 
60 }
61 //------------------------------------------------------------------------------
62
63
64 //------------------------------------------------------------------------------
65 void vvToolRigidReg::reject() { 
66   return vvToolWidgetBase::reject(); 
67 }
68 //------------------------------------------------------------------------------
69
70
71 //------------------------------------------------------------------------------
72 void vvToolRigidReg::InputIsSelected(std::vector<vvSlicerManager *> & l) {
73   //inputs
74   mInput1 = l[0];
75   mInput2 = l[1];  
76   mTwoInputs = true;
77   
78   
79   SetOverlay();
80   for (int j = 1; j <= 4; j++)
81     {
82      mCurrentSlicerManager->GetSlicer(j-1)->SetActorVisibility("overlay",0,true);
83     }
84   mCurrentSlicerManager->Render();
85
86   origin = new double[3];
87   std::vector<int> imagesize;
88   imagesize=mCurrentSlicerManager->GetImage()->GetSize();
89   QString xcord,ycord,zcord;
90
91   //default image origin is its centroid 
92   xcord=xcord.setNum(imagesize[0]*mCurrentSlicerManager->GetImage()->GetSpacing()[0]/2);
93   ycord=ycord.setNum(imagesize[1]*mCurrentSlicerManager->GetImage()->GetSpacing()[1]/2);
94   zcord=zcord.setNum(imagesize[2]*mCurrentSlicerManager->GetImage()->GetSpacing()[2]/2);
95   
96   Xval->setText(xcord);Yval->setText(ycord);Zval->setText(zcord);
97   origin[0]=xcord.toDouble();origin[1]=ycord.toDouble();origin[2]=zcord.toDouble();
98   this->mCurrentSlicerManager->GetImage()->SetOrigin(origin);
99  
100   xtrans_slider->setMaximum(2*mCurrentSlicerManager->GetImage()->GetSize()[0]);
101   xtrans_slider->setMinimum(-2*mCurrentSlicerManager->GetImage()->GetSize()[0]);
102   ytrans_slider->setMaximum(2*mCurrentSlicerManager->GetImage()->GetSize()[1]);
103   ytrans_slider->setMinimum(-2*mCurrentSlicerManager->GetImage()->GetSize()[1]);
104   ztrans_slider->setMaximum(2*mCurrentSlicerManager->GetImage()->GetSize()[2]);
105   ztrans_slider->setMinimum(-2*mCurrentSlicerManager->GetImage()->GetSize()[2]);
106
107   
108   xtrans_sb->setMaximum(2*mCurrentSlicerManager->GetImage()->GetSize()[0]);
109   xtrans_sb->setMinimum(-2*mCurrentSlicerManager->GetImage()->GetSize()[0]);
110   ytrans_sb->setMaximum(2*mCurrentSlicerManager->GetImage()->GetSize()[1]);
111   ytrans_sb->setMinimum(-2*mCurrentSlicerManager->GetImage()->GetSize()[1]);
112   ztrans_sb->setMaximum(2*mCurrentSlicerManager->GetImage()->GetSize()[2]);
113   ztrans_sb->setMinimum(-2*mCurrentSlicerManager->GetImage()->GetSize()[2]);
114
115   xrot_slider->setMaximum(360);
116   xrot_slider->setMinimum(-360);
117   yrot_slider->setMaximum(360);
118   yrot_slider->setMinimum(-360);
119   zrot_slider->setMaximum(360);
120   zrot_slider->setMinimum(-360);
121
122   
123   xrot_sb->setMaximum(360);
124   xrot_sb->setMinimum(-360);
125   yrot_sb->setMaximum(360);
126   yrot_sb->setMinimum(-360);
127   zrot_sb->setMaximum(360);
128   zrot_sb->setMinimum(-360);
129   
130   //connect all sigs to slots
131   connect(Xval, SIGNAL(editingFinished()), this, SLOT(SetXvalue()));
132   connect(Yval, SIGNAL(editingFinished()), this, SLOT(SetYvalue()));
133   connect(Zval, SIGNAL(editingFinished()), this, SLOT(SetZvalue()));
134   connect(xtrans_slider, SIGNAL(valueChanged(int)), this, SLOT(UpdateXtranslider()));
135   connect(ytrans_slider, SIGNAL(valueChanged(int)), this, SLOT(UpdateYtranslider()));
136   connect(ztrans_slider, SIGNAL(valueChanged(int)), this, SLOT(UpdateZtranslider()));   
137   connect(xrot_slider, SIGNAL(valueChanged(int)), this, SLOT(UpdateXrotslider()));
138   connect(yrot_slider, SIGNAL(valueChanged(int)), this, SLOT(UpdateYrotslider()));
139   connect(zrot_slider, SIGNAL(valueChanged(int)), this, SLOT(UpdateZrotslider()));   
140 }
141 //------------------------------------------------------------------------------
142
143 //------------------------------------------------------------------------------
144 void vvToolRigidReg::apply() {
145   
146 }
147 //------------------------------------------------------------------------------
148   
149 //------------------------------------------------------------------------------
150 void vvToolRigidReg::SetOverlay()
151 {
152   for(int i =0;i<mCurrentSlicerManager->NumberOfSlicers();i++)
153   {
154     mCurrentSlicerManager->GetSlicer(i)->SetOverlay(mInput2->GetImage());
155   }
156 }
157 //------------------------------------------------------------------------------
158
159 //------------------------------------------------------------------------------
160 void vvToolRigidReg::SetXvalue() {
161   QString xstr = Xval->text();
162   origin[0]= xstr.toDouble();
163   this->mCurrentSlicerManager->GetImage()->SetOrigin(origin);
164
165 }
166 //------------------------------------------------------------------------------
167
168 //------------------------------------------------------------------------------
169 void vvToolRigidReg::SetYvalue() {
170   QString ystr = Yval->text();
171   origin[1]= ystr.toDouble();
172   this->mCurrentSlicerManager->GetImage()->SetOrigin(origin);
173
174 }
175 //------------------------------------------------------------------------------
176
177 //------------------------------------------------------------------------------
178 void vvToolRigidReg::SetZvalue() {
179   QString zstr = Zval->text();
180   origin[2]= zstr.toDouble();
181   this->mCurrentSlicerManager->GetImage()->SetOrigin(origin);
182
183 }
184 //------------------------------------------------------------------------------
185
186 //------------------------------------------------------------------------------
187 void vvToolRigidReg::UpdateXtranslider(){
188     
189     int diff=0; 
190     diff=xtrans_slider->value()-xtrans_sb->value();
191     mCurrentSlicerManager->GetImage()->SetTranslationX(diff);//perform the translation difference  
192     for(int i=0; i<mCurrentSlicerManager->NumberOfSlicers(); i++) 
193      {
194       mCurrentSlicerManager->GetSlicer(i)->Render();    
195      }
196    xtrans_sb->setValue(xtrans_slider->value());
197 }
198 //------------------------------------------------------------------------------
199
200 //------------------------------------------------------------------------------
201 void vvToolRigidReg::UpdateYtranslider()
202 {  
203     int diff=0; 
204     diff=ytrans_slider->value()-ytrans_sb->value();
205     mCurrentSlicerManager->GetImage()->SetTranslationY(diff);//perform the translation difference
206     for(int i=0; i<mCurrentSlicerManager->NumberOfSlicers(); i++) 
207      {
208       mCurrentSlicerManager->GetSlicer(i)->Render();    
209      }
210    ytrans_sb->setValue(ytrans_slider->value());
211 }
212 //------------------------------------------------------------------------------
213
214 //------------------------------------------------------------------------------
215 void vvToolRigidReg::UpdateZtranslider()
216 {
217     int diff=0; 
218     diff=ztrans_slider->value()-ztrans_sb->value();
219     mCurrentSlicerManager->GetImage()->SetTranslationZ(diff);
220     for(int i=0; i<mCurrentSlicerManager->NumberOfSlicers(); i++) 
221      {
222       mCurrentSlicerManager->GetSlicer(i)->Render();    
223      }
224    ztrans_sb->setValue(ztrans_slider->value());
225 }
226 //------------------------------------------------------------------------------
227
228 //------------------------------------------------------------------------------
229 void vvToolRigidReg::UpdateXrotslider()
230 {
231     int diff=0; 
232     diff=xrot_slider->value()-xrot_sb->value();
233     mCurrentSlicerManager->GetImage()->SetRotateX(diff);
234     for(int i=0; i<mCurrentSlicerManager->NumberOfSlicers(); i++) 
235      {
236       mCurrentSlicerManager->GetSlicer(i)->Render();    
237      }
238    xrot_sb->setValue(xrot_slider->value());
239 }
240 //------------------------------------------------------------------------------
241
242 //------------------------------------------------------------------------------
243 void vvToolRigidReg::UpdateYrotslider()
244 {
245   int diff=0; 
246     diff=yrot_slider->value()-yrot_sb->value();
247       mCurrentSlicerManager->GetImage()->SetRotateY(diff);
248     for(int i=0; i<mCurrentSlicerManager->NumberOfSlicers(); i++) 
249      {
250       mCurrentSlicerManager->GetSlicer(i)->Render();    
251      }
252    yrot_sb->setValue(yrot_slider->value());
253 }
254 //------------------------------------------------------------------------------
255
256 //------------------------------------------------------------------------------
257 void vvToolRigidReg::UpdateZrotslider()
258 {
259     int diff=0; 
260     diff=zrot_slider->value()-zrot_sb->value();
261     mCurrentSlicerManager->GetImage()->SetRotateZ(diff);
262     for(int i=0; i<mCurrentSlicerManager->NumberOfSlicers(); i++) 
263      {
264       mCurrentSlicerManager->GetSlicer(i)->Render();    
265      }
266    zrot_sb->setValue(zrot_slider->value());
267 }