]> 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
11         printf("EED AxeVolume::Process start \n");
12
13         if ( mimage!=NULL )
14         {
15                 mimage->Delete();
16         }
17
18         int ext[6];
19         bbGetInputIn()->GetExtent(ext);
20         int sizeX=ext[1]-ext[0];
21         int sizeY=ext[3]-ext[2];
22         int sizeZ=ext[5]-ext[4];
23
24     double spc[3];
25         bbGetInputIn()->GetSpacing(spc);
26     double invSpc[3];
27     invSpc[0] = 1/spc[0];
28     invSpc[1] = 1/spc[1];
29     invSpc[2] = 1/spc[2];
30
31         mimage = vtkImageData::New();
32         mimage->SetDimensions(sizeX,sizeY,sizeZ);
33         mimage->SetOrigin(0,0,0);
34         mimage->SetExtent( 0 , sizeX-1 , 0 , sizeY-1 , 0, sizeZ-1 );
35         mimage->SetWholeExtent( 0 , sizeX-1 , 0 , sizeY-1 , 0, sizeZ-1 );
36         mimage->SetScalarTypeToUnsignedShort();
37         mimage->SetSpacing(spc);
38         mimage->AllocateScalars();
39
40
41         int i,j,k;
42     int sizeLstPointR = bbGetInputlstPointR().size();
43         int iAxe,sizeAxe=bbGetInputlstPointX().size();
44         double rx,ry,rz;
45         double r,rr;
46         unsigned short *p;
47         int sizeImage = sizeX*sizeY*sizeZ;
48         double px,py,pz,px1,py1,pz1,px2,py2,pz2;
49
50         // Clean image
51         p = (unsigned short*)mimage->GetScalarPointer (0, 0, 0);
52         for ( i=0 ; i<sizeImage ; i++)
53         {
54                 *p = 0;
55                 p++;
56         }
57
58         for (iAxe=0 ; iAxe<sizeAxe; iAxe++)
59          {
60                 if (sizeLstPointR<iAxe)
61                 {
62                         if (bbGetInputlstPointR().size()>=1)
63                         {
64                                 r = bbGetInputlstPointR()[ bbGetInputlstPointR().size()-1 ]    * invSpc[0];
65                         } else {
66                                 r = 1;
67                         }
68                 } else {
69                         r = bbGetInputlstPointR()[ iAxe ]* invSpc[0];
70                 }
71                 px = bbGetInputlstPointX()[iAxe] * invSpc[0];
72                 py = bbGetInputlstPointY()[iAxe] * invSpc[1];
73                 pz = bbGetInputlstPointZ()[iAxe] * invSpc[2];
74                 px1 = px - r;
75                 py1 = py - r;
76                 pz1 = pz - r;
77                 px2 = px + r;
78                 py2 = py + r;
79                 pz2 = pz + r;
80                 rr=r*r;
81
82                 for ( i=px1 ; i<=px2 ; i++ )
83                 {
84                         rx      =       i - px;
85                         rx      =       rx*rx;
86                         for ( j=py1 ; j<py2 ; j++ )
87                         {
88                                 ry      =       j - py;
89                                 ry      =       ry*ry;
90                                 for ( k=pz1 ; k<pz2 ; k++ )
91                                 {
92                                         if ( (i>=0) && (i<sizeX) && (j>=0) && (j<sizeY) &&(k>=0) && (k<sizeZ) ){
93                                                 p = (unsigned short*)mimage->GetScalarPointer (i, j, k);
94                                                 if (*p==0)
95                                                 {
96                                                         rz      =       k - pz;
97                                                         rz      =       rz*rz;
98                                                         if ( rx + ry + rz <= rr )
99                                                         {
100                                                                 *p=255;
101                                                         }
102                                                 } // *p==0
103                                         } // inside point
104                                 } //for k
105                         } //for j
106                 } //for i
107         } // for iAxe
108     bbSetOutputOut( mimage );
109
110         printf("EED AxeVolume::Process end \n");
111
112 }
113
114
115         //-----------------------------------------------------------------
116         void AxeVolume::bbUserSetDefaultValues()
117         {
118                 mimage=NULL;
119         }
120
121         //-----------------------------------------------------------------
122         void AxeVolume::bbUserInitializeProcessing()
123         {
124         }
125
126         //-----------------------------------------------------------------
127         void AxeVolume::bbUserFinalizeProcessing()
128         {
129         }
130
131         //-----------------------------------------------------------------
132
133 }
134 // EO namespace bbcreaMaracasVisu
135
136