]> Creatis software - creaMaracasVisu.git/blob - bbtk/src/bbmaracasvisuAxeVolume.cxx
.
[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() ];
52                 } else {
53                         r = bbGetInputlstPointR()[ iAxe ];
54                 }
55                 px = bbGetInputlstPointX()[iAxe];
56                 py = bbGetInputlstPointY()[iAxe];
57                 pz = bbGetInputlstPointZ()[iAxe];
58                 px1 = px - r;
59                 py1 = py - r;
60                 pz1 = pz - r;
61                 px2 = px + r;
62                 py2 = py + r;
63                 pz2 = pz + r;
64
65                 for ( i=px1 ; i<=px2 ; i++ ) 
66                 {
67                         for ( j=py1 ; j<py2 ; j++ ) 
68                         {
69                                 for ( k=pz1 ; k<pz2 ; k++ ) 
70                                 {
71                                         if ( (i>=0) && (i<sizeX) && (j>=0) && (j<sizeY) &&(k>=0) && (k<sizeZ) ){
72                                                 rx      = i - px;
73                                                 ry      = j - py;
74                                                 rz      = k - pz;
75                                                 rr      = rx*rx + ry*ry + rz*rz;
76                                                 if ( rx*rx + ry*ry + rz*rz <= r*r )
77                                                 {
78                                                         p = (unsigned short*)mimage->GetScalarPointer (i, j, k);
79                                                         *p=255;
80                                                 } 
81                                         } // inside point
82                                 } //for k
83                         } //for j
84                 } //for i
85         } // for iAxe
86     bbSetOutputOut( mimage ); 
87 }
88
89
90         //-----------------------------------------------------------------     
91         void AxeVolume::bbUserSetDefaultValues()
92         {
93                 mimage=NULL;
94         }
95         
96         //-----------------------------------------------------------------     
97         void AxeVolume::bbUserInitializeProcessing()
98         {
99         }
100         
101         //-----------------------------------------------------------------     
102         void AxeVolume::bbUserFinalizeProcessing()
103         {
104         }
105         
106         //-----------------------------------------------------------------     
107         
108 }
109 // EO namespace bbcreaMaracasVisu
110
111