]> Creatis software - creaMaracasVisu.git/blob - bbtk/src/bbmaracasvisuAxeVolume.cxx
no message
[creaMaracasVisu.git] / bbtk / src / bbmaracasvisuAxeVolume.cxx
1 #include "bbmaracasvisuAxeVolume.h"
2 #include "bbcreaMaracasVisuPackage.h"
3 namespace bbcreaMaracasVisu
4 {
5
6 BBTK_ADD_BLACK_BOX_TO_PACKAGE(creaMaracasVisu,AxeVolume)
7 BBTK_BLACK_BOX_IMPLEMENTATION(AxeVolume,bbtk::AtomicBlackBox);
8 void AxeVolume::Process()
9 {
10         if ( mimage!=NULL )
11         {
12                 mimage->Delete();
13         }
14
15         int ext[6];
16         bbGetInputIn()->GetExtent(ext);
17         int sizeX=ext[1]-ext[0];
18         int sizeY=ext[3]-ext[2];
19         int sizeZ=ext[5]-ext[4];
20
21         mimage = vtkImageData::New(); 
22         mimage->SetDimensions(sizeX,sizeY,sizeZ);
23         mimage->SetOrigin(0,0,0);
24         mimage->SetExtent( 0 , sizeX-1 , 0 , sizeY-1 , 0, sizeZ-1 );
25         mimage->SetWholeExtent( 0 , sizeX-1 , 0 , sizeY-1 , 0, sizeZ-1 );
26         mimage->SetScalarTypeToUnsignedShort();
27         mimage->AllocateScalars();
28
29
30         int i,j,k;
31     int sizeLstPointR = bbGetInputlstPointR().size();
32         int iAxe,sizeAxe=bbGetInputlstPointX().size();
33         double rx,ry,rz;
34         double r,rr;
35         unsigned short *p;
36         int sizeImage = sizeX*sizeY*sizeZ;
37         double px,py,pz,px1,py1,pz1,px2,py2,pz2;
38
39         // Clean image
40         p = (unsigned short*)mimage->GetScalarPointer (0, 0, 0);
41         for ( i=0 ; i<sizeImage ; i++)
42         {
43                 *p = 0;
44                 p++;
45         }
46
47         for (iAxe=0 ; iAxe<sizeAxe; iAxe++)
48          {
49                 if (sizeLstPointR<iAxe)
50                 {
51                         r = bbGetInputlstPointR()[ bbGetInputlstPointR().size()-1 ];
52                 } else {
53                         r = bbGetInputlstPointR()[ iAxe ];
54                 }
55                 px = bbGetInputlstPointX()[iAxe];
56                 py = bbGetInputlstPointY()[iAxe];
57                 pz = bbGetInputlstPointZ()[iAxe];
58                  printf("AxeVolume::Process %d ->  %f, %f, %f\n",iAxe, px,py,pz);
59                 px1 = px - r;
60                 py1 = py - r;
61                 pz1 = pz - r;
62                 px2 = px + r;
63                 py2 = py + r;
64                 pz2 = pz + r;
65
66                 for ( i=px1 ; i<=px2 ; i++ ) 
67                 {
68                         for ( j=py1 ; j<py2 ; j++ ) 
69                         {
70                                 for ( k=pz1 ; k<pz2 ; k++ ) 
71                                 {
72                                         if ( (i>=0) && (i<sizeX) && (j>=0) && (j<sizeY) &&(k>=0) && (k<sizeZ) ){
73                                                 rx      = i - px;
74                                                 ry      = j - py;
75                                                 rz      = k - pz;
76                                                 rr      = rx*rx + ry*ry + rz*rz;
77                                                 if ( rx*rx + ry*ry + rz*rz <= r*r )
78                                                 {
79                                                         p = (unsigned short*)mimage->GetScalarPointer (i, j, k);
80                                                         *p=255;
81                                                 } 
82                                         } // inside point
83                                 } //for k
84                         } //for j
85                 } //for i
86         } // for iAxe
87     bbSetOutputOut( mimage ); 
88 }
89
90
91         //-----------------------------------------------------------------     
92         void AxeVolume::bbUserSetDefaultValues()
93         {
94                 mimage=NULL;
95         }
96         
97         //-----------------------------------------------------------------     
98         void AxeVolume::bbUserInitializeProcessing()
99         {
100         }
101         
102         //-----------------------------------------------------------------     
103         void AxeVolume::bbUserFinalizeProcessing()
104         {
105         }
106         
107         //-----------------------------------------------------------------     
108         
109 }
110 // EO namespace bbcreaMaracasVisu
111
112