]> Creatis software - clitk.git/blob - vv/vvSurfaceViewerDialog.cxx
added the new headers
[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     {
49         vtkInteractorStyle *isi = static_cast<vtkInteractorStyle *>(caller);
50         if (isi)
51         {
52             std::string KeyPress = isi->GetInteractor()->GetKeySym();
53             if (KeyPress == "Left")
54             {
55                 this->IV->PreviousTime();
56             }
57             if (KeyPress == "Right")
58             {
59                 this->IV->NextTime();
60             }
61         }
62     }
63     vvSurfaceViewerDialog *IV;
64 };
65
66
67 //====================================================================
68 vvSurfaceViewerDialog::vvSurfaceViewerDialog(QWidget * parent, Qt::WindowFlags f)
69         :QDialog(parent,f), Ui::vvSurfaceViewerDialog() {
70
71     // initialization
72     setupUi(this);
73
74     mReaders.clear();
75     mMapper = NULL;
76     mActor = NULL;
77     mRenderer = NULL;
78     mCurrentTime = 0;
79
80     connect(loadButton,SIGNAL(clicked()),this,SLOT(LoadSurface()));
81 }
82
83 vvSurfaceViewerDialog::~vvSurfaceViewerDialog()
84 {
85     for (unsigned int i = 0; i < mReaders.size();i++)
86         mReaders[i]->Delete();
87
88     if (mMapper)
89         mMapper->Delete();
90
91     if (mActor)
92         mActor->Delete();
93
94     if (mRenderer)
95         mRenderer->Delete();
96 }
97
98 void vvSurfaceViewerDialog::LoadSurface()
99 {
100     QString Extensions = "All Files (*)";
101     Extensions += ";;Surface ( *.vtk)";
102     QStringList files = QFileDialog::getOpenFileNames(this,tr("Load Surfaces"),tr(""),Extensions);
103     if (files.isEmpty())
104         return;
105
106     if (!mMapper)
107     {
108         mMapper = vtkPolyDataMapper::New();
109     }
110
111     for (int i = 0; i < files.size(); i++)
112     {
113         vtkOBJReader* reader = vtkOBJReader::New();
114         reader->SetFileName(files[i].toStdString().c_str());
115         reader->Update();
116         mReaders.push_back(reader);
117     }
118
119     mMapper->SetInput(mReaders[mCurrentTime]->GetOutput());
120
121     if (!mActor)
122     {
123         mActor = vtkActor::New();
124         mActor->SetMapper(mMapper);
125     }
126     if (!mRenderer)
127     {
128         mRenderer = vtkRenderer::New();
129         mRenderer->AddActor(mActor);
130         renderWidget->GetRenderWindow()->AddRenderer(mRenderer);
131     }
132
133     mRenderer->ResetCamera();
134     renderWidget->GetRenderWindow()->Render();
135
136     vvManagerCallback *smc = vvManagerCallback::New();
137     smc->IV = this;
138
139     if (renderWidget->GetRenderWindow()->GetInteractor())
140         renderWidget->GetRenderWindow()->GetInteractor()->
141         GetInteractorStyle()->AddObserver(vtkCommand::KeyPressEvent, smc);
142     //readHeader->Delete();
143 }
144
145 void vvSurfaceViewerDialog::NextTime()
146 {
147     mCurrentTime++;
148     if (mCurrentTime >= mReaders.size())
149         mCurrentTime = 0;
150     mMapper->SetInput(mReaders[mCurrentTime]->GetOutput());
151     mMapper->Modified();
152     renderWidget->GetRenderWindow()->Render();
153 }
154
155 void vvSurfaceViewerDialog::PreviousTime()
156 {
157     mCurrentTime--;
158     if (mCurrentTime < 0)
159         mCurrentTime = mReaders.size() - 1;
160     mMapper->SetInput(mReaders[mCurrentTime]->GetOutput());
161     mMapper->Modified();
162     renderWidget->GetRenderWindow()->Render();
163 }
164
165 #endif /* end #define _vvSurfaceViewerDialog_CXX */