]> Creatis software - creaMaracasVisu.git/blob - lib/maracasVisuLib/src/interface/wxWindows/widgets/wxMaracasMultipleVolumeRendererManager.cxx
980ac8dbf7c3bd5d4dc6e88ae0699f3aeb132302
[creaMaracasVisu.git] / lib / maracasVisuLib / src / interface / wxWindows / widgets / wxMaracasMultipleVolumeRendererManager.cxx
1 /*=========================================================================
2
3   Program:   wxMaracas
4   Module:    $RCSfile: wxMaracasMultipleVolumeRendererManager.cxx,v $
5   Language:  C++
6   Date:      $Date: 2009/07/10 13:18:24 $
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 "wxMaracasMultipleVolumeRendererManager.h"
18
19 #include <vtkMetaImageReader.h>
20 #include <vtkImageCast.h>
21 /**
22 **      Start of the manager class
23 **/
24 wxMaracasMultipleVolumeRendererManager::wxMaracasMultipleVolumeRendererManager(){
25         _renderer = NULL;
26         _idCount=0;
27 }
28 wxMaracasMultipleVolumeRendererManager::~wxMaracasMultipleVolumeRendererManager(){
29 }
30
31 /**
32 **      Sets the renderer to manage the prop3D from the view
33 **/
34 void wxMaracasMultipleVolumeRendererManager::setRenderer(vtkRenderer*  renderer){
35         _renderer = renderer;
36 }
37 /**
38 **      Adds a prop3D to the manager and returns the identifier
39 **/
40 int wxMaracasMultipleVolumeRendererManager::addVolume(vtkImageData* vol, std::string dataname)  throw(char*){
41         checkInvariant();
42         if(vol != NULL){
43                 wxMaracasMultipleVolumeRendererManagerData* data = new wxMaracasMultipleVolumeRendererManagerData(vol, dataname);
44                 prop3Dvect.push_back(data);             
45                 _renderer->AddActor(data->getProp3D());
46                 data->setId(_idCount);
47                 _idCount++;
48                 return data->getId();
49         }else{
50                 throw "Check mhd imagefile file or input";
51         }
52         return -1;
53 }
54 /**
55 **      adds or removes an actor depending of the bool value
56 **/
57
58 void wxMaracasMultipleVolumeRendererManager::addRemoveActor(int propid, bool addremove)  throw(char*){
59         checkInvariant();
60         
61         wxMaracasMultipleVolumeRendererManagerData* data = this->getViewData(propid);           
62         if(data->getProp3D()!=NULL){
63                 if(addremove){
64                         _renderer->AddViewProp(data->getProp3D());
65                 }else{
66                         _renderer->RemoveViewProp(data->getProp3D());
67                 }
68                 _renderer->Render();
69         }
70         
71 }
72 /**
73 **      Changes the opacity in a prop3D
74 **/
75 void wxMaracasMultipleVolumeRendererManager::setVolumeOpacity(int propid, std::vector<double> greylevel,std::vector<double> value)  throw(char*){
76         checkInvariant();               
77
78         this->getViewData(propid)->setVolumeOpacity(greylevel, value);
79         
80         _renderer->Render();
81
82 }
83
84 /**
85 **      Set Volume Color
86 **/
87 void wxMaracasMultipleVolumeRendererManager::setVolumeColor(int volid, std::vector<double> greylevel,
88                                                                 std::vector<double> red,
89                                                                 std::vector<double> green,
90                                                                 std::vector<double> blue)
91 {
92         checkInvariant();               
93
94         this->getViewData(volid)->setVolumeColor(greylevel, red, green, blue);
95         
96         _renderer->Render();
97 }
98
99 vtkImageData* wxMaracasMultipleVolumeRendererManager::getImageData(std::string filename){
100         if(filename.compare("")!= 0){   
101                 
102                 vtkMetaImageReader* reader =  vtkMetaImageReader::New();        
103                 reader->SetFileName(filename.c_str());
104                 reader->Update();
105                 vtkImageData* img = reader->GetOutput();                
106                 vtkImageCast* cast = vtkImageCast::New(); 
107                 cast->SetInput(img);
108                 cast->SetOutputScalarTypeToUnsignedShort();
109                 cast->Update();                 
110                 //reader->Delete();
111                 //img->Delete();
112                 return cast->GetOutput();
113         }       
114         return NULL;
115 }
116
117 void wxMaracasMultipleVolumeRendererManager::checkInvariant()  throw(char*){
118         if(this->_renderer==NULL){
119                 throw "Renderer not set";
120         }
121 }
122
123 wxMaracasMultipleVolumeRendererManagerData* wxMaracasMultipleVolumeRendererManager::getViewData(int id) throw(char*){
124     int i;
125         for(i = 0; i < (int)(prop3Dvect.size());i++){
126                 if(prop3Dvect[i]->getId() == id){
127                         return prop3Dvect[i];
128                 }
129         }
130         throw "id not found in the data";
131
132         return NULL;
133 }
134
135 void wxMaracasMultipleVolumeRendererManager::deleteActor(int propid) throw (char *){
136         checkInvariant();       
137
138         this->addRemoveActor(propid, false);
139
140         int i,n;
141         bool exit = false;
142         for(i = 0; i < (int)(prop3Dvect.size())&&!exit;i++){
143                 if(prop3Dvect[i]->getId() == propid){                   
144                         n=i;
145                         exit = true;
146                 }
147         }
148         if(exit){
149                 wxMaracasMultipleVolumeRendererManagerData* data = prop3Dvect[n];                       
150                 int j;
151                 for(j = i; j < (int)(prop3Dvect.size())-1;j++){
152                         prop3Dvect[j] = prop3Dvect[j+1];
153                 }               
154                 delete data;
155                 prop3Dvect.pop_back();
156         }else{
157                 throw "id not found in the data";
158         }       
159     
160 }