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>
24 #include <vtkTransform.h>
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 //------------------------------------------------------------------------------
39 //------------------------------------------------------------------------------
40 vvToolRigidReg::vvToolRigidReg(vvMainWindowBase * parent, Qt::WindowFlags f):
41 vvToolWidgetBase(parent, f),
42 vvToolBase<vvToolRigidReg>(parent),
46 Ui_vvToolRigidReg::setupUi(mToolWidget);
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: ");
55 //------------------------------------------------------------------------------
57 //------------------------------------------------------------------------------
58 vvToolRigidReg::~vvToolRigidReg()
61 //------------------------------------------------------------------------------
63 //------------------------------------------------------------------------------
64 bool vvToolRigidReg::close()
67 return vvToolWidgetBase::close();
69 //------------------------------------------------------------------------------
71 //------------------------------------------------------------------------------
72 void vvToolRigidReg::reject()
75 for(int i=0;i<mCurrentSlicerManager->NumberOfSlicers();i++)
77 mInput1->GetSlicer(i)->RemoveActor("overlay",0);
78 mInput1->SetColorMap(0);
81 return vvToolWidgetBase::reject();
83 //------------------------------------------------------------------------------
85 //------------------------------------------------------------------------------
86 void vvToolRigidReg::InputIsSelected(std::vector<vvSlicerManager *> & l)
93 this->mImageSize=mCurrentSlicerManager->GetImage()->GetSize();
98 //connect all sigs to slots
99 connect(resetbutton, SIGNAL(pressed()), this, SLOT(ResetTransform()));
101 connect(Xval, SIGNAL(editingFinished()), this, SLOT(SetXvalue()));
102 connect(Yval, SIGNAL(editingFinished()), this, SLOT(SetYvalue()));
103 connect(Zval, SIGNAL(editingFinished()), this, SLOT(SetZvalue()));
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()));
113 connect(xtrans_slider, SIGNAL(valueChanged(int)), this, SLOT(UpdateXtranslider()));
115 connect(ytrans_slider, SIGNAL(valueChanged(int)), this, SLOT(UpdateYtranslider()));
116 connect(ztrans_slider, SIGNAL(valueChanged(int)), this, SLOT(UpdateZtranslider()));
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()));
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()));
132 connect(loadbutton, SIGNAL(pressed()), this, SLOT(ReadFile()));
133 connect(savebutton, SIGNAL(pressed()), this, SLOT(SaveFile()));
135 //------------------------------------------------------------------------------
137 //------------------------------------------------------------------------------
138 void vvToolRigidReg::apply()
140 std::ostringstream osstream;
141 osstream << "Transformed_"
142 << mInput2->GetSlicer(0)->GetFileName() << ".mhd";
143 AddImage(mInput2->GetImage(),osstream.str());
144 QApplication::restoreOverrideCursor();
147 //------------------------------------------------------------------------------
149 //------------------------------------------------------------------------------
150 void vvToolRigidReg::SetOverlay()
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();
160 //------------------------------------------------------------------------------
162 //------------------------------------------------------------------------------
163 void vvToolRigidReg::SetXvalue()
165 QString xstr = Xval->text();
167 //------------------------------------------------------------------------------
169 //------------------------------------------------------------------------------
170 void vvToolRigidReg::SetYvalue()
172 QString ystr = Yval->text();
174 //------------------------------------------------------------------------------
176 //------------------------------------------------------------------------------
177 void vvToolRigidReg::SetZvalue()
179 QString zstr = Zval->text();
181 //------------------------------------------------------------------------------
183 //------------------------------------------------------------------------------
184 void vvToolRigidReg::SetTransform(double tX, double tY, double tZ, double aX, double aY, double aZ)
187 vtkSmartPointer<vtkTransform> transform = mCurrentSlicerManager->GetImage()->GetTransform();
188 transform->PostMultiply();
190 if (aX!=0 || aY!=0 || aZ!=0) {
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);
202 if (tX!=0||tY!=0||tZ!=0)
203 transform->Translate(tX,tY,tZ);
207 for (int i=0; i<mCurrentSlicerManager->NumberOfSlicers(); i++) {
208 mCurrentSlicerManager->GetImage()->UpdateReslice();
209 mCurrentSlicerManager->GetSlicer(i)->ForceUpdateDisplayExtent();
210 mCurrentSlicerManager->GetSlicer(i)->Render();
213 //------------------------------------------------------------------------------
215 //------------------------------------------------------------------------------
216 void vvToolRigidReg::SetTransform(vtkMatrix4x4 *matrix)
218 vtkSmartPointer<vtkTransform> transform =mCurrentSlicerManager->GetImage()->GetTransform();
219 transform->SetMatrix(matrix);
220 // mCurrentSlicerManager->GetImage()->SetTransform(transform);
221 transform->PostMultiply();
222 transform->Concatenate(matrix);
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();
231 //------------------------------------------------------------------------------
233 //------------------------------------------------------------------------------
234 void vvToolRigidReg::UpdateTextEditor(vtkMatrix4x4 *matrix,QString SetOrder)
236 QString str1,str2,str3;
240 textEdit->setAcceptRichText(true);
241 str2=textEdit->toPlainText();
242 str2.append("Rotation Center(mm): \n");
243 textEdit->setText(str2);
245 str2=textEdit->toPlainText();
246 textEdit->setTextColor(QColor(255,0,0));
247 str2.append(str3.append(Xval->text()));
248 textEdit->setText(str2);
251 str2=textEdit->toPlainText();
253 textEdit->setText(str2);
255 str2=textEdit->toPlainText();
256 str2.append(str3.append(Yval->text()));
257 textEdit->setText(str2);
260 str2=textEdit->toPlainText();
262 textEdit->setText(str2);
265 str2=textEdit->toPlainText();
266 str2.append(str3.append(Zval->text()));
267 textEdit->setText(str2);
270 str2=textEdit->toPlainText();
272 textEdit->setText(str2);
275 str2=textEdit->toPlainText();
276 str2.append("Transformation Matrix:\n");
277 textEdit->setText(str2);
284 str2=textEdit->toPlainText();
285 str2.append("\t"+str1.setNum(matrix->Element[i][j]));
286 textEdit->setText(str2);
288 str2=textEdit->toPlainText();
290 textEdit->setText(str2);
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();
297 str2=textEdit->toPlainText();
298 mOrder+=SetOrder+QString(" ");
300 textEdit->setText(str2);
302 //------------------------------------------------------------------------------
304 //------------------------------------------------------------------------------
305 void vvToolRigidReg::SetOrderXtrans()
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());
311 //------------------------------------------------------------------------------
313 //------------------------------------------------------------------------------
314 void vvToolRigidReg::SetOrderYtrans()
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());
321 //------------------------------------------------------------------------------
323 //------------------------------------------------------------------------------
324 void vvToolRigidReg::SetOrderZtrans()
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());
331 //------------------------------------------------------------------------------
333 //------------------------------------------------------------------------------
334 void vvToolRigidReg::SetOrderXrot()
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());
341 //------------------------------------------------------------------------------
343 //------------------------------------------------------------------------------
344 void vvToolRigidReg::SetOrderYrot()
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());
351 //------------------------------------------------------------------------------
353 //------------------------------------------------------------------------------
354 void vvToolRigidReg::SetOrderZrot()
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());
360 //------------------------------------------------------------------------------
362 //------------------------------------------------------------------------------
363 void vvToolRigidReg::UpdateXtransb()
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());
372 //------------------------------------------------------------------------------
374 //------------------------------------------------------------------------------
375 void vvToolRigidReg::UpdateXtranslider()
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());
383 //------------------------------------------------------------------------------
385 //------------------------------------------------------------------------------
386 void vvToolRigidReg::UpdateYtransb()
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());
396 //------------------------------------------------------------------------------
398 //------------------------------------------------------------------------------
399 void vvToolRigidReg::UpdateYtranslider()
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());
407 //------------------------------------------------------------------------------
409 //------------------------------------------------------------------------------
410 void vvToolRigidReg::UpdateZtransb()
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());
420 //------------------------------------------------------------------------------
422 //------------------------------------------------------------------------------
423 void vvToolRigidReg::UpdateZtranslider()
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());
431 //------------------------------------------------------------------------------
433 //------------------------------------------------------------------------------
434 void vvToolRigidReg::UpdateXrotsb()
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());
444 //------------------------------------------------------------------------------
446 //------------------------------------------------------------------------------
447 void vvToolRigidReg::UpdateXrotslider()
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());
455 //------------------------------------------------------------------------------
457 //------------------------------------------------------------------------------
458 void vvToolRigidReg::UpdateYrotsb()
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());
468 //------------------------------------------------------------------------------
470 //------------------------------------------------------------------------------
471 void vvToolRigidReg::UpdateYrotslider()
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());
479 //------------------------------------------------------------------------------
481 //------------------------------------------------------------------------------
482 void vvToolRigidReg::UpdateZrotsb()
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());
492 //------------------------------------------------------------------------------
494 //------------------------------------------------------------------------------
495 void vvToolRigidReg::UpdateZrotslider()
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());
503 //------------------------------------------------------------------------------
505 //------------------------------------------------------------------------------
506 void vvToolRigidReg::SaveFile()
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)"));
512 if (file.open(QFile::WriteOnly | QFile::Truncate)) {
513 QTextStream out(&file);
514 out << textEdit->toPlainText() ;
517 //------------------------------------------------------------------------------
519 //------------------------------------------------------------------------------
520 void vvToolRigidReg::ReadFile()
522 QString parameters=QString("Tx: Ty: Tz:");
523 vtkSmartPointer<vtkTransform> transform = mCurrentSlicerManager->GetImage()->GetTransform();
526 QString s = QFileDialog::getOpenFileName(
529 "/home/bharath/clitk3_27Apr/clitk3/build/bin/",
530 "Text (*.txt *.rtf *.doc)");
534 std::vector<QString> Qstr;
536 readfile.open("text.txt");
537 if (readfile.is_open())
539 while (!readfile.eof())
542 Qstr.push_back(QString(x.c_str()));
546 else cout << "Unable to open file";
548 //Obtain the Rotation Center
549 Xval->setText(Qstr.at(2));
550 Yval->setText(Qstr.at(3));
551 Zval->setText(Qstr.at(4));
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());
562 ytrans_slider->setValue(Qstr.at(14).toDouble());
564 ztrans_slider->setValue(Qstr.at(18).toDouble());
574 DD(*transform->GetMatrix());
575 //Obtain the Transformation Matrix
577 str=QString(value.at(10).c_str());
578 DD(str.toStdString());
582 //put the streamed values in matrix array
583 /* for(int i=0;i<4;i++)
587 matrix->Element[i][j]=value[i*4+j];
590 SetTransform( matrix);*/
592 /*xtrans_slider->setValue(value.at(10));
593 ytrans_slider->setValue(value.at(14));
594 ztrans_slider->setValue(value.at(18));
597 UpdateZtranslider();*/
599 //------------------------------------------------------------------------------
601 //------------------------------------------------------------------------------
602 void vvToolRigidReg::ResetTransform()
604 vtkMatrix4x4 *matrix = vtkMatrix4x4::New();
609 SetTransform(matrix);
611 mOrder=QString("Rotation Order: ");
612 UpdateTextEditor(matrix,mOrder);
614 //------------------------------------------------------------------------------
616 //------------------------------------------------------------------------------
617 void vvToolRigidReg::SetRotationCenter()
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();
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);
628 Xval->setText(xcord);
629 Yval->setText(ycord);
630 Zval->setText(zcord);
633 //------------------------------------------------------------------------------
635 //------------------------------------------------------------------------------
636 void vvToolRigidReg::InitializeSliders()
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();
651 xtrans_sb->setValue(0);
652 ytrans_sb->setValue(0);
653 ztrans_sb->setValue(0);
655 xtrans_slider->setValue(0);
656 ytrans_slider->setValue(0);
657 ztrans_slider->setValue(0);
659 xrot_sb->setValue(0);
660 yrot_sb->setValue(0);
661 zrot_sb->setValue(0);
663 xrot_slider->setValue(0);
664 yrot_slider->setValue(0);
665 zrot_slider->setValue(0);
667 //------------------------------------------------------------------------------
669 //------------------------------------------------------------------------------
670 void vvToolRigidReg::SetSliderRanges()
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);
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);
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);
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);