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