]> Creatis software - creaMaracasVisu.git/blob - lib/Kernel/VTKObjects/SurfaceRenderer/wxMaracasSurfaceRenderingManagerData.cxx
1faca334ff3ff0f0de4c59db40e4a7caa5633f59
[creaMaracasVisu.git] / lib / Kernel / VTKObjects / SurfaceRenderer / wxMaracasSurfaceRenderingManagerData.cxx
1
2 #include "wxMaracasSurfaceRenderingManagerData.h"
3
4 #include <vtkSmartPointer.h>
5 #include "vtkSTLWriter.h"
6 #include "vtkPLYWriter.h"
7 #include "vtkPolyDataWriter.h"
8 #include "surfacerenderingimagestencilexport.h"
9 #include "vtkMetaImageWriter.h"
10 #include "vtkPolyDataReader.h"
11 #include "vtkPLYReader.h"
12 #include "vtkSmartPointer.h"
13
14 /********************************************************************************************
15 ** Start of data viewmanagerData
16 *********************************************************************************************/
17
18 wxMaracasSurfaceRenderingManagerData::wxMaracasSurfaceRenderingManagerData(vtkProp3D* prop3Dvect, std::string dataname, vtkRenderWindowInteractor*  interactor){
19
20         _dataMapper = 0;
21         _prop3D = prop3Dvect;   
22         _dataname = dataname;   
23         _boxWidgetS1=NULL;
24         
25         initializeBoxWidget(interactor);
26         
27
28         
29
30         /*_boxWidgetS1->GetPlanes( this->GetVtkClipping3DDataViewer()->GetTissuePlanes(0) );
31         _boxWidgetS1->GetPlanes( this->GetVtkClipping3DDataViewer()->GetTissuePlanes(1) );
32         _boxWidgetS1->GetPlanes( this->GetVtkClipping3DDataViewer()->GetTissuePlanes(2) );
33         _boxWidgetS1->GetPlanes( this->GetVtkClipping3DDataViewer()->GetTissuePlanes(3) );*/
34 }
35
36 wxMaracasSurfaceRenderingManagerData::wxMaracasSurfaceRenderingManagerData(string filename, vtkRenderWindowInteractor*  interactor){
37
38     _prop3D = getProp3D(filename);
39     _dataname = filename;
40     _boxWidgetS1=NULL;
41
42     initializeBoxWidget(interactor);
43 }
44
45 vtkProp3D* wxMaracasSurfaceRenderingManagerData::getProp3D(std::string filename){
46
47     if(filename.compare("")!= 0){
48
49         vtkSmartPointer<vtkPolyData> polydata = vtkSmartPointer<vtkPolyData>::New();
50         std::string ext = filename.substr(filename.find_last_of("."), 4);
51         if(ext.compare(STL)==0){
52             vtkSmartPointer<vtkSTLReader> STLReader=vtkSmartPointer<vtkSTLReader>::New();
53             STLReader->SetFileName(filename.c_str());
54             STLReader->Update();
55             polydata->DeepCopy(STLReader->GetOutput());
56
57         }else if(ext.compare(PLY)==0){
58             vtkSmartPointer<vtkPLYReader> plyreader =vtkSmartPointer<vtkPLYReader>::New();
59             plyreader->SetFileName(filename.c_str());
60             plyreader->Update();
61             polydata->DeepCopy(plyreader->GetOutput());
62         }else if(ext.compare(VTK)==0){
63             vtkSmartPointer<vtkPolyDataReader> polyreader =vtkSmartPointer<vtkPolyDataReader>::New();
64             polyreader->SetFileName(filename.c_str());
65             polyreader->Update();
66             polydata->DeepCopy(polyreader->GetOutput());
67         }
68
69         _dataMapper = vtkPolyDataMapper::New();
70         _dataMapper->SetInput(polydata);
71
72         vtkActor* dataActor = vtkActor::New();
73         dataActor->SetMapper(_dataMapper);
74         dataActor->GetProperty()->SetOpacity(1);
75         return dataActor;
76     }
77     return NULL;
78 }
79
80 wxMaracasSurfaceRenderingManagerData::~wxMaracasSurfaceRenderingManagerData(){
81         
82         _prop3D->Delete();      
83         if (_boxWidgetS1!=NULL)                                  { _boxWidgetS1         -> Delete();                                    }
84 }
85
86 void wxMaracasSurfaceRenderingManagerData::initializeBoxWidget(vtkRenderWindowInteractor*  interactor){
87         if(interactor!= NULL){
88         
89         }
90 }
91
92 /**
93 **      Adds a prop3D to the world of the application
94 **/
95 void wxMaracasSurfaceRenderingManagerData::setProp3D(vtkProp3D* prop3D){
96         _prop3D = prop3D;
97 }
98
99 void wxMaracasSurfaceRenderingManagerData::addRemoveSurfaceBox(bool visible)
100 {
101         if(_boxWidgetS1){
102                 if (visible==true){
103                         _boxWidgetS1->On();
104                 } else {
105                         _boxWidgetS1->Off();
106                 }
107         }
108 }
109 /**
110 **      Changes the opacity in a prop3D
111 **/
112 void wxMaracasSurfaceRenderingManagerData::changeOpacity(int value){
113         std::cout<<"chage op"<<value<<std::endl;
114         vtkActor* actor = (vtkActor*)this->_prop3D;     
115         actor->GetProperty()->SetOpacity((double)value/100.0);
116
117         
118
119 }
120 void wxMaracasSurfaceRenderingManagerData::changeColor(double red, double green, double blue){
121         std::cout<<"chage col"<<red<<green<<blue<<std::endl;
122     vtkActor* actor = (vtkActor*)this->_prop3D; 
123         actor->GetProperty()->SetColor(red,green,blue); 
124 }
125 /**
126 **      Check if the variables are setted correctly
127 **/
128 void wxMaracasSurfaceRenderingManagerData::checkInvariant(){
129
130 }
131 /**
132 **      get the prop3D 
133 **/
134 vtkProp3D* wxMaracasSurfaceRenderingManagerData::getProp3D(){
135         return this->_prop3D;
136 }
137 /**
138 **      return the id from the daat
139 **/
140 int wxMaracasSurfaceRenderingManagerData::getId(){
141         return _id;
142 }
143 /**
144 **      set data id
145 **/
146 void wxMaracasSurfaceRenderingManagerData::setId(int propid){
147         _id = propid;
148 }
149
150 /**
151 **      Get the filanme
152 **/
153 std::string wxMaracasSurfaceRenderingManagerData::getDataname(){
154         return _dataname;
155 }
156 /**
157 ** Set the filanme
158 **/
159 void wxMaracasSurfaceRenderingManagerData::setDataname(std::string dataname){
160         _dataname = dataname;
161 }
162
163
164
165 void wxMaracasSurfaceRenderingManagerData::saveProp3DSTL(const char* filename){
166     if(_dataMapper){
167
168         std::string filena(filename);
169         std::string ext = filena.substr(filena.find_last_of("."), 4);
170         if(ext.compare(PLY) == 0){
171             vtkSmartPointer<vtkPLYWriter> plywriter =
172             vtkSmartPointer<vtkPLYWriter>::New();
173               plywriter->SetFileName(filename);
174               plywriter->SetInput(_dataMapper->GetInput());
175               plywriter->Write();
176         }else if(ext.compare(STL) == 0){
177             vtkSmartPointer<vtkSTLWriter> stlWriter =
178             vtkSmartPointer<vtkSTLWriter>::New();
179               stlWriter->SetFileName(filename);
180               stlWriter->SetInput(_dataMapper->GetInput());
181               stlWriter->SetFileTypeToBinary();
182               stlWriter->Write();
183         }else if(ext.compare(VTK) == 0){
184             vtkSmartPointer<vtkPolyDataWriter> polydataWriter =
185             vtkSmartPointer<vtkPolyDataWriter>::New();
186               polydataWriter->SetFileName(filename);
187               polydataWriter->SetInput(_dataMapper->GetInput());
188               polydataWriter->SetFileTypeToBinary();
189               polydataWriter->Write();
190         }else{
191             cout<<"unsupported format"<<endl;
192         }
193     }
194 }
195
196 void wxMaracasSurfaceRenderingManagerData::enableBoxWidget(bool enable){
197
198 }
199
200 void wxMaracasSurfaceRenderingManagerData::exportImageStencil(const char* filename){
201     if(_dataMapper){
202         vtkSmartPointer< SurfaceRenderingImageStencilExport> stencilexport = vtkSmartPointer< SurfaceRenderingImageStencilExport >::New();
203         stencilexport->SetInput( _dataMapper->GetInput());
204         stencilexport->Update();
205         vtkImageData* imgstencil = stencilexport->GetOutput();
206
207         vtkSmartPointer<vtkMetaImageWriter> metawriter = vtkSmartPointer<vtkMetaImageWriter>::New();
208         metawriter->SetFileName(filename);
209         metawriter->SetInput(imgstencil);
210         metawriter->Write();
211     }else{
212         cout<<"No poly data set to data mapper."<<endl;
213     }
214
215 }
216
217
218
219