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