]> Creatis software - creaMaracasVisu.git/blobdiff - lib/Kernel/VTKObjects/SurfaceRenderer/wxMaracasSurfaceRenderingManagerData.cxx
addition of image stencil to surface rendering
[creaMaracasVisu.git] / lib / Kernel / VTKObjects / SurfaceRenderer / wxMaracasSurfaceRenderingManagerData.cxx
index 510ec5c53b3ddb681a14a2664e0f5c8c8304205d..1faca334ff3ff0f0de4c59db40e4a7caa5633f59 100644 (file)
@@ -4,6 +4,12 @@
 #include <vtkSmartPointer.h>
 #include "vtkSTLWriter.h"
 #include "vtkPLYWriter.h"
+#include "vtkPolyDataWriter.h"
+#include "surfacerenderingimagestencilexport.h"
+#include "vtkMetaImageWriter.h"
+#include "vtkPolyDataReader.h"
+#include "vtkPLYReader.h"
+#include "vtkSmartPointer.h"
 
 /********************************************************************************************
 ** Start of data viewmanagerData
@@ -27,6 +33,49 @@ wxMaracasSurfaceRenderingManagerData::wxMaracasSurfaceRenderingManagerData(vtkPr
        _boxWidgetS1->GetPlanes( this->GetVtkClipping3DDataViewer()->GetTissuePlanes(3) );*/
 }
 
+wxMaracasSurfaceRenderingManagerData::wxMaracasSurfaceRenderingManagerData(string filename, vtkRenderWindowInteractor*  interactor){
+
+    _prop3D = getProp3D(filename);
+    _dataname = filename;
+    _boxWidgetS1=NULL;
+
+    initializeBoxWidget(interactor);
+}
+
+vtkProp3D* wxMaracasSurfaceRenderingManagerData::getProp3D(std::string filename){
+
+    if(filename.compare("")!= 0){
+
+        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();
+            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());
+        }else if(ext.compare(VTK)==0){
+            vtkSmartPointer<vtkPolyDataReader> polyreader =vtkSmartPointer<vtkPolyDataReader>::New();
+            polyreader->SetFileName(filename.c_str());
+            polyreader->Update();
+            polydata->DeepCopy(polyreader->GetOutput());
+        }
+
+        _dataMapper = vtkPolyDataMapper::New();
+        _dataMapper->SetInput(polydata);
+
+        vtkActor* dataActor = vtkActor::New();
+        dataActor->SetMapper(_dataMapper);
+        dataActor->GetProperty()->SetOpacity(1);
+        return dataActor;
+    }
+    return NULL;
+}
 
 wxMaracasSurfaceRenderingManagerData::~wxMaracasSurfaceRenderingManagerData(){
        
@@ -124,13 +173,20 @@ void wxMaracasSurfaceRenderingManagerData::saveProp3DSTL(const char* filename){
               plywriter->SetFileName(filename);
               plywriter->SetInput(_dataMapper->GetInput());
               plywriter->Write();
-        }else if(ext.compare(PLY) == 0){
+        }else if(ext.compare(STL) == 0){
             vtkSmartPointer<vtkSTLWriter> stlWriter =
             vtkSmartPointer<vtkSTLWriter>::New();
               stlWriter->SetFileName(filename);
               stlWriter->SetInput(_dataMapper->GetInput());
               stlWriter->SetFileTypeToBinary();
               stlWriter->Write();
+        }else if(ext.compare(VTK) == 0){
+            vtkSmartPointer<vtkPolyDataWriter> polydataWriter =
+            vtkSmartPointer<vtkPolyDataWriter>::New();
+              polydataWriter->SetFileName(filename);
+              polydataWriter->SetInput(_dataMapper->GetInput());
+              polydataWriter->SetFileTypeToBinary();
+              polydataWriter->Write();
         }else{
             cout<<"unsupported format"<<endl;
         }
@@ -141,6 +197,23 @@ void wxMaracasSurfaceRenderingManagerData::enableBoxWidget(bool enable){
 
 }
 
+void wxMaracasSurfaceRenderingManagerData::exportImageStencil(const char* filename){
+    if(_dataMapper){
+        vtkSmartPointer< SurfaceRenderingImageStencilExport> stencilexport = vtkSmartPointer< SurfaceRenderingImageStencilExport >::New();
+        stencilexport->SetInput( _dataMapper->GetInput());
+        stencilexport->Update();
+        vtkImageData* imgstencil = stencilexport->GetOutput();
+
+        vtkSmartPointer<vtkMetaImageWriter> metawriter = vtkSmartPointer<vtkMetaImageWriter>::New();
+        metawriter->SetFileName(filename);
+        metawriter->SetInput(imgstencil);
+        metawriter->Write();
+    }else{
+        cout<<"No poly data set to data mapper."<<endl;
+    }
+
+}
+