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