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