]> Creatis software - clitk.git/blob - vv/vvSurfaceViewerDialog.cxx
remove antique RCS headers
[clitk.git] / vv / vvSurfaceViewerDialog.cxx
1 #ifndef _vvSurfaceViewerDialog_CXX
2 #define _vvSurfaceViewerDialog_CXX
3
4 /*=========================================================================
5
6 Program:   vv
7 Language:  C++
8 Author :   David Sarrut (david.sarrut@gmail.com)
9
10 Copyright (C) 2008
11 Léon Bérard cancer center http://oncora1.lyon.fnclcc.fr
12 CREATIS-LRMN http://www.creatis.insa-lyon.fr
13
14 This program is free software: you can redistribute it and/or modify
15 it under the terms of the GNU General Public License as published by
16 the Free Software Foundation, version 3 of the License.
17
18 This program is distributed in the hope that it will be useful,
19 but WITHOUT ANY WARRANTY; without even the implied warranty of
20 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
21 GNU General Public License for more details.
22
23 You should have received a copy of the GNU General Public License
24 along with this program.  If not, see <http://www.gnu.org/licenses/>.
25
26 =========================================================================*/
27 #include <QtGui>
28 #include <Qt>
29
30 #include "vvSurfaceViewerDialog.h"
31 #include "vtkOBJReader.h"
32 #include "vtkInteractorStyle.h"
33
34
35 #include "vtkPolyDataMapper.h"
36 #include "vtkActor.h"
37 #include "vtkPolyData.h"
38 #include "vtkRenderWindow.h"
39 #include "vtkRendererCollection.h"
40 #include "vtkRenderer.h"
41
42 #include <QMessageBox>
43
44 //----------------------------------------------------------------------------
45 class vvManagerCallback : public vtkCommand
46 {
47 public:
48     static vvManagerCallback *New() {
49         return new vvManagerCallback;
50     }
51
52     void Execute(vtkObject *caller,
53                  unsigned long event,
54                  void *vtkNotUsed(callData))
55     {
56         vtkInteractorStyle *isi = static_cast<vtkInteractorStyle *>(caller);
57         if (isi)
58         {
59             std::string KeyPress = isi->GetInteractor()->GetKeySym();
60             if (KeyPress == "Left")
61             {
62                 this->IV->PreviousTime();
63             }
64             if (KeyPress == "Right")
65             {
66                 this->IV->NextTime();
67             }
68         }
69     }
70     vvSurfaceViewerDialog *IV;
71 };
72
73
74 //====================================================================
75 vvSurfaceViewerDialog::vvSurfaceViewerDialog(QWidget * parent, Qt::WindowFlags f)
76         :QDialog(parent,f), Ui::vvSurfaceViewerDialog() {
77
78     // initialization
79     setupUi(this);
80
81     mReaders.clear();
82     mMapper = NULL;
83     mActor = NULL;
84     mRenderer = NULL;
85     mCurrentTime = 0;
86
87     connect(loadButton,SIGNAL(clicked()),this,SLOT(LoadSurface()));
88 }
89
90 vvSurfaceViewerDialog::~vvSurfaceViewerDialog()
91 {
92     for (unsigned int i = 0; i < mReaders.size();i++)
93         mReaders[i]->Delete();
94
95     if (mMapper)
96         mMapper->Delete();
97
98     if (mActor)
99         mActor->Delete();
100
101     if (mRenderer)
102         mRenderer->Delete();
103 }
104
105 void vvSurfaceViewerDialog::LoadSurface()
106 {
107     QString Extensions = "All Files (*)";
108     Extensions += ";;Surface ( *.vtk)";
109     QStringList files = QFileDialog::getOpenFileNames(this,tr("Load Surfaces"),tr(""),Extensions);
110     if (files.isEmpty())
111         return;
112
113     if (!mMapper)
114     {
115         mMapper = vtkPolyDataMapper::New();
116     }
117
118     for (int i = 0; i < files.size(); i++)
119     {
120         vtkOBJReader* reader = vtkOBJReader::New();
121         reader->SetFileName(files[i].toStdString().c_str());
122         reader->Update();
123         mReaders.push_back(reader);
124     }
125
126     mMapper->SetInput(mReaders[mCurrentTime]->GetOutput());
127
128     if (!mActor)
129     {
130         mActor = vtkActor::New();
131         mActor->SetMapper(mMapper);
132     }
133     if (!mRenderer)
134     {
135         mRenderer = vtkRenderer::New();
136         mRenderer->AddActor(mActor);
137         renderWidget->GetRenderWindow()->AddRenderer(mRenderer);
138     }
139
140     mRenderer->ResetCamera();
141     renderWidget->GetRenderWindow()->Render();
142
143     vvManagerCallback *smc = vvManagerCallback::New();
144     smc->IV = this;
145
146     if (renderWidget->GetRenderWindow()->GetInteractor())
147         renderWidget->GetRenderWindow()->GetInteractor()->
148         GetInteractorStyle()->AddObserver(vtkCommand::KeyPressEvent, smc);
149     //readHeader->Delete();
150 }
151
152 void vvSurfaceViewerDialog::NextTime()
153 {
154     mCurrentTime++;
155     if (mCurrentTime >= mReaders.size())
156         mCurrentTime = 0;
157     mMapper->SetInput(mReaders[mCurrentTime]->GetOutput());
158     mMapper->Modified();
159     renderWidget->GetRenderWindow()->Render();
160 }
161
162 void vvSurfaceViewerDialog::PreviousTime()
163 {
164     mCurrentTime--;
165     if (mCurrentTime < 0)
166         mCurrentTime = mReaders.size() - 1;
167     mMapper->SetInput(mReaders[mCurrentTime]->GetOutput());
168     mMapper->Modified();
169     renderWidget->GetRenderWindow()->Render();
170 }
171
172 #endif /* end #define _vvSurfaceViewerDialog_CXX */