]> Creatis software - creaMaracasVisu.git/blob - lib/maracasVisuLib/src/interface/wxWindows/widgets/manualPaint/BrushFilter.cpp
DFCH: Manual Paint Changes (Undo/Redo) 80% :) :)
[creaMaracasVisu.git] / lib / maracasVisuLib / src / interface / wxWindows / widgets / manualPaint / BrushFilter.cpp
1
2 #include "BrushFilter.h"
3
4
5
6 BrushFilter::BrushFilter()
7 {
8     _brushsize          =   1;
9     _brushform          =   0;      // 0 rectangle-box  ,   1 circle-sphere
10     _brushtool          =   0;      // 0 pencil         ,   1 fill
11 }
12
13 //---------------------------------------------------------------------------
14 BrushFilter::~BrushFilter()  // virtual
15 {
16 }
17
18 //---------------------------------------------------------------------------
19 void BrushFilter::FindMinMaxBrush(int &minX,int &maxX,int &minY,int &maxY,int &minZ,int &maxZ,int &size)
20 {
21         size = _brushsize-1;
22         minX = _px-size;
23         maxX = _px+size;
24         minY = _py-size;
25         maxY = _py+size;
26         minZ = _pz-size;
27         maxZ = _pz+size;
28
29         if (_2D3D==0) //2D
30         {
31             if (_direction==0)  // YZ
32             {
33                 minX=_px;
34                 maxX=_px;
35             }
36             if (_direction==1) // XZ
37             {
38                 minY=_py;
39                 maxY=_py;
40             }
41             if (_direction==2) // XY
42             {
43                 minZ=_pz;
44                 maxZ=_pz;
45             }
46         }
47
48         if (_2D3D==1) // 3D
49         {
50         }
51
52         if (minX<_minX)
53         {
54                 minX=_minX;
55         }
56
57         if (minY<_minY)
58         {
59                 minY=_minY;
60         }
61
62         if (minZ<_minZ)
63         {
64                 minZ=_minZ;
65         }
66
67         if (maxX>_maxX)
68         {
69                 maxX=_maxX;
70         }
71
72         if (maxY>_maxY)
73         {
74                 maxY=_maxY;
75         }
76
77         if (maxZ>_maxZ)
78         {
79                 maxZ=_maxZ;
80         }
81
82         //--
83         SetGeneralMinMax(minX,maxX,minY,maxY,minZ,maxZ);
84 }
85
86
87
88 //---------------------------------------------------------------------------
89 void BrushFilter::Run()  // virtual
90 {
91     if (_image!=NULL)
92     {
93         float value=(float)_graylevel;
94         int i,j,k;
95
96         int size;
97         int minX,maxX,minY,maxY,minZ,maxZ;
98         FindMinMaxBrush(minX,maxX,minY,maxY,minZ,maxZ,size);
99
100         double xx,yy,zz,rr=size*size;
101
102         for (i=minX; i<=maxX; i++)
103         {
104             xx=_px-i;
105             xx=xx*xx;
106             for (j=minY; j<=maxY; j++)
107             {
108                 yy=_py-j;
109                 yy=yy*yy;
110                 for (k=minZ; k<=maxZ; k++)
111                 {
112 //                    if ((i>=_minX) && (i<=_maxX) && (j>=_minY) && (j<=_maxY) && (k>=_minZ) && (k<=_maxZ))
113 //                    {
114
115                           float scalarComponent = _image->GetScalarComponentAsFloat(i,j,k, 0);
116                           if( ( this->GetRangeMin() <=  scalarComponent ) && ( scalarComponent <=  this->GetRangeMax() ) )
117                           {
118                         zz=_pz-k;
119                         zz=zz*zz;
120                         if (_brushform==0)
121                         {
122                                 this->CalculateMinMaxRegion(i,j,k); //DFCH
123                             _image->SetScalarComponentFromFloat (i,j,k, 0, value );
124                         } else if (_brushform==1)
125                         {
126                             if ((xx+yy+zz)<=rr)
127                             {
128                                 this->CalculateMinMaxRegion(i,j,k); //DFCH
129                                 _image->SetScalarComponentFromFloat (i,j,k, 0, value );
130                             }
131                         } // _brushform
132                           } //   GetRangeMin && GetRangeMax
133
134 //                    } //if _minX _maxX _minY _maxY _minZ _maxZ
135
136                 }//k
137             }//j
138         }//i
139         _image->Modified();
140     } else  {
141         printf("ERROR : bbcreaMaracasvisu::vtkInteractorManualPaint::PaintImage :  Image not set. \n");
142     } // _image
143 }
144
145
146 //---------------------------------------------------------------------------
147 void BrushFilter::SetBrushSize( int brushsize )
148 {
149     _brushsize = brushsize;
150 }
151
152 //---------------------------------------------------------------------------
153 void BrushFilter::SetBrushForm( int brushform )
154 {
155     _brushform = brushform;
156 }
157
158 //---------------------------------------------------------------------------
159 void BrushFilter::SetBrushTool( int brushtool )
160 {
161     _brushtool = brushtool;
162 }
163
164 //---------------------------------------------------------------------------
165 void BrushFilter::SetRangeMin( int min )
166 {
167         _RangeMin  = min;
168 }
169
170 //---------------------------------------------------------------------------
171 void BrushFilter::SetRangeMax( int max )
172 {
173         _RangeMax  = max;
174 }
175
176 //---------------------------------------------------------------------------
177 int BrushFilter::GetRangeMin( )
178 {
179         return( _RangeMin );
180 }
181
182 //---------------------------------------------------------------------------
183 int BrushFilter::GetRangeMax(  )
184 {
185         return( _RangeMax );
186 }
187
188