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