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