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