1 #include "bbvtkPolyDataWriterPlus.h"
2 #include "bbvtkPackage.h"
6 BBTK_ADD_BLACK_BOX_TO_PACKAGE(vtk,PolyDataWriterPlus)
7 BBTK_BLACK_BOX_IMPLEMENTATION(PolyDataWriterPlus,bbtk::AtomicBlackBox);
8 void PolyDataWriterPlus::Process()
10 std::cout << "[" << this << "]" << "PolyDataWriterPlus::Process()..." << std::endl;
11 //Review the observers...
13 if (!HasObserver(OBS_PRE_WRITER_1) && bbGetInputInPrePersistObs1() != NULL)
14 AddObserver(OBS_PRE_WRITER_1, bbGetInputInPrePersistObs1());
16 if (!HasObserver(OBS_POST_WRITER_1) == NULL && bbGetInputInPostPersistObs1() != NULL)
17 AddObserver(OBS_POST_WRITER_1, bbGetInputInPostPersistObs1());
19 InvokeEvent(OBS_PRE_WRITER_1);
21 if (bbGetInputInPath().size()==0)
23 std::cout << "Set InPath." << std::endl;
29 if (bbGetInputIn()==NULL)
31 if (bbGetInputIn2()==NULL)
33 std::cout << "Set In." << std::endl;
38 vtkProp3D* actor = bbGetInputIn2();
39 vtkPolyDataMapper* mapper = ((vtkPolyDataMapper*)((vtkActor*)actor)->GetMapper());
40 cosa = mapper->GetInput();
45 cosa = bbGetInputIn();
48 std::string nuevo_nombre = guessName(bbGetInputInPath());
51 vtkPolyData* entrada = cosa;
52 std::cout << "Before writing" << std::endl;
53 entrada->Print(std::cout);
55 std::vector< std::string > partes = StringSplit(nuevo_nombre, ".");
56 std::string extension = partes.at(partes.size()-1);
58 std::cout << "Extension (vtk, vtp o stl?) => " << extension << std::endl;
62 vtkDataSetSurfaceFilter* surfaceFilter = vtkDataSetSurfaceFilter::New();
63 surfaceFilter->SetInput(entrada);
64 surfaceFilter->Update();
65 //vtkPolyData* polydata = surfaceFilter->GetOutput();
66 entrada = surfaceFilter->GetOutput();
68 if (extension.compare("vtk") == 0)
70 vtkPolyDataWriter* writer = vtkPolyDataWriter::New();
71 writer->SetInput(entrada);
72 writer->SetFileName(nuevo_nombre.data());
77 if (extension.compare("vtp") == 0)
79 vtkXMLPolyDataWriter* writer = vtkXMLPolyDataWriter::New();
80 writer->SetFileName ( nuevo_nombre.data() );
81 writer->SetInput ( entrada );
86 if (extension.compare("stl") == 0)
88 vtkSTLWriter* writer = vtkSTLWriter::New();
89 writer->SetFileName ( nuevo_nombre.data() );
90 writer->SetInput ( entrada );
92 writer->Print(std::cout);
97 std::cout << "Saving Ok!" << std::endl;
99 InvokeEvent(OBS_POST_WRITER_1);
101 void PolyDataWriterPlus::bbUserSetDefaultValues()
104 // SET HERE THE DEFAULT INPUT/OUTPUT VALUES OF YOUR BOX
105 // Here we initialize the input 'In' to 0
108 bbSetInputInPrePersistObs1(NULL);
109 bbSetInputInPostPersistObs1(NULL);
110 std::string nada = "";
111 std::string prefixDefault = "Data";
112 bbSetInputInPath(nada);
113 bbSetInputInFilePrefix(prefixDefault);
116 void PolyDataWriterPlus::bbUserInitializeProcessing()
119 // THE INITIALIZATION METHOD BODY :
121 // but this is where you should allocate the internal/output pointers
126 void PolyDataWriterPlus::bbUserFinalizeProcessing()
129 // THE FINALIZATION METHOD BODY :
131 // but this is where you should desallocate the internal/output pointers
133 RemoveAllObservers();
135 if (bbGetInputInPrePersistObs1() != NULL && bbGetInputInPrePersistObs1()->GetReferenceCount() > 0)
136 bbGetInputInPrePersistObs1()->SetReferenceCount(bbGetInputInPrePersistObs1()->GetReferenceCount()-1);
137 if (bbGetInputInPostPersistObs1() != NULL)
138 bbGetInputInPostPersistObs1()->SetReferenceCount(bbGetInputInPostPersistObs1()->GetReferenceCount()-1);
141 // EO namespace bbvtk