]> Creatis software - bbtk.git/blob - packages/vtk/src/bbvtkPolyDataWriterPlus.cxx
warning: NULL used in arithmetic
[bbtk.git] / packages / vtk / src / bbvtkPolyDataWriterPlus.cxx
1 #include "bbvtkPolyDataWriterPlus.h"
2 #include "bbvtkPackage.h"
3 namespace bbvtk
4 {
5
6 BBTK_ADD_BLACK_BOX_TO_PACKAGE(vtk,PolyDataWriterPlus)
7 BBTK_BLACK_BOX_IMPLEMENTATION(PolyDataWriterPlus,bbtk::AtomicBlackBox);
8 void PolyDataWriterPlus::Process()
9 {
10         std::cout << "[" << this << "]" << "PolyDataWriterPlus::Process()..." << std::endl;
11         //Review the observers...
12
13         if (!HasObserver(OBS_PRE_WRITER_1) && bbGetInputInPrePersistObs1() != NULL)
14                 AddObserver(OBS_PRE_WRITER_1, bbGetInputInPrePersistObs1());
15  // warning: NULL used in arithmetic // JPR
16         if (!HasObserver(OBS_POST_WRITER_1) == NULL && bbGetInputInPostPersistObs1() != NULL)
17                 AddObserver(OBS_POST_WRITER_1, bbGetInputInPostPersistObs1());
18
19         InvokeEvent(OBS_PRE_WRITER_1);
20
21         if (bbGetInputInPath().size()==0)
22         {
23                 std::cout << "Set InPath." << std::endl;
24                 return;
25         }
26
27         vtkPolyData* cosa;
28
29         if (bbGetInputIn()==NULL)
30         {
31                 if (bbGetInputIn2()==NULL)
32                 {
33                         std::cout << "Set In." << std::endl;
34                         return;
35                 }
36                 else
37                 {
38                         vtkProp3D* actor = bbGetInputIn2();
39                         vtkPolyDataMapper* mapper = ((vtkPolyDataMapper*)((vtkActor*)actor)->GetMapper());
40                         cosa = mapper->GetInput();
41                 }
42         }
43         else
44         {
45                 cosa = bbGetInputIn();
46         }
47
48         std::string nuevo_nombre = guessName(bbGetInputInPath());
49
50
51         vtkPolyData* entrada = cosa;
52         std::cout << "Before writing" << std::endl;
53         entrada->Print(std::cout);
54
55         std::vector< std::string > partes = StringSplit(nuevo_nombre, ".");
56         std::string extension = partes.at(partes.size()-1);
57
58         std::cout << "Extension (vtk, vtp o stl?) => " << extension << std::endl;
59
60
61
62         vtkDataSetSurfaceFilter* surfaceFilter = vtkDataSetSurfaceFilter::New();
63         surfaceFilter->SetInput(entrada);
64         surfaceFilter->Update();
65         //vtkPolyData* polydata = surfaceFilter->GetOutput();
66         entrada = surfaceFilter->GetOutput();
67
68         if (extension.compare("vtk") == 0)
69         {
70                 vtkPolyDataWriter* writer = vtkPolyDataWriter::New();
71                 writer->SetInput(entrada);
72                 writer->SetFileName(nuevo_nombre.data());
73                 writer->Write();
74                 writer->Delete();
75         }
76
77         if (extension.compare("vtp") == 0)
78         {
79                 vtkXMLPolyDataWriter* writer = vtkXMLPolyDataWriter::New();
80                 writer->SetFileName ( nuevo_nombre.data() );
81                 writer->SetInput ( entrada );
82                 writer->Write();
83                 writer->Delete();
84         }
85
86         if (extension.compare("stl") == 0)
87         {
88                 vtkSTLWriter* writer = vtkSTLWriter::New();
89                 writer->SetFileName ( nuevo_nombre.data() );
90                 writer->SetInput ( entrada );
91                 writer->Write();
92                 writer->Print(std::cout);
93                 writer->Delete();
94         }
95
96
97         std::cout << "Saving Ok!" << std::endl;
98
99         InvokeEvent(OBS_POST_WRITER_1);
100 }
101 void PolyDataWriterPlus::bbUserSetDefaultValues()
102 {
103
104 //  SET HERE THE DEFAULT INPUT/OUTPUT VALUES OF YOUR BOX
105 //    Here we initialize the input 'In' to 0
106     bbSetInputIn(NULL);
107         bbSetInputIn2(NULL);
108         bbSetInputInPrePersistObs1(NULL);
109         bbSetInputInPostPersistObs1(NULL);
110         std::string nada = "";
111         std::string prefixDefault = "Data";
112         bbSetInputInPath(nada);
113         bbSetInputInFilePrefix(prefixDefault);
114
115 }
116 void PolyDataWriterPlus::bbUserInitializeProcessing()
117 {
118
119 //  THE INITIALIZATION METHOD BODY :
120 //    Here does nothing
121 //    but this is where you should allocate the internal/output pointers
122 //    if any
123
124
125 }
126 void PolyDataWriterPlus::bbUserFinalizeProcessing()
127 {
128
129 //  THE FINALIZATION METHOD BODY :
130 //    Here does nothing
131 //    but this is where you should desallocate the internal/output pointers
132 //    if any
133         RemoveAllObservers();
134
135         if (bbGetInputInPrePersistObs1() != NULL && bbGetInputInPrePersistObs1()->GetReferenceCount() > 0)
136                 bbGetInputInPrePersistObs1()->SetReferenceCount(bbGetInputInPrePersistObs1()->GetReferenceCount()-1);
137         if (bbGetInputInPostPersistObs1() != NULL)
138                 bbGetInputInPostPersistObs1()->SetReferenceCount(bbGetInputInPostPersistObs1()->GetReferenceCount()-1);
139 }
140 }
141 // EO namespace bbvtk
142
143