]> Creatis software - bbtk.git/blobdiff - packages/vtk/src/bbvtkPolyDataWriterPlus.cxx
*** empty log message ***
[bbtk.git] / packages / vtk / src / bbvtkPolyDataWriterPlus.cxx
diff --git a/packages/vtk/src/bbvtkPolyDataWriterPlus.cxx b/packages/vtk/src/bbvtkPolyDataWriterPlus.cxx
new file mode 100755 (executable)
index 0000000..969254d
--- /dev/null
@@ -0,0 +1,143 @@
+#include "bbvtkPolyDataWriterPlus.h"
+#include "bbvtkPackage.h"
+namespace bbvtk
+{
+
+BBTK_ADD_BLACK_BOX_TO_PACKAGE(vtk,PolyDataWriterPlus)
+BBTK_BLACK_BOX_IMPLEMENTATION(PolyDataWriterPlus,bbtk::AtomicBlackBox);
+void PolyDataWriterPlus::Process()
+{
+       std::cout << "[" << this << "]" << "PolyDataWriterPlus::Process()..." << std::endl;
+       //Review the observers...
+
+       if (!HasObserver(OBS_PRE_WRITER_1) && bbGetInputInPrePersistObs1() != NULL)
+               AddObserver(OBS_PRE_WRITER_1, bbGetInputInPrePersistObs1());
+
+       if (!HasObserver(OBS_POST_WRITER_1) == NULL && bbGetInputInPostPersistObs1() != NULL)
+               AddObserver(OBS_POST_WRITER_1, bbGetInputInPostPersistObs1());
+
+       InvokeEvent(OBS_PRE_WRITER_1);
+
+       if (bbGetInputInPath().size()==0)
+       {
+               std::cout << "Set InPath." << std::endl;
+               return;
+       }
+
+       vtkPolyData* cosa;
+
+       if (bbGetInputIn()==NULL)
+       {
+               if (bbGetInputIn2()==NULL)
+               {
+                       std::cout << "Set In." << std::endl;
+                       return;
+               }
+               else
+               {
+                       vtkProp3D* actor = bbGetInputIn2();
+                       vtkPolyDataMapper* mapper = ((vtkPolyDataMapper*)((vtkActor*)actor)->GetMapper());
+                       cosa = mapper->GetInput();
+               }
+       }
+       else
+       {
+               cosa = bbGetInputIn();
+       }
+
+       std::string nuevo_nombre = guessName(bbGetInputInPath());
+
+
+       vtkPolyData* entrada = cosa;
+       std::cout << "Before writing" << std::endl;
+       entrada->Print(std::cout);
+
+       std::vector< std::string > partes = StringSplit(nuevo_nombre, ".");
+       std::string extension = partes.at(partes.size()-1);
+
+       std::cout << "Extension (vtk, vtp o stl?) => " << extension << std::endl;
+
+
+
+       vtkDataSetSurfaceFilter* surfaceFilter = vtkDataSetSurfaceFilter::New();
+       surfaceFilter->SetInput(entrada);
+       surfaceFilter->Update();
+       //vtkPolyData* polydata = surfaceFilter->GetOutput();
+       entrada = surfaceFilter->GetOutput();
+
+       if (extension.compare("vtk") == 0)
+       {
+               vtkPolyDataWriter* writer = vtkPolyDataWriter::New();
+               writer->SetInput(entrada);
+               writer->SetFileName(nuevo_nombre.data());
+               writer->Write();
+               writer->Delete();
+       }
+
+       if (extension.compare("vtp") == 0)
+       {
+               vtkXMLPolyDataWriter* writer = vtkXMLPolyDataWriter::New();
+               writer->SetFileName ( nuevo_nombre.data() );
+               writer->SetInput ( entrada );
+               writer->Write();
+               writer->Delete();
+       }
+
+       if (extension.compare("stl") == 0)
+       {
+               vtkSTLWriter* writer = vtkSTLWriter::New();
+               writer->SetFileName ( nuevo_nombre.data() );
+               writer->SetInput ( entrada );
+               writer->Write();
+               writer->Print(std::cout);
+               writer->Delete();
+       }
+
+
+       std::cout << "Saving Ok!" << std::endl;
+
+       InvokeEvent(OBS_POST_WRITER_1);
+}
+void PolyDataWriterPlus::bbUserSetDefaultValues()
+{
+
+//  SET HERE THE DEFAULT INPUT/OUTPUT VALUES OF YOUR BOX
+//    Here we initialize the input 'In' to 0
+    bbSetInputIn(NULL);
+       bbSetInputIn2(NULL);
+       bbSetInputInPrePersistObs1(NULL);
+       bbSetInputInPostPersistObs1(NULL);
+       std::string nada = "";
+       std::string prefixDefault = "Data";
+       bbSetInputInPath(nada);
+       bbSetInputInFilePrefix(prefixDefault);
+
+}
+void PolyDataWriterPlus::bbUserInitializeProcessing()
+{
+
+//  THE INITIALIZATION METHOD BODY :
+//    Here does nothing
+//    but this is where you should allocate the internal/output pointers
+//    if any
+
+
+}
+void PolyDataWriterPlus::bbUserFinalizeProcessing()
+{
+
+//  THE FINALIZATION METHOD BODY :
+//    Here does nothing
+//    but this is where you should desallocate the internal/output pointers
+//    if any
+       RemoveAllObservers();
+
+       if (bbGetInputInPrePersistObs1() != NULL && bbGetInputInPrePersistObs1()->GetReferenceCount() > 0)
+               bbGetInputInPrePersistObs1()->SetReferenceCount(bbGetInputInPrePersistObs1()->GetReferenceCount()-1);
+       if (bbGetInputInPostPersistObs1() != NULL)
+               bbGetInputInPostPersistObs1()->SetReferenceCount(bbGetInputInPostPersistObs1()->GetReferenceCount()-1);
+}
+}
+// EO namespace bbvtk
+
+