]> Creatis software - bbtk.git/blob - packages/vtk/src/bbvtkVecIsoSurfaceExtractor.cxx
no message
[bbtk.git] / packages / vtk / src / bbvtkVecIsoSurfaceExtractor.cxx
1 #include "bbvtkVecIsoSurfaceExtractor.h"
2 #include "bbvtkPackage.h"
3
4 #include "vtkProperty.h"
5 #include "vtkLinearTransform.h"
6
7 namespace bbvtk
8 {
9
10 BBTK_ADD_BLACK_BOX_TO_PACKAGE(vtk,VecIsoSurfaceExtractor)
11 BBTK_BLACK_BOX_IMPLEMENTATION(VecIsoSurfaceExtractor,bbtk::AtomicBlackBox);
12         
13         //-----------------------------------------------------------   
14         void VecIsoSurfaceExtractor::bbUserSetDefaultValues()
15         {
16 //EED std::cout << "================================VecIsoSurfaceExtractor::bbUserSetDefaultValues()" << std::endl;
17                 std::vector<double> colour;
18                 // 1- red
19                 colour.push_back(1.0);
20                 colour.push_back(0.0);
21                 colour.push_back(0.0);
22                 // 2- blue
23                 colour.push_back(0.0);
24                 colour.push_back(0.0);
25                 colour.push_back(1.0);
26                 // 3- yellow
27                 colour.push_back(1.0);
28                 colour.push_back(1.0);
29                 colour.push_back(0.0);
30                 // 4- green
31                 colour.push_back(0.0);
32                 colour.push_back(1.0);
33                 colour.push_back(0.0);
34                 // 5- 
35                 colour.push_back(0.0);
36                 colour.push_back(1.0);
37                 colour.push_back(1.0);
38                 
39                 // 6- 
40                 colour.push_back(0.5);
41                 colour.push_back(0.5);
42                 colour.push_back(0.5);
43                 
44                 bbSetInputColour(colour);
45                 bbSetInputTransform(NULL);
46                 bbSetInputOpacity(1);
47                 
48                 bbSetInputRenderer(NULL);
49                 bbSetInputIsovalue(128);
50                 bbSetInputOpacity(1);
51         }
52         
53         //-----------------------------------------------------------   
54         void VecIsoSurfaceExtractor::bbUserInitializeProcessing() 
55         
56         { 
57                 //    bbSetInputIn(NULL);
58                 //    bbSetInputInVtkObject(NULL);
59 //EED std::cout << "================================VecIsoSurfaceExtractor::bbUserInitializeProcessing()" << std::endl; 
60         }
61         
62         //-----------------------------------------------------------   
63         void VecIsoSurfaceExtractor::bbUserFinalizeProcessing()
64         {
65 //EED std::cout << "================================VecIsoSurfaceExtractor::bbUserFinalizeProcessing()" << std::endl;
66                 int i,size = VecMarchingcubes.size();
67                 for (i=0;i<size;i++)
68                 {
69                         VecMarchingcubes[i]->Delete();
70                         VecPolydatamapper[i]->Delete();
71                         VecVtkactor[i]->Delete();
72                 }
73                 VecMarchingcubes.clear();
74                 VecPolydatamapper.clear();
75                 VecVtkactor.clear();
76         }
77         
78         //-----------------------------------------------------------   
79         void VecIsoSurfaceExtractor::Process()
80         {
81 //EED std::cout <<"================================VecIsoSurfaceExtractor::Process()" << std::endl;
82                 double r,g,b;
83                 vtkMarchingCubes  *marchingcubes;
84                 vtkPolyDataMapper *polydatamapper;
85                 vtkActor          *vtkactor;
86
87                  int i,size;
88
89                 size = VecVtkactor.size();
90                 for( i=0 ; i<size ; i++)
91                 {
92                         if (bbGetInputRenderer()!=NULL )
93                         {
94                                 bbGetInputRenderer()->RemoveActor( VecVtkactor[i] );
95                                 VecMarchingcubes[i]->Delete();
96                                 VecPolydatamapper[i]->Delete();
97                                 VecVtkactor[i]->Delete();
98                         }
99                 }
100                 VecMarchingcubes.clear();
101                 VecPolydatamapper.clear();
102                 VecVtkactor.clear();
103
104                 size = bbGetInputIn().size();
105                 for( i=0 ; i<size ; i++){
106                         marchingcubes  = vtkMarchingCubes::New();
107                         polydatamapper = vtkPolyDataMapper::New();
108                         vtkactor       = vtkActor::New();
109
110                         polydatamapper->SetInput(marchingcubes->GetOutput());
111                         vtkactor->SetMapper(polydatamapper);
112
113                         polydatamapper->ScalarVisibilityOff();
114                         polydatamapper->ImmediateModeRenderingOn();
115
116                         VecMarchingcubes.push_back(marchingcubes);
117                         VecPolydatamapper.push_back(polydatamapper);
118                         VecVtkactor.push_back(vtkactor);
119                 } // for i
120
121                 for( i=0 ; i<size ; i++){
122                         // Visualisation - result volume
123                         marchingcubes=VecMarchingcubes[i];
124                         vtkactor=(vtkActor*)VecVtkactor[i];
125
126                         marchingcubes->SetInput( bbGetInputIn()[i] );
127                         marchingcubes->SetValue(0, bbGetInputIsovalue() );
128                         marchingcubes->Update();
129                          
130                         if ( (i*3+1)<(int)(bbGetInputColour().size()) ){
131                                 r = bbGetInputColour()[0+i*3];
132                                 g = bbGetInputColour()[1+i*3]; 
133                                 b = bbGetInputColour()[2+i*3];
134                         } else {
135                                 r = bbGetInputColour()[0];
136                                 g = bbGetInputColour()[1]; 
137                                 b = bbGetInputColour()[2];
138                         }
139                         vtkactor->GetProperty()->SetColor( r,g,b );
140  
141                         vtkactor->GetProperty()->SetOpacity( bbGetInputOpacity() );
142                         
143                         if ( bbGetInputTransform()!=NULL )
144                         {
145                                 vtkactor->SetUserTransform( bbGetInputTransform() );
146                         }
147
148                         // Interface Update
149                         if (bbGetInputRenderer()!=NULL )
150                         {
151                                 bbGetInputRenderer()->AddActor( vtkactor );
152                         }
153                 } // for i
154
155                  bbSetOutputOut( VecVtkactor );
156         }
157 }
158 // EO namespace bbvtk