]> Creatis software - creaMaracasVisu.git/blob - lib/maracasVisuLib/src/interface/wxWindows/widgets/manualPaint/BrushFilter.cpp
*** empty log message ***
[creaMaracasVisu.git] / lib / maracasVisuLib / src / interface / wxWindows / widgets / manualPaint / BrushFilter.cpp
1
2 #include "BrushFilter.h"
3
4
5 BrushFilter::BrushFilter()
6 {
7     _graylevel          =   0.0;
8     _brushsize          =   1;
9     _brushform          =   0;      // 0 rectangle-box  ,   1 circle-sphere
10     _2D3D               =   1;      // 0 2D             ,   1 true 3D
11     _brushtool          =   0;      // 0 pencil         ,   1 fill
12     _direction          =   0;      // 1 XZ             ,   0 YZ            ,   2 XY
13     _minX               =   0;
14     _minY               =   0;
15     _minZ               =   0;
16     _maxX               =   0;
17     _maxY               =   0;
18     _maxZ               =   0;
19
20     _pMinX              =   0;
21     _pMinY              =   0;
22     _pMinZ              =   0;
23     _pMaxX              =   0;
24     _pMaxY              =   0;
25     _pMaxZ              =   0;
26
27 }
28
29 //---------------------------------------------------------------------------
30 BrushFilter::~BrushFilter()
31 {
32 }
33
34 //---------------------------------------------------------------------------
35 void BrushFilter::SetImage(vtkImageData *image)
36 {
37     _image=image;
38     int ext[6];
39     _image->GetWholeExtent(ext);
40     _minX=0;
41     _minY=0;
42     _minZ=0;
43     _maxX=ext[1]-ext[0];
44     _maxY=ext[3]-ext[2];
45     _maxZ=ext[5]-ext[4];
46
47 }
48
49 //---------------------------------------------------------------------------
50 void BrushFilter::ResetGeneralMinMax()
51 {
52         _pMinX=10000;
53         _pMinY=10000;
54         _pMinZ=10000;
55         _pMaxX=-10000;
56         _pMaxY=-10000;
57         _pMaxZ=-10000;
58 }
59
60
61 //---------------------------------------------------------------------------
62 void BrushFilter::SetGeneralMinMax(int minX,int maxX,int minY,int maxY,int minZ,int maxZ)
63 {
64         if (_pMinX>minX)
65         {
66                 _pMinX=minX;
67         }
68
69         if (_pMinY>minY)
70         {
71                 _pMinY=minY;
72         }
73
74         if (_pMinZ>minZ)
75         {
76                 _pMinZ=minZ;
77         }
78
79         if (_pMaxX<maxX)
80         {
81                 _pMaxX=maxX;
82         }
83
84         if (_pMaxY<maxY)
85         {
86                 _pMaxY=maxY;
87         }
88
89         if (_pMaxZ<maxZ)
90         {
91                 _pMaxZ=maxZ;
92         }
93
94 }
95
96
97 //---------------------------------------------------------------------------
98 void BrushFilter::FindMinMaxBrush(int &minX,int &maxX,int &minY,int &maxY,int &minZ,int &maxZ,int &size)
99 {
100         size = _brushsize-1;
101         minX = _px-size;
102         maxX = _px+size;
103         minY = _py-size;
104         maxY = _py+size;
105         minZ = _pz-size;
106         maxZ = _pz+size;
107
108         if (_2D3D==0) //2D
109         {
110             if (_direction==0)  // YZ
111             {
112                 minX=_px;
113                 maxX=_px;
114             }
115             if (_direction==1) // XZ
116             {
117                 minY=_py;
118                 maxY=_py;
119             }
120             if (_direction==2) // XY
121             {
122                 minZ=_pz;
123                 maxZ=_pz;
124             }
125         }
126
127         if (_2D3D==1) // 3D
128         {
129         }
130
131         if (minX<_minX)
132         {
133                 minX=_minX;
134         }
135
136         if (minY<_minY)
137         {
138                 minY=_minY;
139         }
140
141         if (minZ<_minZ)
142         {
143                 minZ=_minZ;
144         }
145
146         if (maxX>_maxX)
147         {
148                 maxX=_maxX;
149         }
150
151         if (maxY>_maxY)
152         {
153                 maxY=_maxY;
154         }
155
156         if (maxZ>_maxZ)
157         {
158                 maxZ=_maxZ;
159         }
160
161         //--
162         SetGeneralMinMax(minX,maxX,minY,maxY,minZ,maxZ);
163 }
164
165
166
167 //---------------------------------------------------------------------------
168 void BrushFilter::Run()
169 {
170     if (_image!=NULL)
171     {
172         float value=(float)_graylevel;
173         int i,j,k;
174
175         int size;
176         int minX,maxX,minY,maxY,minZ,maxZ;
177         FindMinMaxBrush(minX,maxX,minY,maxY,minZ,maxZ,size);
178
179         double xx,yy,zz,rr=size*size;
180
181         for (i=minX; i<=maxX; i++)
182         {
183             xx=_px-i;
184             xx=xx*xx;
185             for (j=minY; j<=maxY; j++)
186             {
187                 yy=_py-j;
188                 yy=yy*yy;
189                 for (k=minZ; k<=maxZ; k++)
190                 {
191 //                    if ((i>=_minX) && (i<=_maxX) && (j>=_minY) && (j<=_maxY) && (k>=_minZ) && (k<=_maxZ))
192 //                    {
193                         zz=_pz-k;
194                         zz=zz*zz;
195                         if (_brushform==0)
196                         {
197                             _image->SetScalarComponentFromFloat (i,j,k, 0, value );
198                         } else if (_brushform==1)
199                         {
200                             if ((xx+yy+zz)<=rr)
201                             {
202                                 _image->SetScalarComponentFromFloat (i,j,k, 0, value );
203                             }
204                         } // _brushform
205
206 //                    } //if _minX _maxX _minY _maxY _minZ _maxZ
207
208                 }//k
209             }//j
210         }//i
211         _image->Modified();
212     } else  {
213         printf("ERROR : bbcreaMaracasvisu::vtkInteractorManualPaint::PaintImage :  Image not set. \n");
214     } // _image
215 }
216
217
218 //---------------------------------------------------------------------------
219 void BrushFilter::SetBrushSize( int brushsize )
220 {
221     _brushsize = brushsize;
222 }
223
224 //---------------------------------------------------------------------------
225 void BrushFilter::SetGrayLevel( double graylevel )
226 {
227     _graylevel = graylevel;
228 }
229
230 //---------------------------------------------------------------------------
231 void BrushFilter::SetBrushForm( int brushform )
232 {
233     _brushform = brushform;
234 }
235
236 //---------------------------------------------------------------------------
237 void BrushFilter::SetBrushTool( int brushtool )
238 {
239     _brushtool = brushtool;
240 }
241
242 //---------------------------------------------------------------------------
243 void BrushFilter::Set2D3D( int dim2D3D )
244 {
245     _2D3D = dim2D3D;
246 }
247
248 //---------------------------------------------------------------------------
249 void BrushFilter::SetDirection(int direction)
250 {
251     _direction = direction;
252 }
253
254 //---------------------------------------------------------------------------
255 void BrushFilter::SetPoint(int px,int py, int pz)
256 {
257     _px=px;
258     _py=py;
259     _pz=pz;
260 }
261
262