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