]> Creatis software - creaMaracasVisu.git/blob - lib/maracasVisuLib/src/interface/wxWindows/widgets/wxMaracasSurfaceRenderingManager.cxx
surface box y widget carole
[creaMaracasVisu.git] / lib / maracasVisuLib / src / interface / wxWindows / widgets / wxMaracasSurfaceRenderingManager.cxx
1 /*=========================================================================
2
3   Program:   wxMaracas
4   Module:    $RCSfile: wxMaracasSurfaceRenderingManager.cxx,v $
5   Language:  C++
6   Date:      $Date: 2009/11/13 11:47:41 $
7   Version:   $Revision: 1.5 $
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(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                 data->setId(_idCount);
72                 _idCount++;
73                 return data->getId();
74         }else{
75                 throw "Check vtkProp3D file or input";
76         }
77         return -1;
78 }
79 int wxMaracasSurfaceRenderingManager::addPropMHD(vtkImageData* imagedata, std::string dataname) throw(char*){
80         checkInvariant();
81         if(imagedata != NULL){
82                 image = imagedata;
83                 wxMaracasSurfaceRenderingManagerData* data = new wxMaracasSurfaceRenderingManagerDataMhd(imagedata, dataname, _interactor);
84                 prop3Dvect.push_back(data);     
85                 _renderer->AddActor(data->getProp3D());
86                 data->setId(_idCount);
87                 _idCount++;
88                 return data->getId();
89         }else{
90                 throw "Check ImageData file or input";
91         }
92         return -1;
93
94 }
95 /**
96 **      adds or removes an actor depending of the bool value
97 **/
98 void wxMaracasSurfaceRenderingManager::addRemoveActor(int propid, bool addremove)  throw(char*){
99         checkInvariant();
100         
101         wxMaracasSurfaceRenderingManagerData* data = this->getViewData(propid);         
102         if(data->getProp3D()!=NULL){
103                 if(addremove){
104                         _renderer->AddViewProp(data->getProp3D());
105                 }else{
106                         _renderer->RemoveViewProp(data->getProp3D());
107                 }
108                 _renderer->Render();
109         }
110 }
111 /**
112 **      adds or removes the surface box depending of the bool value
113 **/
114 void wxMaracasSurfaceRenderingManager::addRemoveSurfaceBox(int propid, bool addremove)  throw(char*){
115         checkInvariant();
116         
117         wxMaracasSurfaceRenderingManagerData* data = this->getViewData(propid);         
118         if(data->getProp3D()!=NULL){
119                 data->addRemoveSurfaceBox(addremove);
120                 /*if(addremove){
121                         data->
122                         _renderer->AddViewProp(data->getProp3D());
123                 }else{
124                         _renderer->RemoveViewProp(data->getProp3D());
125                 }
126                 _renderer->Render();*/
127         }
128         
129 }
130
131 /**
132 **      Changes the opacity in a prop3D
133 **/
134 void wxMaracasSurfaceRenderingManager::changeOpacity(int propid, int value)  throw(char*){
135         checkInvariant();       
136
137
138         this->getViewData(propid)->changeOpacity(value);
139         
140         _renderer->Render();
141
142 }
143
144 /**
145 **      changes the isovalue in a prop3D
146 **/
147 void wxMaracasSurfaceRenderingManager::changeIsoValue(int propid, double value )throw(char*){
148         checkInvariant();       
149
150         wxMaracasSurfaceRenderingManagerData* data = this->getViewData(propid);         
151
152         //_renderer->RemoveActor(data->getProp3D());
153         ((wxMaracasSurfaceRenderingManagerDataMhd*)data)->changeIsoValue(value);
154         //_renderer->AddActor(data->getProp3D());
155
156         _renderer->Render();
157 }
158
159 vtkProp3D* wxMaracasSurfaceRenderingManager:: getProp3D(std::string filename){
160         if(filename.compare("")!= 0){
161                 vtkSTLReader *STLReader=vtkSTLReader::New();
162                 STLReader->SetFileName(filename.c_str());
163                 STLReader->Update();
164                 vtkPolyDataMapper* dataMapper = vtkPolyDataMapper::New();
165                 dataMapper->SetInput(STLReader->GetOutput());
166                 
167                 vtkActor* dataActor = vtkActor::New();
168                 dataActor->SetMapper(dataMapper);       
169                 dataActor->GetProperty()->SetOpacity(1);
170                 
171                 return dataActor;
172         }       
173         return NULL;
174 }
175
176 vtkImageData* wxMaracasSurfaceRenderingManager::getImageData(std::string filename){
177         if(filename.compare("")!= 0){   
178                 
179                 vtkMetaImageReader* reader =  vtkMetaImageReader::New();        
180                 reader->SetFileName(filename.c_str());
181                 reader->Update();
182                 vtkImageData* img = reader->GetOutput();
183                 //reader->Delete();
184                 return img;
185         }       
186         return NULL;
187 }
188
189 vtkImageData* wxMaracasSurfaceRenderingManager::getImageData(){
190         return image;
191 }
192
193 void wxMaracasSurfaceRenderingManager::checkInvariant()  throw(char*){
194         if(this->_renderer==NULL){
195                 throw "Renderer not set";
196         }
197 }
198
199 wxMaracasSurfaceRenderingManagerData* wxMaracasSurfaceRenderingManager::getViewData(int id) throw(char*){
200     int i;
201         for(i = 0; i < (int)(prop3Dvect.size());i++){
202                 if(prop3Dvect[i]->getId() == id){
203                         return prop3Dvect[i];
204                 }
205         }
206         throw "id not found in the data";
207
208         return NULL;
209 }
210
211 int wxMaracasSurfaceRenderingManager::getMaxIsoValue(int propid) throw(char*){
212         
213         return ((wxMaracasSurfaceRenderingManagerDataMhd*)this->getViewData(propid))->getMaxGreyLevel();
214
215 }
216
217 void wxMaracasSurfaceRenderingManager::changeColor(int propid, double red, double green, double blue) throw(char*){
218         checkInvariant();       
219         this->getViewData(propid)->changeColor(red, green, blue);
220
221         _renderer->Render();
222 }
223
224 void wxMaracasSurfaceRenderingManager::deleteActor(int propid) throw (char *){
225         checkInvariant();       
226
227         this->addRemoveActor(propid, false);
228
229         int i,n;
230         bool exit = false;
231         for(i = 0; i < (int)(prop3Dvect.size())&&!exit;i++){
232                 if(prop3Dvect[i]->getId() == propid){                   
233                         n=i;
234                         exit = true;
235                 }
236         }
237         if(exit){
238                 wxMaracasSurfaceRenderingManagerData* data = prop3Dvect[n];                     
239                 int j;
240                 for(j = i; j < (int)(prop3Dvect.size())-1;j++){
241                         prop3Dvect[j] = prop3Dvect[j+1];
242                 }               
243                 delete data;
244                 prop3Dvect.pop_back();
245         }else{
246
247                 throw "id not found in the data";
248         }   
249 }
250
251 void wxMaracasSurfaceRenderingManager::Transform(vtkMatrix4x4* tmatrix){
252         
253 }
254