wxMaracasSurfaceRenderingManager.cxx

Go to the documentation of this file.
00001 /*=========================================================================
00002 
00003   Program:   wxMaracas
00004   Module:    $RCSfile: wxMaracasSurfaceRenderingManager.cxx,v $
00005   Language:  C++
00006   Date:      $Date: 2010/01/21 13:54:15 $
00007   Version:   $Revision: 1.7 $
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 "wxMaracasSurfaceRenderingManager.h"
00018 #include "wxMaracasSurfaceRenderingManagerDataMhd.h"
00019 
00023 wxMaracasSurfaceRenderingManager::wxMaracasSurfaceRenderingManager(){
00024         _renderer = NULL;
00025         _interactor = NULL;
00026         _idCount=0;
00027 }
00028 wxMaracasSurfaceRenderingManager::~wxMaracasSurfaceRenderingManager(){
00029 }
00030 
00034 void wxMaracasSurfaceRenderingManager::setRenderer(vtkRenderer*  renderer){
00035         _renderer = renderer;
00036 }
00037 
00041 void wxMaracasSurfaceRenderingManager::setInteractor(vtkRenderWindowInteractor*  interactor){
00042         _interactor = interactor;
00043 }
00044 
00045 
00049 vtkRenderer* wxMaracasSurfaceRenderingManager::getRenderer(){
00050         return _renderer;
00051 }
00052 
00056 void wxMaracasSurfaceRenderingManager::Update(int pid)throw(char*){
00057         wxMaracasSurfaceRenderingManagerData* data = this->getViewData(pid);    
00058         ((wxMaracasSurfaceRenderingManagerDataMhd*)data)->UpdateSurface();
00059         _renderer->Render();
00060 }
00061 
00065 int wxMaracasSurfaceRenderingManager::addProp3D(int idTP, vtkProp3D* prop3D, std::string dataname)  throw(char*){
00066         checkInvariant();
00067         if(prop3D != NULL){
00068                 wxMaracasSurfaceRenderingManagerData* data = new wxMaracasSurfaceRenderingManagerData(prop3D, dataname, _interactor);
00069                 prop3Dvect.push_back(data);
00070                 _renderer->AddActor(data->getProp3D());
00071                 if(idTP == -1)
00072                 {
00073                         data->setId(_idCount);
00074                         _idCount++;
00075                 }
00076                 else
00077                 {
00078                         data->setId(idTP);
00079                 }
00080                 return data->getId();
00081         }else{
00082                 throw "Check vtkProp3D file or input";
00083         }
00084         return -1;
00085 }
00086 int wxMaracasSurfaceRenderingManager::addPropMHD(int idTP, vtkImageData* imagedata, std::string dataname) throw(char*){
00087         checkInvariant();
00088         if(imagedata != NULL){
00089                 image = imagedata;
00090                 wxMaracasSurfaceRenderingManagerData* data = new wxMaracasSurfaceRenderingManagerDataMhd(imagedata, dataname, _interactor);
00091                 prop3Dvect.push_back(data);     
00092                 _renderer->AddActor(data->getProp3D());
00093                 if(idTP == -1)
00094                 {
00095                         data->setId(_idCount);
00096                         _idCount++;
00097                 }
00098                 else
00099                 {
00100                         data->setId(idTP);
00101                 }
00102                 printf("wxMaracasSurfaceRenderingManager::addPropMHD->idSurfaceRender: %i\n", data->getId());
00103                 return data->getId();
00104         }else{
00105                 throw "Check ImageData file or input";
00106         }
00107         return -1;
00108 }
00112 void wxMaracasSurfaceRenderingManager::addRemoveActor(int propid, bool addremove)  throw(char*){
00113         checkInvariant();
00114         
00115         wxMaracasSurfaceRenderingManagerData* data = this->getViewData(propid);         
00116         if(data->getProp3D()!=NULL){
00117                 if(addremove){
00118                         _renderer->AddViewProp(data->getProp3D());
00119                 }else{
00120                         _renderer->RemoveViewProp(data->getProp3D());
00121                 }
00122                 _renderer->Render();
00123         }
00124 }
00128 void wxMaracasSurfaceRenderingManager::addRemoveSurfaceBox(int propid, bool addremove)  throw(char*){
00129         checkInvariant();
00130         
00131         wxMaracasSurfaceRenderingManagerData* data = this->getViewData(propid);         
00132         if(data->getProp3D()!=NULL){
00133                 data->addRemoveSurfaceBox(addremove);
00134                 /*if(addremove){
00135                         data->
00136                         _renderer->AddViewProp(data->getProp3D());
00137                 }else{
00138                         _renderer->RemoveViewProp(data->getProp3D());
00139                 }
00140                 _renderer->Render();*/
00141         }
00142         
00143 }
00144 
00148 void wxMaracasSurfaceRenderingManager::changeOpacity(int propid, int value)  throw(char*){
00149         checkInvariant();       
00150 
00151 
00152         this->getViewData(propid)->changeOpacity(value);
00153         
00154         _renderer->Render();
00155 
00156 }
00157 
00161 void wxMaracasSurfaceRenderingManager::changeIsoValue(int propid, double value )throw(char*){
00162         checkInvariant();       
00163 
00164         wxMaracasSurfaceRenderingManagerData* data = this->getViewData(propid);         
00165 
00166         //_renderer->RemoveActor(data->getProp3D());
00167         ((wxMaracasSurfaceRenderingManagerDataMhd*)data)->changeIsoValue(value);
00168         //_renderer->AddActor(data->getProp3D());
00169 
00170         _renderer->Render();
00171 }
00172 
00173 vtkProp3D* wxMaracasSurfaceRenderingManager:: getProp3D(std::string filename){
00174         if(filename.compare("")!= 0){
00175                 vtkSTLReader *STLReader=vtkSTLReader::New();
00176                 STLReader->SetFileName(filename.c_str());
00177                 STLReader->Update();
00178                 vtkPolyDataMapper* dataMapper = vtkPolyDataMapper::New();
00179                 dataMapper->SetInput(STLReader->GetOutput());
00180                 
00181                 vtkActor* dataActor = vtkActor::New();
00182                 dataActor->SetMapper(dataMapper);       
00183                 dataActor->GetProperty()->SetOpacity(1);
00184                 
00185                 return dataActor;
00186         }       
00187         return NULL;
00188 }
00189 
00190 vtkImageData* wxMaracasSurfaceRenderingManager::getImageData(std::string filename){
00191         if(filename.compare("")!= 0){   
00192                 
00193                 vtkMetaImageReader* reader =  vtkMetaImageReader::New();        
00194                 reader->SetFileName(filename.c_str());
00195                 reader->Update();
00196                 vtkImageData* img = reader->GetOutput();
00197                 //reader->Delete();
00198                 return img;
00199         }       
00200         return NULL;
00201 }
00202 
00203 vtkImageData* wxMaracasSurfaceRenderingManager::getImageData(){
00204         return image;
00205 }
00206 
00207 void wxMaracasSurfaceRenderingManager::checkInvariant()  throw(char*){
00208         if(this->_renderer==NULL){
00209                 throw "Renderer not set";
00210         }
00211 }
00212 
00213 wxMaracasSurfaceRenderingManagerData* wxMaracasSurfaceRenderingManager::getViewData(int id) throw(char*){
00214     int i;
00215         for(i = 0; i < (int)(prop3Dvect.size());i++){
00216                 if(prop3Dvect[i]->getId() == id){
00217                         return prop3Dvect[i];
00218                 }
00219         }
00220         throw "id not found in the data";
00221 
00222         return NULL;
00223 }
00224 
00225 int wxMaracasSurfaceRenderingManager::getMaxIsoValue(int propid) throw(char*){
00226         
00227         return ((wxMaracasSurfaceRenderingManagerDataMhd*)this->getViewData(propid))->getMaxGreyLevel();
00228 
00229 }
00230 
00231 void wxMaracasSurfaceRenderingManager::changeColor(int propid, double red, double green, double blue) throw(char*){
00232         checkInvariant();       
00233         this->getViewData(propid)->changeColor(red, green, blue);
00234 
00235         _renderer->Render();
00236 }
00237 
00238 void wxMaracasSurfaceRenderingManager::deleteActor(int propid) throw (char *){
00239         checkInvariant();       
00240 
00241         this->addRemoveActor(propid, false);
00242 
00243         int i,n;
00244         bool exit = false;
00245         for(i = 0; i < (int)(prop3Dvect.size())&&!exit;i++){
00246                 if(prop3Dvect[i]->getId() == propid){                   
00247                         n=i;
00248                         exit = true;
00249                 }
00250         }
00251         if(exit){
00252                 wxMaracasSurfaceRenderingManagerData* data = prop3Dvect[n];                     
00253                 int j;
00254                 for(j = i; j < (int)(prop3Dvect.size())-1;j++){
00255                         prop3Dvect[j] = prop3Dvect[j+1];
00256                 }               
00257                 delete data;
00258                 prop3Dvect.pop_back();
00259         }else{
00260 
00261                 throw "id not found in the data";
00262         }   
00263 }
00264 
00265 void wxMaracasSurfaceRenderingManager::Transform(vtkMatrix4x4* tmatrix){
00266         
00267 }
00268 
00269 bool wxMaracasSurfaceRenderingManager::interactorSet(){
00270         return _interactor? true:false;
00271 }

Generated on 18 Mar 2010 for creaMaracasVisu_lib by  doxygen 1.6.1