]> Creatis software - creaMaracasVisu.git/blob - lib/maracasVisuLib/src/interface/wxWindows/widgets/wxMaracasSurfaceRenderingManager.cxx
*** empty log message ***
[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/10/30 20:06:07 $
7   Version:   $Revision: 1.2 $
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         _idCount=0;
26 }
27 wxMaracasSurfaceRenderingManager::~wxMaracasSurfaceRenderingManager(){
28 }
29
30 /**
31 **      Sets the renderer to manage the prop3D from the surface render
32 **/
33 void wxMaracasSurfaceRenderingManager::setRenderer(vtkRenderer*  renderer){
34         _renderer = renderer;
35 }
36 /**
37 **      Adds a prop3D to the manager and returns the identifier
38 **/
39 int wxMaracasSurfaceRenderingManager::addProp3D(vtkProp3D* prop3D, std::string dataname)  throw(char*){
40         checkInvariant();
41         if(prop3D != NULL){
42                 wxMaracasSurfaceRenderingManagerData* data = new wxMaracasSurfaceRenderingManagerData(prop3D, dataname);
43                 prop3Dvect.push_back(data);
44                 _renderer->AddActor(data->getProp3D());
45                 data->setId(_idCount);
46                 _idCount++;
47                 return data->getId();
48         }else{
49                 throw "Check vtkProp3D file or input";
50         }
51         return -1;
52 }
53 int wxMaracasSurfaceRenderingManager::addPropMHD(vtkImageData* imagedata, std::string dataname) throw(char*){
54
55         checkInvariant();
56         if(imagedata != NULL){
57                 wxMaracasSurfaceRenderingManagerData* data = new wxMaracasSurfaceRenderingManagerDataMhd(imagedata, dataname);
58                 prop3Dvect.push_back(data);     
59                 _renderer->AddActor(data->getProp3D());
60                 data->setId(_idCount);
61                 _idCount++;
62                 return data->getId();
63         }else{
64                 throw "Check ImageData file or input";
65         }
66         return -1;
67
68 }
69 /**
70 **      adds or removes an actor depending of the bool value
71 **/
72 void wxMaracasSurfaceRenderingManager::addRemoveActor(int propid, bool addremove)  throw(char*){
73         checkInvariant();
74         
75         wxMaracasSurfaceRenderingManagerData* data = this->getViewData(propid);         
76         if(data->getProp3D()!=NULL){
77                 if(addremove){
78                         _renderer->AddViewProp(data->getProp3D());
79                 }else{
80                         _renderer->RemoveViewProp(data->getProp3D());
81                 }
82                 _renderer->Render();
83         }
84         
85 }
86 /**
87 **      Changes the opacity in a prop3D
88 **/
89 void wxMaracasSurfaceRenderingManager::changeOpacity(int propid, int value)  throw(char*){
90         checkInvariant();       
91
92
93         this->getViewData(propid)->changeOpacity(value);
94         
95         _renderer->Render();
96
97 }
98
99 /**
100 **      changes the isovalue in a prop3D
101 **/
102 void wxMaracasSurfaceRenderingManager::changeIsoValue(int propid, double value )throw(char*){
103         checkInvariant();       
104
105         wxMaracasSurfaceRenderingManagerData* data = this->getViewData(propid);         
106
107         //_renderer->RemoveActor(data->getProp3D());
108         ((wxMaracasSurfaceRenderingManagerDataMhd*)data)->changeIsoValue(value);
109         //_renderer->AddActor(data->getProp3D());
110
111         _renderer->Render();
112 }
113
114 vtkProp3D* wxMaracasSurfaceRenderingManager:: getProp3D(std::string filename){
115         if(filename.compare("")!= 0){
116                 vtkSTLReader *STLReader=vtkSTLReader::New();
117                 STLReader->SetFileName(filename.c_str());
118                 STLReader->Update();
119                 vtkPolyDataMapper* dataMapper = vtkPolyDataMapper::New();
120                 dataMapper->SetInput(STLReader->GetOutput());
121                 
122                 vtkActor* dataActor = vtkActor::New();
123                 dataActor->SetMapper(dataMapper);       
124                 dataActor->GetProperty()->SetOpacity(1);
125                 
126                 return dataActor;
127         }       
128         return NULL;
129 }
130
131 vtkImageData* wxMaracasSurfaceRenderingManager::getImageData(std::string filename){
132         if(filename.compare("")!= 0){   
133                 
134                 
135                 vtkMetaImageReader* reader =  vtkMetaImageReader::New();        
136                 reader->SetFileName(filename.c_str());
137                 reader->Update();
138                 vtkImageData* img = reader->GetOutput();
139                 //reader->Delete();
140                 return img;
141         }       
142         return NULL;
143 }
144
145 void wxMaracasSurfaceRenderingManager::checkInvariant()  throw(char*){
146         if(this->_renderer==NULL){
147                 throw "Renderer not set";
148         }
149 }
150
151 wxMaracasSurfaceRenderingManagerData* wxMaracasSurfaceRenderingManager::getViewData(int id) throw(char*){
152     int i;
153         for(i = 0; i < (int)(prop3Dvect.size());i++){
154                 if(prop3Dvect[i]->getId() == id){
155                         return prop3Dvect[i];
156                 }
157         }
158         throw "id not found in the data";
159
160         return NULL;
161 }
162
163 int wxMaracasSurfaceRenderingManager::getMaxIsoValue(int propid) throw(char*){
164         
165         return ((wxMaracasSurfaceRenderingManagerDataMhd*)this->getViewData(propid))->getMaxGreyLevel();
166
167 }
168
169 void wxMaracasSurfaceRenderingManager::changeColor(int propid, double red, double green, double blue) throw(char*){
170         checkInvariant();       
171         this->getViewData(propid)->changeColor(red, green, blue);
172
173         _renderer->Render();
174 }
175
176 void wxMaracasSurfaceRenderingManager::deleteActor(int propid) throw (char *){
177         checkInvariant();       
178
179         this->addRemoveActor(propid, false);
180
181         int i,n;
182         bool exit = false;
183         for(i = 0; i < (int)(prop3Dvect.size())&&!exit;i++){
184                 if(prop3Dvect[i]->getId() == propid){                   
185                         n=i;
186                         exit = true;
187                 }
188         }
189         if(exit){
190                 wxMaracasSurfaceRenderingManagerData* data = prop3Dvect[n];                     
191                 int j;
192                 for(j = i; j < (int)(prop3Dvect.size())-1;j++){
193                         prop3Dvect[j] = prop3Dvect[j+1];
194                 }               
195                 delete data;
196                 prop3Dvect.pop_back();
197         }else{
198                 throw "id not found in the data";
199         }   
200 }
201