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