wxMaracasIRMViewManager.cxx

Go to the documentation of this file.
00001 /*=========================================================================
00002 
00003   Program:   wxMaracas
00004   Module:    $RCSfile: wxMaracasIRMViewManager.cxx,v $
00005   Language:  C++
00006   Date:      $Date: 2009/05/29 14:25:26 $
00007   Version:   $Revision: 1.6 $
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 "wxMaracasIRMViewManager.h"
00018 
00019 #include "wxMaracasIRMViewManagerDataMhd.h"
00020 
00024 wxMaracasIRMViewManager::wxMaracasIRMViewManager(){
00025         _renderer = NULL;
00026         _idCount=0;
00027 }
00028 wxMaracasIRMViewManager::~wxMaracasIRMViewManager(){
00029 }
00030 
00034 void wxMaracasIRMViewManager::setRenderer(vtkRenderer*  renderer){
00035         _renderer = renderer;
00036 }
00040 int wxMaracasIRMViewManager::addProp3D(vtkProp3D* prop3D, std::string dataname)  throw(char*){
00041         checkInvariant();
00042         if(prop3D != NULL){
00043                 wxMaracasIRMViewManagerData* data = new wxMaracasIRMViewManagerData(prop3D, 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 vtkProp3D file or input";
00051         }
00052         return -1;
00053 }
00054 int wxMaracasIRMViewManager::addPropMHD(vtkImageData* imagedata, std::string dataname) throw(char*){
00055 
00056         checkInvariant();
00057         if(imagedata != NULL){
00058                 wxMaracasIRMViewManagerData* data = new wxMaracasIRMViewManagerDataMhd(imagedata, dataname);
00059                 prop3Dvect.push_back(data);             
00060                 _renderer->AddActor(data->getProp3D());
00061                 data->setId(_idCount);
00062                 _idCount++;
00063                 return data->getId();
00064         }else{
00065                 throw "Check ImageData file or input";
00066         }
00067         return -1;
00068 
00069 }
00073 void wxMaracasIRMViewManager::addRemoveActor(int propid, bool addremove)  throw(char*){
00074         checkInvariant();
00075         
00076         wxMaracasIRMViewManagerData* data = this->getViewData(propid);          
00077         if(data->getProp3D()!=NULL){
00078                 if(addremove){
00079                         _renderer->AddViewProp(data->getProp3D());
00080                 }else{
00081                         _renderer->RemoveViewProp(data->getProp3D());
00082                 }
00083                 _renderer->Render();
00084         }
00085         
00086 }
00090 void wxMaracasIRMViewManager::changeOpacity(int propid, int value)  throw(char*){
00091         checkInvariant();       
00092 
00093 
00094         this->getViewData(propid)->changeOpacity(value);
00095         
00096         _renderer->Render();
00097 
00098 }
00099 
00103 void wxMaracasIRMViewManager::changeIsoValue(int propid, double value )throw(char*){
00104         checkInvariant();       
00105 
00106         wxMaracasIRMViewManagerData* data = this->getViewData(propid);          
00107 
00108         //_renderer->RemoveActor(data->getProp3D());
00109         ((wxMaracasIRMViewManagerDataMhd*)data)->changeIsoValue(value);
00110         //_renderer->AddActor(data->getProp3D());
00111 
00112         _renderer->Render();
00113 }
00114 
00115 vtkProp3D* wxMaracasIRMViewManager:: getProp3D(std::string filename){
00116         if(filename.compare("")!= 0){
00117                 vtkSTLReader *STLReader=vtkSTLReader::New();
00118                 STLReader->SetFileName(filename.c_str());
00119                 STLReader->Update();
00120                 vtkPolyDataMapper* dataMapper = vtkPolyDataMapper::New();
00121                 dataMapper->SetInput(STLReader->GetOutput());
00122                 
00123                 vtkActor* dataActor = vtkActor::New();
00124                 dataActor->SetMapper(dataMapper);       
00125                 dataActor->GetProperty()->SetOpacity(1);
00126                 
00127                 return dataActor;
00128         }       
00129         return NULL;
00130 }
00131 
00132 vtkImageData* wxMaracasIRMViewManager::getImageData(std::string filename){
00133         if(filename.compare("")!= 0){   
00134                 
00135                 
00136                 vtkMetaImageReader* reader =  vtkMetaImageReader::New();        
00137                 reader->SetFileName(filename.c_str());
00138                 reader->Update();
00139                 vtkImageData* img = reader->GetOutput();
00140                 //reader->Delete();
00141                 return img;
00142         }       
00143         return NULL;
00144 }
00145 
00146 void wxMaracasIRMViewManager::checkInvariant()  throw(char*){
00147         if(this->_renderer==NULL){
00148                 throw "Renderer not set";
00149         }
00150 }
00151 
00152 wxMaracasIRMViewManagerData* wxMaracasIRMViewManager::getViewData(int id) throw(char*){
00153     int i;
00154         for(i = 0; i < (int)(prop3Dvect.size());i++){
00155                 if(prop3Dvect[i]->getId() == id){
00156                         return prop3Dvect[i];
00157                 }
00158         }
00159         throw "id not found in the data";
00160 
00161         return NULL;
00162 }
00163 
00164 int wxMaracasIRMViewManager::getMaxIsoValue(int propid) throw(char*){
00165         
00166         return ((wxMaracasIRMViewManagerDataMhd*)this->getViewData(propid))->getMaxGreyLevel();
00167 
00168 }
00169 
00170 void wxMaracasIRMViewManager::changeColor(int propid, double red, double green, double blue) throw(char*){
00171         checkInvariant();       
00172         this->getViewData(propid)->changeColor(red, green, blue);
00173 
00174         _renderer->Render();
00175 }
00176 
00177 void wxMaracasIRMViewManager::deleteActor(int propid) throw (char *){
00178         checkInvariant();       
00179 
00180         this->addRemoveActor(propid, false);
00181 
00182         int i,n;
00183         bool exit = false;
00184         for(i = 0; i < (int)(prop3Dvect.size())&&!exit;i++){
00185                 if(prop3Dvect[i]->getId() == propid){                   
00186                         n=i;
00187                         exit = true;
00188                 }
00189         }
00190         if(exit){
00191                 wxMaracasIRMViewManagerData* data = prop3Dvect[n];                      
00192                 int j;
00193                 for(j = i; j < (int)(prop3Dvect.size())-1;j++){
00194                         prop3Dvect[j] = prop3Dvect[j+1];
00195                 }               
00196                 delete data;
00197                 prop3Dvect.pop_back();
00198         }else{
00199                 throw "id not found in the data";
00200         }
00201 
00202         
00203         
00204     
00205 }
00206 
00207 

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