]> Creatis software - creaMaracasVisu.git/blobdiff - lib/maracasVisuLib/src/interface/wxWindows/widgets/wxMaracasIRMViewManager.cxx
*** empty log message ***
[creaMaracasVisu.git] / lib / maracasVisuLib / src / interface / wxWindows / widgets / wxMaracasIRMViewManager.cxx
index 1b3ec3676b4f13c574bc209887c8ebf5616af841..c655d51dd5538051719ff0c464a631f7a6b5e52a 100644 (file)
@@ -3,8 +3,8 @@
   Program:   wxMaracas
   Module:    $RCSfile: wxMaracasIRMViewManager.cxx,v $
   Language:  C++
-  Date:      $Date: 2009/04/14 12:47:30 $
-  Version:   $Revision: 1.3 $
+  Date:      $Date: 2009/05/04 07:35:42 $
+  Version:   $Revision: 1.4 $
 
   Copyright: (c) 2002, 2003
   License:
@@ -49,7 +49,7 @@ int wxMaracasIRMViewManager::addProp3D(vtkProp3D* prop3D, std::string dataname)
        }
        return -1;
 }
-int wxMaracasIRMViewManager::addPropMHD(vtkImageData* imagedata, std::string dataname){
+int wxMaracasIRMViewManager::addPropMHD(vtkImageData* imagedata, std::string dataname) throw(char*){
 
        checkInvariant();
        if(imagedata != NULL){
@@ -98,14 +98,14 @@ void wxMaracasIRMViewManager::changeOpacity(int propid, int value)  throw(char*)
 /**
 **     changes the isovalue in a prop3D
 **/
-void wxMaracasIRMViewManager::changeIsoValue(int propid, int value )throw(char*){
+void wxMaracasIRMViewManager::changeIsoValue(int propid, double value )throw(char*){
        checkInvariant();       
 
        wxMaracasIRMViewManagerData* data = this->getViewData(propid);          
 
-       _renderer->RemoveViewProp(data->getProp3D());
+       //_renderer->RemoveActor(data->getProp3D());
        data->changeIsoValue(value);
-       _renderer->AddViewProp(data->getProp3D());
+       //_renderer->AddActor(data->getProp3D());
 
        _renderer->Render();
 }
@@ -169,6 +169,37 @@ void wxMaracasIRMViewManager::changeColor(int propid, double red, double green,
        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 < 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 < prop3Dvect.size()-1;j++){
+                       prop3Dvect[j] = prop3Dvect[j+1];
+               }               
+               delete data;
+               prop3Dvect.pop_back();
+       }else{
+               throw "id not found in the data";
+       }
+
+       
+       
+    
 }
 
 /********************************************************************************************
@@ -177,9 +208,13 @@ void wxMaracasIRMViewManager::changeColor(int propid, double red, double green,
 
 wxMaracasIRMViewManagerData::wxMaracasIRMViewManagerData(vtkProp3D* prop3Dvect, std::string dataname){
 
-       _prop3D = prop3Dvect;
+       _prop3D = prop3Dvect;   
        _dataname = dataname;
        _maxgreylevel=-1;
+
+       _cubesFilter=NULL;
+       _cleanFilter=NULL;      
+       _dataMapper=NULL;
 }
 wxMaracasIRMViewManagerData::wxMaracasIRMViewManagerData(vtkImageData* imagedata, std::string dataname){
 
@@ -189,52 +224,51 @@ wxMaracasIRMViewManagerData::wxMaracasIRMViewManagerData(vtkImageData* imagedata
        _maxgreylevel = getMaxLevel(imagedata);
        _prop3D=NULL;                   
 
-       this->changeIsoValue(this->_maxgreylevel);
-}
-/**
-**     changes the isovalue in a prop3D
-**/
-void wxMaracasIRMViewManagerData::changeIsoValue(int value){   
-       
-
-       if(_prop3D!=NULL){
-               _prop3D->Delete();
-               _polydata->Delete();
-               _dataMapper->Delete();
-       }
-
-       vtkMarchingCubes *cubesFilter = vtkMarchingCubes::New();
-    cubesFilter->SetInput(this->_imagedata);
-    cubesFilter->SetValue(0,value);
-       cubesFilter->ComputeGradientsOn ();
-    cubesFilter->ComputeScalarsOn ();
-       cubesFilter->SetNumberOfContours( 1 );
+       _cubesFilter = vtkMarchingCubes::New();
+       _cleanFilter = vtkCleanPolyData::New();         
+       _dataMapper = vtkPolyDataMapper::New();
+       vtkActor* dataActor = vtkActor::New();
        
-       // Unir puntos duplicados y remover primitivas degeneradas
-       vtkCleanPolyData *cleanFilter = vtkCleanPolyData::New();
-    cleanFilter->SetInput ( cubesFilter->GetOutput() );
-       cleanFilter->Update();
-
-       _polydata = vtkPolyData::New();
-       _polydata->DeepCopy(cleanFilter->GetOutput());
+       _cubesFilter->SetInput(this->_imagedata);
+       _cubesFilter->ComputeGradientsOn ();
+       _cubesFilter->ComputeScalarsOn ();
+       _cubesFilter->SetNumberOfContours( 1 );
+       _cleanFilter->SetInput ( _cubesFilter->GetOutput() );
+       _dataMapper->SetInput(_cleanFilter->GetOutput());
+       _dataMapper->ScalarVisibilityOff();
+       _dataMapper->ImmediateModeRenderingOn();
+       dataActor->SetMapper(_dataMapper);      
 
-       cubesFilter->Delete();
-       cleanFilter->Delete();
+       this->_prop3D = dataActor;
 
+       this->changeIsoValue(this->_maxgreylevel);      
 
-       _dataMapper = vtkPolyDataMapper::New();
-       _dataMapper->SetInput(_polydata);
 
-       vtkActor* dataActor = vtkActor::New();
-       dataActor->SetMapper(_dataMapper);      
-       _prop3D = dataActor;    
+}
+/**
+**     changes the isovalue in a prop3D
+**/
+void wxMaracasIRMViewManagerData::changeIsoValue(double value){        
+               
+   
+    _cubesFilter->SetValue(0,value);           
+       _cubesFilter->Update();    
+       _cleanFilter->Update();
+       _dataMapper->Update();  
+       
        
        
 }
 int wxMaracasIRMViewManagerData::getMaxGreyLevel(){
        return _maxgreylevel;
 }
-wxMaracasIRMViewManagerData::~wxMaracasIRMViewManagerData(){
+wxMaracasIRMViewManagerData::~wxMaracasIRMViewManagerData(){   
+       if(_cubesFilter!=NULL){
+               _cubesFilter->Delete();
+               _cleanFilter->Delete();
+               _dataMapper->Delete();
+       }
+       _prop3D->Delete();      
 }
 /**
 **     Adds a prop3D to the world of the application
@@ -275,10 +309,18 @@ void wxMaracasIRMViewManagerData::setProp3D(vtkProp3D* prop3D){
 **     Changes the opacity in a prop3D
 **/
 void wxMaracasIRMViewManagerData::changeOpacity(int value){
-       vtkActor* actor = (vtkActor*)_prop3D;
+       std::cout<<"chage op"<<value<<std::endl;
+       vtkActor* actor = (vtkActor*)this->_prop3D;     
        actor->GetProperty()->SetOpacity((double)value/100.0);
-}
 
+       
+
+}
+void wxMaracasIRMViewManagerData::changeColor(double red, double green, double blue){
+       std::cout<<"chage col"<<red<<green<<blue<<std::endl;
+    vtkActor* actor = (vtkActor*)this->_prop3D;        
+       actor->GetProperty()->SetColor(red,green,blue); 
+}
 /**
 **     Check if the variables are setted correctly
 **/
@@ -289,7 +331,7 @@ void wxMaracasIRMViewManagerData::checkInvariant(){
 **     get the prop3D 
 **/
 vtkProp3D* wxMaracasIRMViewManagerData::getProp3D(){
-       return _prop3D;
+       return this->_prop3D;
 }
 /**
 **     return the id from the daat
@@ -317,7 +359,4 @@ void wxMaracasIRMViewManagerData::setDataname(std::string dataname){
        _dataname = dataname;
 }
 
-void wxMaracasIRMViewManagerData::changeColor(double red, double green, double blue){
-    vtkActor* actor = (vtkActor*)_prop3D;      
-       actor->GetProperty()->SetColor(red,green,blue);
-}
+