]> Creatis software - creaMaracasVisu.git/blobdiff - lib/maracasVisuLib/src/interface/wxWindows/widgets/wxMaracasIRMViewManager.cxx
no message
[creaMaracasVisu.git] / lib / maracasVisuLib / src / interface / wxWindows / widgets / wxMaracasIRMViewManager.cxx
index 56360295dfdc9bab685c25ff1b555f529561606d..90f581c979072546c21a6b783cc11ef9f6fe2e1d 100644 (file)
@@ -3,8 +3,8 @@
   Program:   wxMaracas
   Module:    $RCSfile: wxMaracasIRMViewManager.cxx,v $
   Language:  C++
-  Date:      $Date: 2009/04/01 16:16:59 $
-  Version:   $Revision: 1.1 $
+  Date:      $Date: 2009/05/29 14:25:26 $
+  Version:   $Revision: 1.6 $
 
   Copyright: (c) 2002, 2003
   License:
 =========================================================================*/
 #include "wxMaracasIRMViewManager.h"
 
+#include "wxMaracasIRMViewManagerDataMhd.h"
+
 /**
 **     Start of the manager class
 **/
 wxMaracasIRMViewManager::wxMaracasIRMViewManager(){
        _renderer = NULL;
+       _idCount=0;
 }
 wxMaracasIRMViewManager::~wxMaracasIRMViewManager(){
 }
@@ -34,40 +37,79 @@ void wxMaracasIRMViewManager::setRenderer(vtkRenderer*  renderer){
 /**
 **     Adds a prop3D to the manager and returns the identifier
 **/
-int wxMaracasIRMViewManager::addProp3D(vtkProp3D* prop3D){
+int wxMaracasIRMViewManager::addProp3D(vtkProp3D* prop3D, std::string dataname)  throw(char*){
+       checkInvariant();
        if(prop3D != NULL){
-               prop3Dvect.push_back(prop3D);
-
-               if(_renderer!=NULL){
-                       _renderer->AddActor(prop3D);
-               }else{
-                       throw "Imposible to add actor, check renderer";
-               }
-               
+               wxMaracasIRMViewManagerData* data = new wxMaracasIRMViewManagerData(prop3D, dataname);
+               prop3Dvect.push_back(data);             
+               _renderer->AddActor(data->getProp3D());
+               data->setId(_idCount);
+               _idCount++;
+               return data->getId();
+       }else{
+               throw "Check vtkProp3D file or input";
+       }
+       return -1;
+}
+int wxMaracasIRMViewManager::addPropMHD(vtkImageData* imagedata, std::string dataname) throw(char*){
 
-               return prop3Dvect.size()-1;
+       checkInvariant();
+       if(imagedata != NULL){
+               wxMaracasIRMViewManagerData* data = new wxMaracasIRMViewManagerDataMhd(imagedata, dataname);
+               prop3Dvect.push_back(data);             
+               _renderer->AddActor(data->getProp3D());
+               data->setId(_idCount);
+               _idCount++;
+               return data->getId();
        }else{
-               return -1;
+               throw "Check ImageData file or input";
        }
+       return -1;
+
 }
 /**
-**     Changes the opacity in a prop3D
+**     adds or removes an actor depending of the bool value
 **/
-void wxMaracasIRMViewManager::changeOpacity(int propid, int value){
-       if(propid < prop3Dvect.size()){
-               vtkActor* actor = (vtkActor*)prop3Dvect[propid];                
-               actor->GetProperty()->SetOpacity((double)value/100.0);  
+void wxMaracasIRMViewManager::addRemoveActor(int propid, bool addremove)  throw(char*){
+       checkInvariant();
+       
+       wxMaracasIRMViewManagerData* data = this->getViewData(propid);          
+       if(data->getProp3D()!=NULL){
+               if(addremove){
+                       _renderer->AddViewProp(data->getProp3D());
+               }else{
+                       _renderer->RemoveViewProp(data->getProp3D());
+               }
                _renderer->Render();
        }
+       
+}
+/**
+**     Changes the opacity in a prop3D
+**/
+void wxMaracasIRMViewManager::changeOpacity(int propid, int value)  throw(char*){
+       checkInvariant();       
+
+
+       this->getViewData(propid)->changeOpacity(value);
+       
+       _renderer->Render();
+
 }
 
 /**
 **     changes the isovalue in a prop3D
 **/
-void wxMaracasIRMViewManager::changeIsoValue(int propid, int value){
-       if(propid<prop3Dvect.size()){
+void wxMaracasIRMViewManager::changeIsoValue(int propid, double value )throw(char*){
+       checkInvariant();       
 
-       }
+       wxMaracasIRMViewManagerData* data = this->getViewData(propid);          
+
+       //_renderer->RemoveActor(data->getProp3D());
+       ((wxMaracasIRMViewManagerDataMhd*)data)->changeIsoValue(value);
+       //_renderer->AddActor(data->getProp3D());
+
+       _renderer->Render();
 }
 
 vtkProp3D* wxMaracasIRMViewManager:: getProp3D(std::string filename){
@@ -86,3 +128,80 @@ vtkProp3D* wxMaracasIRMViewManager:: getProp3D(std::string filename){
        }       
        return NULL;
 }
+
+vtkImageData* wxMaracasIRMViewManager::getImageData(std::string filename){
+       if(filename.compare("")!= 0){   
+               
+               
+               vtkMetaImageReader* reader =  vtkMetaImageReader::New();        
+               reader->SetFileName(filename.c_str());
+               reader->Update();
+               vtkImageData* img = reader->GetOutput();
+               //reader->Delete();
+               return img;
+       }       
+       return NULL;
+}
+
+void wxMaracasIRMViewManager::checkInvariant()  throw(char*){
+       if(this->_renderer==NULL){
+               throw "Renderer not set";
+       }
+}
+
+wxMaracasIRMViewManagerData* wxMaracasIRMViewManager::getViewData(int id) throw(char*){
+    int i;
+       for(i = 0; i < (int)(prop3Dvect.size());i++){
+               if(prop3Dvect[i]->getId() == id){
+                       return prop3Dvect[i];
+               }
+       }
+       throw "id not found in the data";
+
+       return NULL;
+}
+
+int wxMaracasIRMViewManager::getMaxIsoValue(int propid) throw(char*){
+       
+       return ((wxMaracasIRMViewManagerDataMhd*)this->getViewData(propid))->getMaxGreyLevel();
+
+}
+
+void wxMaracasIRMViewManager::changeColor(int propid, double red, double green, double blue) throw(char*){
+       checkInvariant();       
+       this->getViewData(propid)->changeColor(red, green, blue);
+
+       _renderer->Render();
+}
+
+void wxMaracasIRMViewManager::deleteActor(int propid) throw (char *){
+       checkInvariant();       
+
+       this->addRemoveActor(propid, false);
+
+       int i,n;
+       bool exit = false;
+       for(i = 0; i < (int)(prop3Dvect.size())&&!exit;i++){
+               if(prop3Dvect[i]->getId() == propid){                   
+                       n=i;
+                       exit = true;
+               }
+       }
+       if(exit){
+               wxMaracasIRMViewManagerData* data = prop3Dvect[n];                      
+               int j;
+               for(j = i; j < (int)(prop3Dvect.size())-1;j++){
+                       prop3Dvect[j] = prop3Dvect[j+1];
+               }               
+               delete data;
+               prop3Dvect.pop_back();
+       }else{
+               throw "id not found in the data";
+       }
+
+       
+       
+    
+}
+
+