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