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