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/11/20 17:09:05 $
00007   Version:   $Revision: 1.9 $
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 }
00037 
00041 vtkRenderer* wxMaracasMultipleVolumeRendererManager::getRenderer(){
00042         return _renderer;
00043 }
00044 
00048 void wxMaracasMultipleVolumeRendererManager::Update(int ppid){
00049         wxMaracasMultipleVolumeRendererManagerData* data = this->getViewData(ppid);
00050         data->Update();
00051         _renderer->Render();
00052 }
00053 
00057 int wxMaracasMultipleVolumeRendererManager::addVolume(int idTP, vtkImageData* vol, std::string dataname) throw(char*){
00058         checkInvariant();
00059         image = vol;
00060         if(vol != NULL){
00061                 wxMaracasMultipleVolumeRendererManagerData* data = new wxMaracasMultipleVolumeRendererManagerData(vol, dataname);
00062                 prop3Dvect.push_back(data);
00063                 _renderer->AddActor(data->getProp3D());
00064                 if(idTP == -1)
00065                 {
00066                         data->setId(_idCount);
00067                         _idCount++;
00068                 }
00069                 else
00070                 {
00071                         data->setId(idTP);
00072                 }
00073                 printf("wxMaracasMultipleVolumeRendererManager::addVolume->idVolumeRenderer: %i\n", data->getId());
00074                 return data->getId();
00075         }else{
00076                 throw "Check mhd imagefile file or input";
00077         }
00078         return -1;
00079 }
00084 void wxMaracasMultipleVolumeRendererManager::addRemoveActor(int propid, bool addremove)  throw(char*){
00085         checkInvariant();
00086         
00087         wxMaracasMultipleVolumeRendererManagerData* data = this->getViewData(propid);           
00088         if(data->getProp3D()!=NULL){
00089                 if(addremove){
00090                         _renderer->AddViewProp(data->getProp3D());
00091                 }else{
00092                         _renderer->RemoveViewProp(data->getProp3D());
00093                 }
00094                 _renderer->Render();
00095         }
00096         
00097 }
00101 void wxMaracasMultipleVolumeRendererManager::setVolumeOpacity(int propid, std::vector<double> greylevel,std::vector<double> value)  throw(char*){
00102         checkInvariant();               
00103 
00104         this->getViewData(propid)->setVolumeOpacity(greylevel, value);
00105         
00106         _renderer->Render();
00107 
00108 }
00109 
00113 void wxMaracasMultipleVolumeRendererManager::setVolumeColor(int volid, std::vector<double> greylevel,
00114                                                                 std::vector<double> red,
00115                                                                 std::vector<double> green,
00116                                                                 std::vector<double> blue)throw(char*){
00117         checkInvariant();               
00118 
00119         this->getViewData(volid)->setVolumeColor(greylevel, red, green, blue);
00120         
00121         _renderer->Render();
00122 }
00123 
00124 vtkImageData* wxMaracasMultipleVolumeRendererManager::getImageData(std::string filename){
00125         if(filename.compare("")!= 0){   
00126                 
00127                 vtkMetaImageReader* reader =  vtkMetaImageReader::New();        
00128                 reader->SetFileName(filename.c_str());
00129                 reader->Update();
00130                 vtkImageData* img = reader->GetOutput();        
00131 
00132                 vtkImageCast* cast = vtkImageCast::New(); 
00133                 cast->SetInput(img);
00134                 cast->SetOutputScalarTypeToUnsignedShort();
00135                 cast->Update();                 
00136                 //reader->Delete();
00137                 //img->Delete();
00138                 return cast->GetOutput();
00139                 //return img;
00140         }       
00141         return NULL;
00142 }
00143 
00144 vtkImageData* wxMaracasMultipleVolumeRendererManager::getImageData(){   
00145         return image;
00146 }
00147 
00148 void wxMaracasMultipleVolumeRendererManager::checkInvariant()  throw(char*){
00149         if(this->_renderer==NULL){
00150                 throw "Renderer not set";
00151         }
00152 }
00153 
00154 wxMaracasMultipleVolumeRendererManagerData* wxMaracasMultipleVolumeRendererManager::getViewData(int id) throw(char*){
00155     int i;
00156         for(i = 0; i < (int)(prop3Dvect.size());i++){
00157                 if(prop3Dvect[i]->getId() == id){
00158                         return prop3Dvect[i];
00159                 }
00160         }
00161         throw "id not found in the data";
00162 
00163         return NULL;
00164 }
00165 
00166 void wxMaracasMultipleVolumeRendererManager::deleteActor(int propid) throw (char *){
00167         checkInvariant();       
00168 
00169         this->addRemoveActor(propid, false);
00170 
00171         int i,n;
00172         bool exit = false;
00173         for(i = 0; i < (int)(prop3Dvect.size())&&!exit;i++){
00174                 if(prop3Dvect[i]->getId() == propid){                   
00175                         n=i;
00176                         exit = true;
00177                 }
00178         }
00179         if(exit){
00180                 wxMaracasMultipleVolumeRendererManagerData* data = prop3Dvect[n];                       
00181                 int j;
00182                 for(j = i; j < (int)(prop3Dvect.size())-1;j++){
00183                         prop3Dvect[j] = prop3Dvect[j+1];
00184                 }               
00185                 delete data;
00186                 prop3Dvect.pop_back();
00187         }else{
00188                 throw "id not found in the data";
00189         }       
00190     
00191 }
00192 
00193 vtkPiecewiseFunction* wxMaracasMultipleVolumeRendererManager::GetTransferFunction(int volumeid){
00194         return getViewData(volumeid)->GetTransferFunction();
00195 }
00196 vtkColorTransferFunction* wxMaracasMultipleVolumeRendererManager::GetColorFunction(int volumeid){
00197 
00198         return getViewData(volumeid)->GetColorFunction();
00199 }
00200 
00201 void wxMaracasMultipleVolumeRendererManager::changeCompositeMIPFunction(int id, int function) throw (char *){
00202         getViewData(id)->changeCompositeMIPFunction(function);
00203 }

Generated on 18 Mar 2010 for creaMaracasVisu_lib by  doxygen 1.6.1