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