1 /*=========================================================================
4 Module: $RCSfile: wxMaracasMultipleVolumeRendererManager.cxx,v $
6 Date: $Date: 2009/11/09 19:14:56 $
7 Version: $Revision: 1.6 $
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){
39 ** Gets the renderer which manage the prop3D from the view
41 vtkRenderer* wxMaracasMultipleVolumeRendererManager::getRenderer(){
48 void wxMaracasMultipleVolumeRendererManager::Update(int ppid){
49 wxMaracasMultipleVolumeRendererManagerData* data = this->getViewData(ppid);
55 ** Adds a prop3D to the manager and returns the identifier
57 int wxMaracasMultipleVolumeRendererManager::addVolume(vtkImageData* vol, std::string dataname) throw(char*){
61 wxMaracasMultipleVolumeRendererManagerData* data = new wxMaracasMultipleVolumeRendererManagerData(vol, dataname);
62 prop3Dvect.push_back(data);
63 _renderer->AddActor(data->getProp3D());
64 data->setId(_idCount);
68 throw "Check mhd imagefile file or input";
73 ** adds or removes an actor depending of the bool value
76 void wxMaracasMultipleVolumeRendererManager::addRemoveActor(int propid, bool addremove) throw(char*){
79 wxMaracasMultipleVolumeRendererManagerData* data = this->getViewData(propid);
80 if(data->getProp3D()!=NULL){
82 _renderer->AddViewProp(data->getProp3D());
84 _renderer->RemoveViewProp(data->getProp3D());
91 ** Changes the opacity in a prop3D
93 void wxMaracasMultipleVolumeRendererManager::setVolumeOpacity(int propid, std::vector<double> greylevel,std::vector<double> value) throw(char*){
96 this->getViewData(propid)->setVolumeOpacity(greylevel, value);
105 void wxMaracasMultipleVolumeRendererManager::setVolumeColor(int volid, std::vector<double> greylevel,
106 std::vector<double> red,
107 std::vector<double> green,
108 std::vector<double> blue)throw(char*){
111 this->getViewData(volid)->setVolumeColor(greylevel, red, green, blue);
116 vtkImageData* wxMaracasMultipleVolumeRendererManager::getImageData(std::string filename){
117 if(filename.compare("")!= 0){
119 vtkMetaImageReader* reader = vtkMetaImageReader::New();
120 reader->SetFileName(filename.c_str());
122 vtkImageData* img = reader->GetOutput();
124 vtkImageCast* cast = vtkImageCast::New();
126 cast->SetOutputScalarTypeToUnsignedShort();
130 return cast->GetOutput();
136 vtkImageData* wxMaracasMultipleVolumeRendererManager::getImageData(){
140 void wxMaracasMultipleVolumeRendererManager::checkInvariant() throw(char*){
141 if(this->_renderer==NULL){
142 throw "Renderer not set";
146 wxMaracasMultipleVolumeRendererManagerData* wxMaracasMultipleVolumeRendererManager::getViewData(int id) throw(char*){
148 for(i = 0; i < (int)(prop3Dvect.size());i++){
149 if(prop3Dvect[i]->getId() == id){
150 return prop3Dvect[i];
153 throw "id not found in the data";
158 void wxMaracasMultipleVolumeRendererManager::deleteActor(int propid) throw (char *){
161 this->addRemoveActor(propid, false);
165 for(i = 0; i < (int)(prop3Dvect.size())&&!exit;i++){
166 if(prop3Dvect[i]->getId() == propid){
172 wxMaracasMultipleVolumeRendererManagerData* data = prop3Dvect[n];
174 for(j = i; j < (int)(prop3Dvect.size())-1;j++){
175 prop3Dvect[j] = prop3Dvect[j+1];
178 prop3Dvect.pop_back();
180 throw "id not found in the data";
185 vtkPiecewiseFunction* wxMaracasMultipleVolumeRendererManager::GetTransferFunction(int volumeid){
186 return getViewData(volumeid)->GetTransferFunction();
188 vtkColorTransferFunction* wxMaracasMultipleVolumeRendererManager::GetColorFunction(int volumeid){
190 return getViewData(volumeid)->GetColorFunction();