wxMaracasMultipleVolumeRendererManager.cxx

Go to the documentation of this file.
00001 /*=========================================================================
00002 
00003   Program:   wxMaracas
00004   Module:    $RCSfile: wxMaracasMultipleVolumeRendererManager.cxx,v $
00005   Language:  C++
00006   Date:      $Date: 2009/07/20 10:06:12 $
00007   Version:   $Revision: 1.3 $
00008 
00009   Copyright: (c) 2002, 2003
00010   License:
00011 
00012      This software is distributed WITHOUT ANY WARRANTY; without even
00013      the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
00014      PURPOSE.  See the above copyright notice for more information.
00015 
00016 =========================================================================*/
00017 #include "wxMaracasMultipleVolumeRendererManager.h"
00018 
00019 #include <vtkMetaImageReader.h>
00020 #include <vtkImageCast.h>
00024 wxMaracasMultipleVolumeRendererManager::wxMaracasMultipleVolumeRendererManager(){
00025         _renderer = NULL;
00026         _idCount=0;
00027 }
00028 wxMaracasMultipleVolumeRendererManager::~wxMaracasMultipleVolumeRendererManager(){
00029 }
00030 
00034 void wxMaracasMultipleVolumeRendererManager::setRenderer(vtkRenderer*  renderer){
00035         _renderer = renderer;
00036 }
00040 int wxMaracasMultipleVolumeRendererManager::addVolume(vtkImageData* vol, std::string dataname)  throw(char*){
00041         checkInvariant();
00042         if(vol != NULL){
00043                 wxMaracasMultipleVolumeRendererManagerData* data = new wxMaracasMultipleVolumeRendererManagerData(vol, dataname);
00044                 prop3Dvect.push_back(data);             
00045                 _renderer->AddActor(data->getProp3D());
00046                 data->setId(_idCount);
00047                 _idCount++;
00048                 return data->getId();
00049         }else{
00050                 throw "Check mhd imagefile file or input";
00051         }
00052         return -1;
00053 }
00058 void wxMaracasMultipleVolumeRendererManager::addRemoveActor(int propid, bool addremove)  throw(char*){
00059         checkInvariant();
00060         
00061         wxMaracasMultipleVolumeRendererManagerData* data = this->getViewData(propid);           
00062         if(data->getProp3D()!=NULL){
00063                 if(addremove){
00064                         _renderer->AddViewProp(data->getProp3D());
00065                 }else{
00066                         _renderer->RemoveViewProp(data->getProp3D());
00067                 }
00068                 _renderer->Render();
00069         }
00070         
00071 }
00075 void wxMaracasMultipleVolumeRendererManager::setVolumeOpacity(int propid, std::vector<double> greylevel,std::vector<double> value)  throw(char*){
00076         checkInvariant();               
00077 
00078         this->getViewData(propid)->setVolumeOpacity(greylevel, value);
00079         
00080         _renderer->Render();
00081 
00082 }
00083 
00087 void wxMaracasMultipleVolumeRendererManager::setVolumeColor(int volid, std::vector<double> greylevel,
00088                                                                 std::vector<double> red,
00089                                                                 std::vector<double> green,
00090                                                                 std::vector<double> blue)
00091 {
00092         checkInvariant();               
00093 
00094         this->getViewData(volid)->setVolumeColor(greylevel, red, green, blue);
00095         
00096         _renderer->Render();
00097 }
00098 
00099 vtkImageData* wxMaracasMultipleVolumeRendererManager::getImageData(std::string filename){
00100         if(filename.compare("")!= 0){   
00101                 
00102                 vtkMetaImageReader* reader =  vtkMetaImageReader::New();        
00103                 reader->SetFileName(filename.c_str());
00104                 reader->Update();
00105                 vtkImageData* img = reader->GetOutput();        
00106 
00107                 vtkImageCast* cast = vtkImageCast::New(); 
00108                 cast->SetInput(img);
00109                 cast->SetOutputScalarTypeToUnsignedShort();
00110                 cast->Update();                 
00111                 //reader->Delete();
00112                 //img->Delete();
00113                 return cast->GetOutput();
00114                 //return img;
00115         }       
00116         return NULL;
00117 }
00118 
00119 void wxMaracasMultipleVolumeRendererManager::checkInvariant()  throw(char*){
00120         if(this->_renderer==NULL){
00121                 throw "Renderer not set";
00122         }
00123 }
00124 
00125 wxMaracasMultipleVolumeRendererManagerData* wxMaracasMultipleVolumeRendererManager::getViewData(int id) throw(char*){
00126     int i;
00127         for(i = 0; i < (int)(prop3Dvect.size());i++){
00128                 if(prop3Dvect[i]->getId() == id){
00129                         return prop3Dvect[i];
00130                 }
00131         }
00132         throw "id not found in the data";
00133 
00134         return NULL;
00135 }
00136 
00137 void wxMaracasMultipleVolumeRendererManager::deleteActor(int propid) throw (char *){
00138         checkInvariant();       
00139 
00140         this->addRemoveActor(propid, false);
00141 
00142         int i,n;
00143         bool exit = false;
00144         for(i = 0; i < (int)(prop3Dvect.size())&&!exit;i++){
00145                 if(prop3Dvect[i]->getId() == propid){                   
00146                         n=i;
00147                         exit = true;
00148                 }
00149         }
00150         if(exit){
00151                 wxMaracasMultipleVolumeRendererManagerData* data = prop3Dvect[n];                       
00152                 int j;
00153                 for(j = i; j < (int)(prop3Dvect.size())-1;j++){
00154                         prop3Dvect[j] = prop3Dvect[j+1];
00155                 }               
00156                 delete data;
00157                 prop3Dvect.pop_back();
00158         }else{
00159                 throw "id not found in the data";
00160         }       
00161     
00162 }
00163 
00164 vtkPiecewiseFunction* wxMaracasMultipleVolumeRendererManager::GetTransferFunction(int volumeid){
00165         return getViewData(volumeid)->GetTransferFunction();
00166 }
00167 vtkColorTransferFunction* wxMaracasMultipleVolumeRendererManager::GetColorFunction(int volumeid){
00168 
00169         return getViewData(volumeid)->GetColorFunction();
00170 }

Generated on Wed Jul 29 16:35:30 2009 for creaMaracasVisu_lib by  doxygen 1.5.3