1 /*=========================================================================
2 Program: vv http://www.creatis.insa-lyon.fr/rio/vv
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
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.
13 It is distributed under dual licence
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"
21 #include <QApplication>
22 #include <vtkImageData.h>
23 #include <vtkSmartPointer.h>
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 //------------------------------------------------------------------------------
36 //------------------------------------------------------------------------------
37 vvToolRigidReg::vvToolRigidReg(vvMainWindowBase * parent, Qt::WindowFlags f):
38 vvToolWidgetBase(parent, f),
39 vvToolBase<vvToolRigidReg>(parent),
40 Ui::vvToolRigidReg() {
42 Ui_vvToolRigidReg::setupUi(mToolWidget);
44 // Set how many inputs are needed for this tool
45 AddInputSelector("Select the Reference Image");
46 AddInputSelector("Select the Target Image");
48 //------------------------------------------------------------------------------
51 //------------------------------------------------------------------------------
52 vvToolRigidReg::~vvToolRigidReg() {
54 //------------------------------------------------------------------------------
57 //------------------------------------------------------------------------------
58 bool vvToolRigidReg::close() {
59 return vvToolWidgetBase::close();
61 //------------------------------------------------------------------------------
64 //------------------------------------------------------------------------------
65 void vvToolRigidReg::reject() {
66 return vvToolWidgetBase::reject();
68 //------------------------------------------------------------------------------
71 //------------------------------------------------------------------------------
72 void vvToolRigidReg::InputIsSelected(std::vector<vvSlicerManager *> & l) {
80 for (int j = 1; j <= 4; j++)
82 mCurrentSlicerManager->GetSlicer(j-1)->SetActorVisibility("overlay",0,true);
84 mCurrentSlicerManager->Render();
86 origin = new double[3];
87 std::vector<int> imagesize;
88 imagesize=mCurrentSlicerManager->GetImage()->GetSize();
89 QString xcord,ycord,zcord;
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);
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);
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]);
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]);
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);
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);
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()));
141 //------------------------------------------------------------------------------
143 //------------------------------------------------------------------------------
144 void vvToolRigidReg::apply() {
147 //------------------------------------------------------------------------------
149 //------------------------------------------------------------------------------
150 void vvToolRigidReg::SetOverlay()
152 for(int i =0;i<mCurrentSlicerManager->NumberOfSlicers();i++)
154 mCurrentSlicerManager->GetSlicer(i)->SetOverlay(mInput2->GetImage());
157 //------------------------------------------------------------------------------
159 //------------------------------------------------------------------------------
160 void vvToolRigidReg::SetXvalue() {
161 QString xstr = Xval->text();
162 origin[0]= xstr.toDouble();
163 this->mCurrentSlicerManager->GetImage()->SetOrigin(origin);
166 //------------------------------------------------------------------------------
168 //------------------------------------------------------------------------------
169 void vvToolRigidReg::SetYvalue() {
170 QString ystr = Yval->text();
171 origin[1]= ystr.toDouble();
172 this->mCurrentSlicerManager->GetImage()->SetOrigin(origin);
175 //------------------------------------------------------------------------------
177 //------------------------------------------------------------------------------
178 void vvToolRigidReg::SetZvalue() {
179 QString zstr = Zval->text();
180 origin[2]= zstr.toDouble();
181 this->mCurrentSlicerManager->GetImage()->SetOrigin(origin);
184 //------------------------------------------------------------------------------
186 //------------------------------------------------------------------------------
187 void vvToolRigidReg::UpdateXtranslider(){
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++)
194 mCurrentSlicerManager->GetSlicer(i)->Render();
196 xtrans_sb->setValue(xtrans_slider->value());
198 //------------------------------------------------------------------------------
200 //------------------------------------------------------------------------------
201 void vvToolRigidReg::UpdateYtranslider()
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++)
208 mCurrentSlicerManager->GetSlicer(i)->Render();
210 ytrans_sb->setValue(ytrans_slider->value());
212 //------------------------------------------------------------------------------
214 //------------------------------------------------------------------------------
215 void vvToolRigidReg::UpdateZtranslider()
218 diff=ztrans_slider->value()-ztrans_sb->value();
219 mCurrentSlicerManager->GetImage()->SetTranslationZ(diff);
220 for(int i=0; i<mCurrentSlicerManager->NumberOfSlicers(); i++)
222 mCurrentSlicerManager->GetSlicer(i)->Render();
224 ztrans_sb->setValue(ztrans_slider->value());
226 //------------------------------------------------------------------------------
228 //------------------------------------------------------------------------------
229 void vvToolRigidReg::UpdateXrotslider()
232 diff=xrot_slider->value()-xrot_sb->value();
233 mCurrentSlicerManager->GetImage()->SetRotateX(diff);
234 for(int i=0; i<mCurrentSlicerManager->NumberOfSlicers(); i++)
236 mCurrentSlicerManager->GetSlicer(i)->Render();
238 xrot_sb->setValue(xrot_slider->value());
240 //------------------------------------------------------------------------------
242 //------------------------------------------------------------------------------
243 void vvToolRigidReg::UpdateYrotslider()
246 diff=yrot_slider->value()-yrot_sb->value();
247 mCurrentSlicerManager->GetImage()->SetRotateY(diff);
248 for(int i=0; i<mCurrentSlicerManager->NumberOfSlicers(); i++)
250 mCurrentSlicerManager->GetSlicer(i)->Render();
252 yrot_sb->setValue(yrot_slider->value());
254 //------------------------------------------------------------------------------
256 //------------------------------------------------------------------------------
257 void vvToolRigidReg::UpdateZrotslider()
260 diff=zrot_slider->value()-zrot_sb->value();
261 mCurrentSlicerManager->GetImage()->SetRotateZ(diff);
262 for(int i=0; i<mCurrentSlicerManager->NumberOfSlicers(); i++)
264 mCurrentSlicerManager->GetSlicer(i)->Render();
266 zrot_sb->setValue(zrot_slider->value());