]> Creatis software - creaMaracasVisu.git/blobdiff - lib/GUI/Base/SurfaceRenderer/wxMaracasSurfaceRenderingManager.cxx
changes in qt for volume rendering with gpu support, if you are working with volume...
[creaMaracasVisu.git] / lib / GUI / Base / SurfaceRenderer / wxMaracasSurfaceRenderingManager.cxx
index 220fecc48b3de5649a752e8f96d228c74ac335d6..ac816f6241cfcf4f38b6a1d7198f8422a9b01877 100644 (file)
@@ -3,8 +3,8 @@
   Program:   wxMaracas
   Module:    $RCSfile: wxMaracasSurfaceRenderingManager.cxx,v $
   Language:  C++
-  Date:      $Date: 2011/06/28 16:56:13 $
-  Version:   $Revision: 1.1 $
+  Date:      $Date: 2011/10/05 16:26:55 $
+  Version:   $Revision: 1.2 $
 
   Copyright: (c) 2002, 2003
   License:
 #include "wxMaracasSurfaceRenderingManager.h"
 #include "wxMaracasSurfaceRenderingManagerDataMhd.h"
 
+
+#include "vtkPLYReader.h"
+#include "vtkSmartPointer.h"
+
 /**
 **     Start of the manager class
 **/
@@ -63,7 +67,7 @@ void wxMaracasSurfaceRenderingManager::Update(int pid)throw(char*){
 **     Adds a prop3D to the manager and returns the identifier
 **/
 int wxMaracasSurfaceRenderingManager::addProp3D(int idTP, vtkProp3D* prop3D, std::string dataname)  throw(char*){
-       checkInvariant();
+        //checkInvariant();
        if(prop3D != NULL){
                wxMaracasSurfaceRenderingManagerData* data = new wxMaracasSurfaceRenderingManagerData(prop3D, dataname, _interactor);
                prop3Dvect.push_back(data);
@@ -85,7 +89,7 @@ int wxMaracasSurfaceRenderingManager::addProp3D(int idTP, vtkProp3D* prop3D, std
 }
 int wxMaracasSurfaceRenderingManager::addPropMHD(int idTP, vtkImageData* imagedata, std::string dataname) throw(char*){
        checkInvariant();
-       if(imagedata != NULL){
+       if(imagedata != NULL){                
                image = imagedata;
                wxMaracasSurfaceRenderingManagerData* data = new wxMaracasSurfaceRenderingManagerDataMhd(imagedata, dataname, _interactor);
                prop3Dvect.push_back(data);     
@@ -112,15 +116,20 @@ int wxMaracasSurfaceRenderingManager::addPropMHD(int idTP, vtkImageData* imageda
 void wxMaracasSurfaceRenderingManager::addRemoveActor(int propid, bool addremove)  throw(char*){
        checkInvariant();
        
-       wxMaracasSurfaceRenderingManagerData* data = this->getViewData(propid);         
-       if(data->getProp3D()!=NULL){
+        wxMaracasSurfaceRenderingManagerData* data = this->getViewData(propid);
+        if(data && data->getProp3D()!=NULL){
                if(addremove){
                        _renderer->AddViewProp(data->getProp3D());
                }else{
                        _renderer->RemoveViewProp(data->getProp3D());
                }
                _renderer->Render();
-       }
+        }else {
+            if(addremove && propid == 0 && image){
+                addPropMHD(0, image, "id0");
+            }
+            return;
+        }
 }
 /**
 **     adds or removes the surface box depending of the bool value
@@ -187,17 +196,29 @@ void wxMaracasSurfaceRenderingManager::changeIsoValue(int propid, double min, do
 
 vtkProp3D* wxMaracasSurfaceRenderingManager:: getProp3D(std::string filename){
        if(filename.compare("")!= 0){
-               vtkSTLReader *STLReader=vtkSTLReader::New();
+
+            vtkSmartPointer<vtkPolyData> polydata = vtkSmartPointer<vtkPolyData>::New();
+            std::string ext = filename.substr(filename.find_last_of("."), 4);
+            if(ext.compare(STL)==0){
+                vtkSmartPointer<vtkSTLReader> STLReader=vtkSmartPointer<vtkSTLReader>::New();
                STLReader->SetFileName(filename.c_str());
                STLReader->Update();
-               vtkPolyDataMapper* dataMapper = vtkPolyDataMapper::New();
-               dataMapper->SetInput(STLReader->GetOutput());
-               
-               vtkActor* dataActor = vtkActor::New();
-               dataActor->SetMapper(dataMapper);       
-               dataActor->GetProperty()->SetOpacity(1);
-               
-               return dataActor;
+                polydata->DeepCopy(STLReader->GetOutput());
+
+            }else if(ext.compare(PLY)==0){
+                vtkSmartPointer<vtkPLYReader> plyreader =vtkSmartPointer<vtkPLYReader>::New();
+                plyreader->SetFileName(filename.c_str());
+                plyreader->Update();
+                polydata->DeepCopy(plyreader->GetOutput());
+            }
+
+            vtkSmartPointer<vtkPolyDataMapper> dataMapper = vtkSmartPointer<vtkPolyDataMapper>::New();
+            dataMapper->SetInput(polydata);
+
+            vtkActor* dataActor = vtkActor::New();
+            dataActor->SetMapper(dataMapper);
+            dataActor->GetProperty()->SetOpacity(1);
+            return dataActor;
        }       
        return NULL;
 }
@@ -219,6 +240,10 @@ vtkImageData* wxMaracasSurfaceRenderingManager::getImageData(){
        return image;
 }
 
+void wxMaracasSurfaceRenderingManager::setImageData(vtkImageData* img){
+    image = img;
+}
+
 void wxMaracasSurfaceRenderingManager::checkInvariant()  throw(char*){
        if(this->_renderer==NULL){
                throw "Renderer not set";
@@ -227,14 +252,19 @@ void wxMaracasSurfaceRenderingManager::checkInvariant()  throw(char*){
 
 wxMaracasSurfaceRenderingManagerData* wxMaracasSurfaceRenderingManager::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";
+    for(i = 0; i < (int)(prop3Dvect.size());i++){
+            if(prop3Dvect[i]->getId() == id){
+                    return prop3Dvect[i];
+            }
+    }
+    return 0;
+#ifndef USE_QT
+    throw "id not found in the data";
+#else
+    return NULL;
+#endif
+
 
-       return NULL;
 }
 
 int wxMaracasSurfaceRenderingManager::getMaxIsoValue(int propid) throw(char*){
@@ -272,8 +302,10 @@ void wxMaracasSurfaceRenderingManager::deleteActor(int propid) throw (char *){
                delete data;
                prop3Dvect.pop_back();
        }else{
+#ifndef USE_QT
+                throw "id not found in the data";
+#endif
 
-               throw "id not found in the data";
        }   
 }
 
@@ -282,7 +314,8 @@ void wxMaracasSurfaceRenderingManager::enableBoundingBox(int propid, bool enable
 
     wxMaracasSurfaceRenderingManagerData* data = this->getViewData(propid);
 
-    data->enableBoxWidget(enable);
+    if(data)
+        data->enableBoxWidget(enable);
 }
 void wxMaracasSurfaceRenderingManager::Transform(vtkMatrix4x4* tmatrix){
        
@@ -300,3 +333,7 @@ void wxMaracasSurfaceRenderingManager::saveProp3DSTL(int propid,const char* file
             data->saveProp3DSTL(filename);
     }
 }
+
+void wxMaracasSurfaceRenderingManager::loadProp3DSTL(const char* filename){
+    this->addProp3D(-1, this->getProp3D(filename), filename);
+}