]> Creatis software - creaMaracasVisu.git/blob - bbtk/src/bbmaracasvisuDrawAxisTree3D.cxx
no message
[creaMaracasVisu.git] / bbtk / src / bbmaracasvisuDrawAxisTree3D.cxx
1 #include "bbmaracasvisuDrawAxisTree3D.h"
2 #include "bbcreaMaracasVisuPackage.h"
3 #include "vtkLinearTransform.h"
4
5 namespace bbcreaMaracasVisu
6 {
7
8 BBTK_ADD_BLACK_BOX_TO_PACKAGE(creaMaracasVisu,DrawAxisTree3D)
9 BBTK_BLACK_BOX_IMPLEMENTATION(DrawAxisTree3D,bbtk::AtomicBlackBox);
10
11
12
13 void DrawAxisTree3D::DrawOneAxis(int iGeneral,int numPoints, int iAxis)
14 {
15         vtkPolyData                     *polydata               = vtkPolyData::New( );
16         vtkPolyDataMapper       *polydatamapper = vtkPolyDataMapper::New();
17         vtkActor                        *vtkactor               = vtkActor::New();
18
19         polydatamapper->SetInput(polydata);
20         vtkactor->SetMapper(polydatamapper);
21
22         vecVtkPolyData.push_back( polydata );
23         vecVtkPolyDataMaper.push_back( polydatamapper );
24         vecVtkActors.push_back( vtkactor );
25
26 //      vtkImageData* img = bbGetInputImage();  
27         unsigned int i,size;
28         double spc[3];  
29 //      img->GetSpacing(spc);
30         spc[0]=1;
31         spc[1]=1;
32         spc[2]=1;
33
34         if(!bbGetInputlstPointX().empty()){
35                 vtkPoints* allPoints            = vtkPoints::New( );
36                 vtkCellArray* allTopology       = vtkCellArray::New( );
37                 allTopology->InsertNextCell( numPoints );
38
39                 size=iGeneral+numPoints;
40                 for (i=iGeneral;i<size;i++)
41                 {
42                         //multiplicar ver parametros spacing, en maracas cuando se toca la imagen y se ve dycom
43                         //hay parĀ·metro dycom, vtkImagedata valor spacing y esos datos hay que multiplicar al polydata
44                         allPoints->InsertNextPoint( bbGetInputlstPointX()[i]*spc[0],  
45                                                                                 bbGetInputlstPointY()[i]*spc[1], 
46                                                                                 bbGetInputlstPointZ()[i]*spc[2] );
47 //                      printf("DrawAxisTree3D::DrawOneAxis point  %d -> %f, %f, %f \n", i,  bbGetInputlstPointX()[i], bbGetInputlstPointY()[i], bbGetInputlstPointZ()[i] );
48                         allTopology->InsertCellPoint( i-iGeneral );
49                 } // rof
50                 polydata->SetPoints( allPoints );
51                 polydata->SetLines( allTopology );
52                 allPoints->Delete();
53                 allTopology->Delete();  
54         }
55
56         // color
57         double r,g,b;
58
59         if ( (iAxis*3+1) < (int)(bbGetInputColour().size()) )
60         {
61                         r = bbGetInputColour()[0+iAxis*3];
62                         g = bbGetInputColour()[1+iAxis*3]; 
63                         b = bbGetInputColour()[2+iAxis*3];
64         } else {
65                         r = (rand() % 100) / 100.0;
66                         g = (rand() % 100) / 100.0;
67                         b = (rand() % 100) / 100.0;
68         }
69
70         vtkactor->GetProperty()->SetColor( r,g,b );
71         vtkactor->GetProperty()->SetLineWidth( 0.5 );
72
73         if ( bbGetInputTransform()!=NULL )
74         {
75                 vtkactor->SetUserTransform( bbGetInputTransform() );
76         }
77
78      // Interface Update
79      if  (bbGetInputRenderer()!=NULL )
80      {
81             bbGetInputRenderer()->AddActor( vtkactor );
82      }
83 }
84
85
86 void DrawAxisTree3D::Process()
87 {
88         printf("EED DrawAxisTree3D::Process start \n");
89
90          int iActor,sizeActors = vecVtkActors.size();
91          for (iActor=0 ; iActor<sizeActors; iActor++)
92          {
93                 if (bbGetInputRenderer()!=NULL )
94                 {
95                         bbGetInputRenderer()->RemoveActor( vecVtkActors[iActor] );
96                         vecVtkPolyData[iActor]->Delete();
97                         vecVtkPolyDataMaper[iActor]->Delete();
98                         vecVtkActors[iActor]->Delete();
99                 }
100          }
101      vecVtkPolyData.clear();
102      vecVtkPolyDataMaper.clear();
103          vecVtkActors.clear();
104
105
106         int iGeneral=0;
107         int iAxis,sizeLstAxis=bbGetInputlstIndexs().size();
108         int numPoints;
109         for ( iAxis=0 ; iAxis<sizeLstAxis ; iAxis++)
110         {
111                 numPoints = bbGetInputlstIndexs()[iAxis];
112                 DrawOneAxis(iGeneral,numPoints,iAxis);
113                 iGeneral = iGeneral+numPoints;
114                 
115 //              if ((iAxis % 1)==0)
116 //              {
117 //                      printf("EED  DrawAxisTree3D::Process  %d/%d\n", iAxis,sizeLstAxis );
118 //              }
119                 
120         }
121
122
123         bbSetOutputOutAxis( vecVtkActors[ bbGetInputiAxis() ] );
124         printf("EED DrawAxisTree3D::Process end \n");
125
126 }
127
128 void DrawAxisTree3D::bbUserSetDefaultValues()
129
130          bbSetInputiAxis(0);
131      std::vector<double> colour;
132          // 1- red
133      colour.push_back(1.0);
134      colour.push_back(0.0);
135      colour.push_back(0.0);
136          // 2- blue
137      colour.push_back(0.0);
138      colour.push_back(0.0);
139      colour.push_back(1.0);
140          // 3- yellow
141      colour.push_back(1.0);
142      colour.push_back(1.0);
143      colour.push_back(0.0);
144          // 4- green
145      colour.push_back(0.0);
146      colour.push_back(1.0);
147      colour.push_back(0.0);
148          // 5- 
149      colour.push_back(0.0);
150      colour.push_back(1.0);
151      colour.push_back(1.0);
152
153          // 6- 
154      colour.push_back(0.5);
155      colour.push_back(0.5);
156      colour.push_back(0.5);
157
158      bbSetInputColour(colour);
159
160 }
161
162         
163         //-----------------------------------------------------------------     
164         void DrawAxisTree3D::bbUserInitializeProcessing()
165         {
166         }
167         
168         //-----------------------------------------------------------------     
169         void DrawAxisTree3D::bbUserFinalizeProcessing()
170         {
171         }
172         
173         //-----------------------------------------------------------------     
174
175 }
176 // EO namespace bbcreaMaracasVisu
177
178