1 /*=========================================================================
4 Module: $RCSfile: wxMaracasMultipleVolumeRendererManager.cxx,v $
6 Date: $Date: 2009/07/20 10:06:12 $
7 Version: $Revision: 1.3 $
9 Copyright: (c) 2002, 2003
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.
16 =========================================================================*/
17 #include "wxMaracasMultipleVolumeRendererManager.h"
19 #include <vtkMetaImageReader.h>
20 #include <vtkImageCast.h>
22 ** Start of the manager class
24 wxMaracasMultipleVolumeRendererManager::wxMaracasMultipleVolumeRendererManager(){
28 wxMaracasMultipleVolumeRendererManager::~wxMaracasMultipleVolumeRendererManager(){
32 ** Sets the renderer to manage the prop3D from the view
34 void wxMaracasMultipleVolumeRendererManager::setRenderer(vtkRenderer* renderer){
38 ** Adds a prop3D to the manager and returns the identifier
40 int wxMaracasMultipleVolumeRendererManager::addVolume(vtkImageData* vol, std::string dataname) throw(char*){
43 wxMaracasMultipleVolumeRendererManagerData* data = new wxMaracasMultipleVolumeRendererManagerData(vol, dataname);
44 prop3Dvect.push_back(data);
45 _renderer->AddActor(data->getProp3D());
46 data->setId(_idCount);
50 throw "Check mhd imagefile file or input";
55 ** adds or removes an actor depending of the bool value
58 void wxMaracasMultipleVolumeRendererManager::addRemoveActor(int propid, bool addremove) throw(char*){
61 wxMaracasMultipleVolumeRendererManagerData* data = this->getViewData(propid);
62 if(data->getProp3D()!=NULL){
64 _renderer->AddViewProp(data->getProp3D());
66 _renderer->RemoveViewProp(data->getProp3D());
73 ** Changes the opacity in a prop3D
75 void wxMaracasMultipleVolumeRendererManager::setVolumeOpacity(int propid, std::vector<double> greylevel,std::vector<double> value) throw(char*){
78 this->getViewData(propid)->setVolumeOpacity(greylevel, value);
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)
94 this->getViewData(volid)->setVolumeColor(greylevel, red, green, blue);
99 vtkImageData* wxMaracasMultipleVolumeRendererManager::getImageData(std::string filename){
100 if(filename.compare("")!= 0){
102 vtkMetaImageReader* reader = vtkMetaImageReader::New();
103 reader->SetFileName(filename.c_str());
105 vtkImageData* img = reader->GetOutput();
107 vtkImageCast* cast = vtkImageCast::New();
109 cast->SetOutputScalarTypeToUnsignedShort();
113 return cast->GetOutput();
119 void wxMaracasMultipleVolumeRendererManager::checkInvariant() throw(char*){
120 if(this->_renderer==NULL){
121 throw "Renderer not set";
125 wxMaracasMultipleVolumeRendererManagerData* wxMaracasMultipleVolumeRendererManager::getViewData(int id) throw(char*){
127 for(i = 0; i < (int)(prop3Dvect.size());i++){
128 if(prop3Dvect[i]->getId() == id){
129 return prop3Dvect[i];
132 throw "id not found in the data";
137 void wxMaracasMultipleVolumeRendererManager::deleteActor(int propid) throw (char *){
140 this->addRemoveActor(propid, false);
144 for(i = 0; i < (int)(prop3Dvect.size())&&!exit;i++){
145 if(prop3Dvect[i]->getId() == propid){
151 wxMaracasMultipleVolumeRendererManagerData* data = prop3Dvect[n];
153 for(j = i; j < (int)(prop3Dvect.size())-1;j++){
154 prop3Dvect[j] = prop3Dvect[j+1];
157 prop3Dvect.pop_back();
159 throw "id not found in the data";
164 vtkPiecewiseFunction* wxMaracasMultipleVolumeRendererManager::GetTransferFunction(int volumeid){
165 return getViewData(volumeid)->GetTransferFunction();
167 vtkColorTransferFunction* wxMaracasMultipleVolumeRendererManager::GetColorFunction(int volumeid){
169 return getViewData(volumeid)->GetColorFunction();