]> Creatis software - creaMaracasVisu.git/blob - lib/GUI/Base/SurfaceRenderer/wxMaracasSurfaceRenderingManager.cxx
addition of files
[creaMaracasVisu.git] / lib / GUI / Base / SurfaceRenderer / wxMaracasSurfaceRenderingManager.cxx
1 /*=========================================================================
2
3   Program:   wxMaracas
4   Module:    $RCSfile: wxMaracasSurfaceRenderingManager.cxx,v $
5   Language:  C++
6   Date:      $Date: 2011/06/28 16:56:13 $
7   Version:   $Revision: 1.1 $
8
9   Copyright: (c) 2002, 2003
10   License:
11
12      This software is distributed WITHOUT ANY WARRANTY; without even
13      the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
14      PURPOSE.  See the above copyright notice for more information.
15
16 =========================================================================*/
17 #include "wxMaracasSurfaceRenderingManager.h"
18 #include "wxMaracasSurfaceRenderingManagerDataMhd.h"
19
20 /**
21 **      Start of the manager class
22 **/
23 wxMaracasSurfaceRenderingManager::wxMaracasSurfaceRenderingManager(){
24         _renderer = NULL;
25         _interactor = NULL;
26         _idCount=0;
27 }
28 wxMaracasSurfaceRenderingManager::~wxMaracasSurfaceRenderingManager(){
29 }
30
31 /**
32 **      Sets the renderer to manage the prop3D from the surface render
33 **/
34 void wxMaracasSurfaceRenderingManager::setRenderer(vtkRenderer*  renderer){
35         _renderer = renderer;
36 }
37
38 /**
39 **      Sets the renderer to manage the prop3D from the surface render
40 **/
41 void wxMaracasSurfaceRenderingManager::setInteractor(vtkRenderWindowInteractor*  interactor){
42         _interactor = interactor;
43 }
44
45
46 /**
47 ** Gets the renderer to manage the prop3D from the surface render
48 **/
49 vtkRenderer* wxMaracasSurfaceRenderingManager::getRenderer(){
50         return _renderer;
51 }
52
53 /**
54 ** Updates volume
55 **/
56 void wxMaracasSurfaceRenderingManager::Update(int pid)throw(char*){
57         wxMaracasSurfaceRenderingManagerData* data = this->getViewData(pid);    
58         ((wxMaracasSurfaceRenderingManagerDataMhd*)data)->UpdateSurface();
59         _renderer->Render();
60 }
61
62 /**
63 **      Adds a prop3D to the manager and returns the identifier
64 **/
65 int wxMaracasSurfaceRenderingManager::addProp3D(int idTP, vtkProp3D* prop3D, std::string dataname)  throw(char*){
66         checkInvariant();
67         if(prop3D != NULL){
68                 wxMaracasSurfaceRenderingManagerData* data = new wxMaracasSurfaceRenderingManagerData(prop3D, dataname, _interactor);
69                 prop3Dvect.push_back(data);
70                 _renderer->AddActor(data->getProp3D());
71                 if(idTP == -1)
72                 {
73                         data->setId(_idCount);
74                         _idCount++;
75                 }
76                 else
77                 {
78                         data->setId(idTP);
79                 }
80                 return data->getId();
81         }else{
82                 throw "Check vtkProp3D file or input";
83         }
84         return -1;
85 }
86 int wxMaracasSurfaceRenderingManager::addPropMHD(int idTP, vtkImageData* imagedata, std::string dataname) throw(char*){
87         checkInvariant();
88         if(imagedata != NULL){
89                 image = imagedata;
90                 wxMaracasSurfaceRenderingManagerData* data = new wxMaracasSurfaceRenderingManagerDataMhd(imagedata, dataname, _interactor);
91                 prop3Dvect.push_back(data);     
92                 _renderer->AddActor(data->getProp3D());
93                 if(idTP == -1)
94                 {
95                         data->setId(_idCount);
96                         _idCount++;
97                 }
98                 else
99                 {
100                         data->setId(idTP);
101                 }
102                 printf("wxMaracasSurfaceRenderingManager::addPropMHD->idSurfaceRender: %i\n", data->getId());
103                 return data->getId();
104         }else{
105                 throw "Check ImageData file or input";
106         }
107         return -1;
108 }
109 /**
110 **      adds or removes an actor depending of the bool value
111 **/
112 void wxMaracasSurfaceRenderingManager::addRemoveActor(int propid, bool addremove)  throw(char*){
113         checkInvariant();
114         
115         wxMaracasSurfaceRenderingManagerData* data = this->getViewData(propid);         
116         if(data->getProp3D()!=NULL){
117                 if(addremove){
118                         _renderer->AddViewProp(data->getProp3D());
119                 }else{
120                         _renderer->RemoveViewProp(data->getProp3D());
121                 }
122                 _renderer->Render();
123         }
124 }
125 /**
126 **      adds or removes the surface box depending of the bool value
127 **/
128 void wxMaracasSurfaceRenderingManager::addRemoveSurfaceBox(int propid, bool addremove)  throw(char*){
129         checkInvariant();
130         
131         wxMaracasSurfaceRenderingManagerData* data = this->getViewData(propid);         
132         if(data->getProp3D()!=NULL){
133                 data->addRemoveSurfaceBox(addremove);
134                 /*if(addremove){
135                         data->
136                         _renderer->AddViewProp(data->getProp3D());
137                 }else{
138                         _renderer->RemoveViewProp(data->getProp3D());
139                 }
140                 _renderer->Render();*/
141         }
142         
143 }
144
145 /**
146 **      Changes the opacity in a prop3D
147 **/
148 void wxMaracasSurfaceRenderingManager::changeOpacity(int propid, int value)  throw(char*){
149         checkInvariant();       
150
151
152         this->getViewData(propid)->changeOpacity(value);
153         
154         _renderer->Render();
155
156 }
157
158 /**
159 **      changes the isovalue in a prop3D
160 **/
161 void wxMaracasSurfaceRenderingManager::changeIsoValue(int propid, double value ){
162         checkInvariant();       
163
164         wxMaracasSurfaceRenderingManagerData* data = this->getViewData(propid);         
165
166         //_renderer->RemoveActor(data->getProp3D());
167         ((wxMaracasSurfaceRenderingManagerDataMhd*)data)->changeIsoValue(value);
168         //_renderer->AddActor(data->getProp3D());
169
170         _renderer->Render();
171 }
172
173 /**
174 **      changes the isovalue in a prop3D
175 **/
176 void wxMaracasSurfaceRenderingManager::changeIsoValue(int propid, double min, double max ){
177         checkInvariant();
178
179         wxMaracasSurfaceRenderingManagerData* data = this->getViewData(propid);
180
181         //_renderer->RemoveActor(data->getProp3D());
182         ((wxMaracasSurfaceRenderingManagerDataMhd*)data)->changeIsoValue(min, max);
183         //_renderer->AddActor(data->getProp3D());
184
185         _renderer->Render();
186 }
187
188 vtkProp3D* wxMaracasSurfaceRenderingManager:: getProp3D(std::string filename){
189         if(filename.compare("")!= 0){
190                 vtkSTLReader *STLReader=vtkSTLReader::New();
191                 STLReader->SetFileName(filename.c_str());
192                 STLReader->Update();
193                 vtkPolyDataMapper* dataMapper = vtkPolyDataMapper::New();
194                 dataMapper->SetInput(STLReader->GetOutput());
195                 
196                 vtkActor* dataActor = vtkActor::New();
197                 dataActor->SetMapper(dataMapper);       
198                 dataActor->GetProperty()->SetOpacity(1);
199                 
200                 return dataActor;
201         }       
202         return NULL;
203 }
204
205 vtkImageData* wxMaracasSurfaceRenderingManager::getImageData(std::string filename){
206         if(filename.compare("")!= 0){   
207                 
208                 vtkMetaImageReader* reader =  vtkMetaImageReader::New();        
209                 reader->SetFileName(filename.c_str());
210                 reader->Update();
211                 vtkImageData* img = reader->GetOutput();
212                 //reader->Delete();
213                 return img;
214         }       
215         return NULL;
216 }
217
218 vtkImageData* wxMaracasSurfaceRenderingManager::getImageData(){
219         return image;
220 }
221
222 void wxMaracasSurfaceRenderingManager::checkInvariant()  throw(char*){
223         if(this->_renderer==NULL){
224                 throw "Renderer not set";
225         }
226 }
227
228 wxMaracasSurfaceRenderingManagerData* wxMaracasSurfaceRenderingManager::getViewData(int id) throw(char*){
229     int i;
230         for(i = 0; i < (int)(prop3Dvect.size());i++){
231                 if(prop3Dvect[i]->getId() == id){
232                         return prop3Dvect[i];
233                 }
234         }
235         throw "id not found in the data";
236
237         return NULL;
238 }
239
240 int wxMaracasSurfaceRenderingManager::getMaxIsoValue(int propid) throw(char*){
241         
242         return ((wxMaracasSurfaceRenderingManagerDataMhd*)this->getViewData(propid))->getMaxGreyLevel();
243
244 }
245
246 void wxMaracasSurfaceRenderingManager::changeColor(int propid, double red, double green, double blue) throw(char*){
247         checkInvariant();       
248         this->getViewData(propid)->changeColor(red, green, blue);
249
250         _renderer->Render();
251 }
252
253 void wxMaracasSurfaceRenderingManager::deleteActor(int propid) throw (char *){
254         checkInvariant();       
255
256         this->addRemoveActor(propid, false);
257
258         int i,n;
259         bool exit = false;
260         for(i = 0; i < (int)(prop3Dvect.size())&&!exit;i++){
261                 if(prop3Dvect[i]->getId() == propid){                   
262                         n=i;
263                         exit = true;
264                 }
265         }
266         if(exit){
267                 wxMaracasSurfaceRenderingManagerData* data = prop3Dvect[n];                     
268                 int j;
269                 for(j = i; j < (int)(prop3Dvect.size())-1;j++){
270                         prop3Dvect[j] = prop3Dvect[j+1];
271                 }               
272                 delete data;
273                 prop3Dvect.pop_back();
274         }else{
275
276                 throw "id not found in the data";
277         }   
278 }
279
280 void wxMaracasSurfaceRenderingManager::enableBoundingBox(int propid, bool enable){
281     checkInvariant();
282
283     wxMaracasSurfaceRenderingManagerData* data = this->getViewData(propid);
284
285     data->enableBoxWidget(enable);
286 }
287 void wxMaracasSurfaceRenderingManager::Transform(vtkMatrix4x4* tmatrix){
288         
289 }
290
291 bool wxMaracasSurfaceRenderingManager::interactorSet(){
292         return _interactor? true:false;
293 }
294
295 void wxMaracasSurfaceRenderingManager::saveProp3DSTL(int propid,const char* filename){
296     checkInvariant();
297
298     wxMaracasSurfaceRenderingManagerData* data = this->getViewData(propid);
299     if(data->getProp3D()!=NULL){
300             data->saveProp3DSTL(filename);
301     }
302 }