1 #include "volumerenderermanager.h"
3 /*=========================================================================
6 Module: $RCSfile: volumerenderermanager.cxx,v $
8 Date: $Date: 2011/05/31 19:03:03 $
9 Version: $Revision: 1.1 $
11 Copyright: (c) 2002, 2003
14 This software is distributed WITHOUT ANY WARRANTY; without even
15 the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
16 PURPOSE. See the above copyright notice for more information.
18 =========================================================================*/
20 #include <vtkMetaImageReader.h>
21 #include <vtkImageCast.h>
23 ** Start of the manager class
25 VolumeRendererManager::VolumeRendererManager(){
29 VolumeRendererManager::~VolumeRendererManager(){
33 ** Sets the renderer to manage the prop3D from the view
35 void VolumeRendererManager::setRenderer(vtkRenderer* renderer){
40 ** Gets the renderer which manage the prop3D from the view
42 vtkRenderer* VolumeRendererManager::getRenderer(){
49 void VolumeRendererManager::Update(int ppid){
50 VolumeRendererManagerData* data = this->getViewData(ppid);
56 ** Adds a prop3D to the manager and returns the identifier
58 int VolumeRendererManager::addVolume(int idTP, vtkImageData* vol, std::string dataname) throw(char*){
62 VolumeRendererManagerData* data = new VolumeRendererManagerData(vol, dataname);
63 prop3Dvect.push_back(data);
64 _renderer->AddActor(data->getProp3D());
67 data->setId(_idCount);
74 printf("VolumeRendererManager::addVolume->idVolumeRenderer: %i\n", data->getId());
77 throw "Check mhd imagefile file or input";
82 ** adds or removes an actor depending of the bool value
85 void VolumeRendererManager::addRemoveActor(int propid, bool addremove) throw(char*){
88 VolumeRendererManagerData* data = this->getViewData(propid);
89 if(data->getProp3D()!=NULL){
91 _renderer->AddViewProp(data->getProp3D());
93 _renderer->RemoveViewProp(data->getProp3D());
100 ** Changes the opacity in a prop3D
102 void VolumeRendererManager::setVolumeOpacity(int propid, std::vector<double> greylevel,std::vector<double> value) throw(char*){
105 this->getViewData(propid)->setVolumeOpacity(greylevel, value);
114 void VolumeRendererManager::setVolumeColor(int volid, std::vector<double> greylevel,
115 std::vector<double> red,
116 std::vector<double> green,
117 std::vector<double> blue)throw(char*){
120 this->getViewData(volid)->setVolumeColor(greylevel, red, green, blue);
125 vtkImageData* VolumeRendererManager::getImageData(std::string filename){
126 if(filename.compare("")!= 0){
128 vtkMetaImageReader* reader = vtkMetaImageReader::New();
129 reader->SetFileName(filename.c_str());
131 vtkImageData* img = reader->GetOutput();
133 vtkImageCast* cast = vtkImageCast::New();
135 cast->SetOutputScalarTypeToUnsignedShort();
139 return cast->GetOutput();
145 vtkImageData* VolumeRendererManager::getImageData(){
149 void VolumeRendererManager::checkInvariant() throw(char*){
150 if(this->_renderer==NULL){
151 throw "Renderer not set";
155 VolumeRendererManagerData* VolumeRendererManager::getViewData(int id) throw(char*){
157 for(i = 0; i < (int)(prop3Dvect.size());i++){
158 if(prop3Dvect[i]->getId() == id){
159 return prop3Dvect[i];
162 throw "id not found in the data";
167 void VolumeRendererManager::deleteActor(int propid) throw (char *){
170 this->addRemoveActor(propid, false);
174 for(i = 0; i < (int)(prop3Dvect.size())&&!exit;i++){
175 if(prop3Dvect[i]->getId() == propid){
181 VolumeRendererManagerData* data = prop3Dvect[n];
183 for(j = i; j < (int)(prop3Dvect.size())-1;j++){
184 prop3Dvect[j] = prop3Dvect[j+1];
187 prop3Dvect.pop_back();
189 throw "id not found in the data";
194 vtkPiecewiseFunction* VolumeRendererManager::GetTransferFunction(int volumeid){
195 return getViewData(volumeid)->GetTransferFunction();
197 vtkColorTransferFunction* VolumeRendererManager::GetColorFunction(int volumeid){
199 return getViewData(volumeid)->GetColorFunction();
202 void VolumeRendererManager::changeCompositeMIPFunction(int id, int function) throw (char *){
203 getViewData(id)->changeCompositeMIPFunction(function);