]> Creatis software - clitk.git/blob - vv/vvSurfaceViewerDialog.cxx
Fusion windows level is now 4 decimals
[clitk.git] / vv / vvSurfaceViewerDialog.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 #ifndef _vvSurfaceViewerDialog_CXX
19 #define _vvSurfaceViewerDialog_CXX
20 #include <QtGui>
21 #include <Qt>
22
23 #include "vvSurfaceViewerDialog.h"
24 #include "vtkOBJReader.h"
25 #include "vtkInteractorStyle.h"
26
27
28 #include "vtkPolyDataMapper.h"
29 #include "vtkActor.h"
30 #include "vtkPolyData.h"
31 #include "vtkRenderWindow.h"
32 #include "vtkRendererCollection.h"
33 #include "vtkRenderer.h"
34
35 #include <QMessageBox>
36
37 //----------------------------------------------------------------------------
38 class vvManagerCallback : public vtkCommand
39 {
40 public:
41   static vvManagerCallback *New() {
42     return new vvManagerCallback;
43   }
44
45   void Execute(vtkObject *caller,
46                unsigned long event,
47                void *vtkNotUsed(callData)) {
48     vtkInteractorStyle *isi = static_cast<vtkInteractorStyle *>(caller);
49     if (isi) {
50       std::string KeyPress = isi->GetInteractor()->GetKeySym();
51       if (KeyPress == "Left") {
52         this->IV->PreviousTime();
53       }
54       if (KeyPress == "Right") {
55         this->IV->NextTime();
56       }
57     }
58   }
59   vvSurfaceViewerDialog *IV;
60 };
61
62
63 //====================================================================
64 vvSurfaceViewerDialog::vvSurfaceViewerDialog(QWidget * parent, Qt::WindowFlags f)
65   :QDialog(parent,f), Ui::vvSurfaceViewerDialog()
66 {
67
68   // initialization
69   setupUi(this);
70
71   mReaders.clear();
72   mMapper = NULL;
73   mActor = NULL;
74   mRenderer = NULL;
75   mCurrentTime = 0;
76
77   connect(loadButton,SIGNAL(clicked()),this,SLOT(LoadSurface()));
78 }
79
80 vvSurfaceViewerDialog::~vvSurfaceViewerDialog()
81 {
82   for (unsigned int i = 0; i < mReaders.size(); i++)
83     mReaders[i]->Delete();
84
85   if (mMapper)
86     mMapper->Delete();
87
88   if (mActor)
89     mActor->Delete();
90
91   if (mRenderer)
92     mRenderer->Delete();
93 }
94
95 void vvSurfaceViewerDialog::LoadSurface()
96 {
97   QString Extensions = "All Files (*)";
98   Extensions += ";;Surface ( *.vtk)";
99   QStringList files = QFileDialog::getOpenFileNames(this,tr("Load Surfaces"),tr(""),Extensions);
100   if (files.isEmpty())
101     return;
102
103   if (!mMapper) {
104     mMapper = vtkPolyDataMapper::New();
105   }
106
107   for (int i = 0; i < files.size(); i++) {
108     vtkOBJReader* reader = vtkOBJReader::New();
109     reader->SetFileName(files[i].toStdString().c_str());
110     reader->Update();
111     mReaders.push_back(reader);
112   }
113
114   mMapper->SetInput(mReaders[mCurrentTime]->GetOutput());
115
116   if (!mActor) {
117     mActor = vtkActor::New();
118     mActor->SetMapper(mMapper);
119   }
120   if (!mRenderer) {
121     mRenderer = vtkRenderer::New();
122     mRenderer->AddActor(mActor);
123     renderWidget->GetRenderWindow()->AddRenderer(mRenderer);
124   }
125
126   mRenderer->ResetCamera();
127   renderWidget->GetRenderWindow()->Render();
128
129   vvManagerCallback *smc = vvManagerCallback::New();
130   smc->IV = this;
131
132   if (renderWidget->GetRenderWindow()->GetInteractor())
133     renderWidget->GetRenderWindow()->GetInteractor()->
134     GetInteractorStyle()->AddObserver(vtkCommand::KeyPressEvent, smc);
135   //readHeader->Delete();
136 }
137
138 void vvSurfaceViewerDialog::NextTime()
139 {
140   mCurrentTime++;
141   if (mCurrentTime >= mReaders.size())
142     mCurrentTime = 0;
143   mMapper->SetInput(mReaders[mCurrentTime]->GetOutput());
144   mMapper->Modified();
145   renderWidget->GetRenderWindow()->Render();
146 }
147
148 void vvSurfaceViewerDialog::PreviousTime()
149 {
150   mCurrentTime--;
151   if (mCurrentTime < 0)
152     mCurrentTime = mReaders.size() - 1;
153   mMapper->SetInput(mReaders[mCurrentTime]->GetOutput());
154   mMapper->Modified();
155   renderWidget->GetRenderWindow()->Render();
156 }
157
158 #endif /* end #define _vvSurfaceViewerDialog_CXX */