]> Creatis software - creaVtk.git/blob - bbtk_creaVtk_PKG/src/bbcreaVtkImageCutByAxis.cxx
3195 creaVtk Feature New Normal - new Boxes ImageCutByAxis LightKit MeshCutByAxis
[creaVtk.git] / bbtk_creaVtk_PKG / src / bbcreaVtkImageCutByAxis.cxx
1 //===== 
2 // Before editing this file, make sure it's a file of your own (i.e.: it wasn't generated from xml description; if so : your modifications will be lost)
3 //===== 
4 #include "bbcreaVtkImageCutByAxis.h"
5 #include "bbcreaVtkPackage.h"
6 namespace bbcreaVtk
7 {
8
9 BBTK_ADD_BLACK_BOX_TO_PACKAGE(creaVtk,ImageCutByAxis)
10 BBTK_BLACK_BOX_IMPLEMENTATION(ImageCutByAxis,bbtk::AtomicBlackBox);
11 //===== 
12 // Before editing this file, make sure it's a file of your own (i.e.: it wasn't generated from xml description; if so : your modifications will be lost)
13 //===== 
14 void ImageCutByAxis::Process()
15 {
16
17 // THE MAIN PROCESSING METHOD BODY
18 //   Here we simply set the input 'In' value to the output 'Out'
19 //   And print out the output value
20 // INPUT/OUTPUT ACCESSORS ARE OF THE FORM :
21 //    void bbSet{Input|Output}NAME(const TYPE&)
22 //    const TYPE& bbGet{Input|Output}NAME() const 
23 //    Where :
24 //    * NAME is the name of the input/output
25 //      (the one provided in the attribute 'name' of the tag 'input')
26 //    * TYPE is the C++ type of the input/output
27 //      (the one provided in the attribute 'type' of the tag 'input')
28
29 //    bbSetOutputOut( bbGetInputIn() );
30 //    std::cout << "Output value = " <<bbGetOutputOut() << std::endl;
31   
32
33         vtkImageData *newData=vtkImageData::New();
34         newData->DeepCopy( bbGetInputIn() );
35
36         int ext[6];
37         bbGetInputIn()->GetWholeExtent(ext);
38         double dimX=ext[1]-ext[0]+1;
39         double dimY=ext[3]-ext[2]+1;
40         double dimZ=ext[5]-ext[4]+1;
41
42         int x=bbGetInputPoint()[0];
43         int y=bbGetInputPoint()[1];
44         int z=bbGetInputPoint()[2];
45
46         int i,j;
47         bool c1=false;
48         bool c2=false;
49         bool c3=false;
50         bool c4=false;
51
52         if ( bbGetInputType()=="x-y-z+" ) 
53         {
54                 if (bbGetInputTypeOrientation()==0)  { c1=false;        c2=true;        c3=true;        c4=true;        }
55                 if (bbGetInputTypeOrientation()==1)  { c1=true;         c2=false;       c3=true;        c4=true;        }
56                 if (bbGetInputTypeOrientation()==2)  { c1=true;         c2=false;       c3=true;        c4=true;        }
57         }
58
59         if (bbGetInputInsideVol()==true)
60         {
61                 c1=!c1;
62                 c2=!c2;
63                 c3=!c3;
64                 c4=!c4;
65         } // IndideVol
66
67
68         int xmin,xmax,ymin,ymax;
69
70 //      void *imgPtr;
71 //              imgPtr=bbGetInputIn()->GetScalarPointer(x,y,z,0);
72 //              memset( bbGetInputIn()->GetScalarPointer() );
73         
74         if (c1==true)
75         {
76                 if (bbGetInputTypeOrientation()==0)  { xmin=0; xmax=x; ymin=0; ymax=y;                          }
77                 if (bbGetInputTypeOrientation()==1)  { xmin=0; xmax=x; ymin=dimY-z; ymax=dimY;          }
78                 if (bbGetInputTypeOrientation()==2)  { xmin=0; xmax=y; ymin=dimY-z; ymax=dimY;          }
79                 for (j=ymin;j<ymax;j++){
80                         for (i=xmin;i<xmax;i++){newData->SetScalarComponentFromDouble(i,j,0,0,0);} // for i
81                 } // for j
82         }  // c1
83
84         if (c2==true)
85         { 
86                 if (bbGetInputTypeOrientation()==0)  { xmin=0; xmax=x; ymin=y; ymax=dimY;                       }
87                 if (bbGetInputTypeOrientation()==1)  { xmin=0; xmax=x; ymin=0; ymax=dimY-z;                     }
88                 if (bbGetInputTypeOrientation()==2)  { xmin=0; xmax=y; ymin=0; ymax=dimY-z;             }
89                 for (j=ymin;j<ymax;j++){
90                         for (i=xmin;i<xmax;i++){newData->SetScalarComponentFromDouble(i,j,0,0,0);} // for i
91                 } // for j
92         } //c2
93
94         if (c3==true)  
95         { 
96                 if (bbGetInputTypeOrientation()==0)  { xmin=x; xmax=dimX; ymin=0; ymax=y;                       }
97                 if (bbGetInputTypeOrientation()==1)  { xmin=x; xmax=dimX; ymin=dimY-z; ymax=dimY;       }
98                 if (bbGetInputTypeOrientation()==2)  { xmin=y; xmax=dimX; ymin=dimY-z; ymax=dimY;       }
99                 for (j=ymin;j<ymax;j++){
100                         for (i=xmin;i<xmax;i++){newData->SetScalarComponentFromDouble(i,j,0,0,0);} // for i
101                 } // for j
102         } //c3
103
104         if (c4==true)  
105         {  
106                 if (bbGetInputTypeOrientation()==0)  { xmin=x; xmax=dimX; ymin=y; ymax=dimY;            }
107                 if (bbGetInputTypeOrientation()==1)  { xmin=x; xmax=dimX; ymin=0; ymax=dimY-z;          }
108                 if (bbGetInputTypeOrientation()==2)  { xmin=y; xmax=dimX; ymin=0; ymax=dimY-z;          }
109                 for (j=ymin;j<ymax;j++){
110                         for (i=xmin;i<xmax;i++){newData->SetScalarComponentFromDouble(i,j,0,0,0);} // for i
111                 } // for j
112
113         } //c4
114
115         bbSetOutputOut( newData );
116
117 }
118 //===== 
119 // Before editing this file, make sure it's a file of your own (i.e.: it wasn't generated from xml description; if so : your modifications will be lost)
120 //===== 
121 void ImageCutByAxis::bbUserSetDefaultValues()
122 {
123
124 //  SET HERE THE DEFAULT INPUT/OUTPUT VALUES OF YOUR BOX 
125 //    Here we initialize the input 'In' to 0
126    bbSetInputIn(NULL);
127    bbSetInputType("x+y+z+");
128    bbSetInputInsideVol(true);
129    std::vector<int> point;
130    point.push_back(0);
131    point.push_back(0);
132    point.push_back(0);
133    bbSetInputPoint(point);
134 }
135 //===== 
136 // Before editing this file, make sure it's a file of your own (i.e.: it wasn't generated from xml description; if so : your modifications will be lost)
137 //===== 
138 void ImageCutByAxis::bbUserInitializeProcessing()
139 {
140
141 //  THE INITIALIZATION METHOD BODY :
142 //    Here does nothing 
143 //    but this is where you should allocate the internal/output pointers 
144 //    if any 
145
146   
147 }
148 //===== 
149 // Before editing this file, make sure it's a file of your own (i.e.: it wasn't generated from xml description; if so : your modifications will be lost)
150 //===== 
151 void ImageCutByAxis::bbUserFinalizeProcessing()
152 {
153
154 //  THE FINALIZATION METHOD BODY :
155 //    Here does nothing 
156 //    but this is where you should desallocate the internal/output pointers 
157 //    if any
158   
159 }
160 }
161 // EO namespace bbcreaVtk
162
163