]> Creatis software - creaMaracasVisu.git/blobdiff - lib/maracasVisuLib/src/interface/wxWindows/widgets/manualPaint/BrushFilter.cpp
#2864 creaMaracasVisu Feature New Normal - Manual Paint , modifies external image...
[creaMaracasVisu.git] / lib / maracasVisuLib / src / interface / wxWindows / widgets / manualPaint / BrushFilter.cpp
index d58d6db7d528ca24b7ef322d3fb07e85a81bbd94..7e5e76e053466852b97501e80cf761cc407893a3 100644 (file)
+/*# ---------------------------------------------------------------------
+#
+# Copyright (c) CREATIS (Centre de Recherche en Acquisition et Traitement de l'Image
+#                        pour la Sant�)
+# Authors : Eduardo Davila, Frederic Cervenansky, Claire Mouton
+# Previous Authors : Laurent Guigues, Jean-Pierre Roux
+# CreaTools website : www.creatis.insa-lyon.fr/site/fr/creatools_accueil
+#
+#  This software is governed by the CeCILL-B license under French law and
+#  abiding by the rules of distribution of free software. You can  use,
+#  modify and/ or redistribute the software under the terms of the CeCILL-B
+#  license as circulated by CEA, CNRS and INRIA at the following URL
+#  http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html
+#  or in the file LICENSE.txt.
+#
+#  As a counterpart to the access to the source code and  rights to copy,
+#  modify and redistribute granted by the license, users are provided only
+#  with a limited warranty  and the software's author,  the holder of the
+#  economic rights,  and the successive licensors  have only  limited
+#  liability.
+#
+#  The fact that you are presently reading this means that you have had
+#  knowledge of the CeCILL-B license and that you accept its terms.
+# ------------------------------------------------------------------------ */
 
 #include "BrushFilter.h"
 
-
-
-BrushFilter::BrushFilter()
-{
-    _brushsize          =   1;
-    _brushform          =   0;      // 0 rectangle-box  ,   1 circle-sphere
-    _brushtool          =   0;      // 0 pencil         ,   1 fill
+BrushFilter::BrushFilter() {
+       _brushsize = 1;
+       _brushform = 0; // 0 rectangle-cube  ,   1 circle-sphere
+       _brushtool = 0; // 0 pencil         ,   1 fill
 }
 
 //---------------------------------------------------------------------------
-BrushFilter::~BrushFilter()  // virtual
+BrushFilter::~BrushFilter() // virtual
 {
 }
 
 //---------------------------------------------------------------------------
-void BrushFilter::FindMinMaxBrush(int &minX,int &maxX,int &minY,int &maxY,int &minZ,int &maxZ,int &size)
-{
-        size = _brushsize-1;
-        minX = _px-size;
-        maxX = _px+size;
-        minY = _py-size;
-        maxY = _py+size;
-        minZ = _pz-size;
-        maxZ = _pz+size;
-
-        if (_2D3D==0) //2D
-        {
-            if (_direction==0)  // YZ
-            {
-                minX=_px;
-                maxX=_px;
-            }
-            if (_direction==1) // XZ
-            {
-                minY=_py;
-                maxY=_py;
-            }
-            if (_direction==2) // XY
-            {
-                minZ=_pz;
-                maxZ=_pz;
-            }
-        }
-
-        if (_2D3D==1) // 3D
-        {
-        }
-
-       if (minX<_minX)
-        {
-               minX=_minX;
-        }
-
-       if (minY<_minY)
-        {
-               minY=_minY;
-        }
-
-       if (minZ<_minZ)
-        {
-               minZ=_minZ;
-        }
-
-       if (maxX>_maxX)
-        {
-               maxX=_maxX;
-        }
-
-       if (maxY>_maxY)
-        {
-               maxY=_maxY;
-        }
-
-       if (maxZ>_maxZ)
-        {
-               maxZ=_maxZ;
-        }
+void BrushFilter::FindMinMaxBrush(int &minX, int &maxX, int &minY, int &maxY,
+               int &minZ, int &maxZ, int &size) {
+       size = _brushsize - 1;
+       minX = _px - size;
+       maxX = _px + size;
+       minY = _py - size;
+       maxY = _py + size;
+       minZ = _pz - size;
+       maxZ = _pz + size;
+
+       if (_2D3D == 0) //2D
+                       {
+               if (_direction == 0) // YZ
+                               {
+                       minX = _px;
+                       maxX = _px;
+               }
+               if (_direction == 1) // XZ
+                               {
+                       minY = _py;
+                       maxY = _py;
+               }
+               if (_direction == 2) // XY
+                               {
+                       minZ = _pz;
+                       maxZ = _pz;
+               }
+       }
+
+       if (_2D3D == 1) // 3D
+                       {
+       }
+
+       if (minX < _minX) {
+               minX = _minX;
+       }
+
+       if (minY < _minY) {
+               minY = _minY;
+       }
+
+       if (minZ < _minZ) {
+               minZ = _minZ;
+       }
+
+       if (maxX > _maxX) {
+               maxX = _maxX;
+       }
+
+       if (maxY > _maxY) {
+               maxY = _maxY;
+       }
+
+       if (maxZ > _maxZ) {
+               maxZ = _maxZ;
+       }
 
        //--
-       SetGeneralMinMax(minX,maxX,minY,maxY,minZ,maxZ);
-}
-
-
-
-//---------------------------------------------------------------------------
-void BrushFilter::Run()  // virtual
-{
-    if (_image!=NULL)
-    {
-        float value=(float)_graylevel;
-        int i,j,k;
-
-       int size;
-        int minX,maxX,minY,maxY,minZ,maxZ;
-        FindMinMaxBrush(minX,maxX,minY,maxY,minZ,maxZ,size);
-
-        double xx,yy,zz,rr=size*size;
-
-        for (i=minX; i<=maxX; i++)
-        {
-            xx=_px-i;
-            xx=xx*xx;
-            for (j=minY; j<=maxY; j++)
-            {
-                yy=_py-j;
-                yy=yy*yy;
-                for (k=minZ; k<=maxZ; k++)
-                {
-//                    if ((i>=_minX) && (i<=_maxX) && (j>=_minY) && (j<=_maxY) && (k>=_minZ) && (k<=_maxZ))
-//                    {
-
-                         float scalarComponent = _image->GetScalarComponentAsFloat(i,j,k, 0);
-                         if( ( this->GetRangeMin() <=  scalarComponent ) && ( scalarComponent <=  this->GetRangeMax() ) )
-                         {
-                        zz=_pz-k;
-                        zz=zz*zz;
-                        if (_brushform==0)
-                        {
-                               this->CalculateMinMaxRegion(i,j,k); //DFCH
-                            _image->SetScalarComponentFromFloat (i,j,k, 0, value );
-                        } else if (_brushform==1)
-                        {
-                            if ((xx+yy+zz)<=rr)
-                            {
-                               this->CalculateMinMaxRegion(i,j,k); //DFCH
-                                _image->SetScalarComponentFromFloat (i,j,k, 0, value );
-                            }
-                        } // _brushform
-                         } //   GetRangeMin && GetRangeMax
-
-//                    } //if _minX _maxX _minY _maxY _minZ _maxZ
-
-                }//k
-            }//j
-        }//i
-        _image->Modified();
-    } else  {
-        printf("ERROR : bbcreaMaracasvisu::vtkInteractorManualPaint::PaintImage :  Image not set. \n");
-    } // _image
-}
-
-
-//---------------------------------------------------------------------------
-void BrushFilter::SetBrushSize( int brushsize )
-{
-    _brushsize = brushsize;
+       SetGeneralMinMax(minX, maxX, minY, maxY, minZ, maxZ);
 }
 
 //---------------------------------------------------------------------------
-void BrushFilter::SetBrushForm( int brushform )
+void BrushFilter::Run() // virtual
 {
-    _brushform = brushform;
-}
 
-//---------------------------------------------------------------------------
-void BrushFilter::SetBrushTool( int brushtool )
-{
-    _brushtool = brushtool;
-}
-
-//---------------------------------------------------------------------------
-void BrushFilter::SetRangeMin( int min )
-{
-       _RangeMin  = min;
+printf("EED nBrushFilter::Run  _RangeMax %d \n",_RangeMax);
+
+       if (_image != NULL)
+       {
+               float value = (float) _graylevel;
+               int i, j, k;
+
+               int size;
+               int minX, maxX, minY, maxY, minZ, maxZ;
+               FindMinMaxBrush(minX, maxX, minY, maxY, minZ, maxZ, size);
+
+               double xx, yy, zz, rr = size * size;
+               float scalarComponent;
+               bool pixelModify;
+
+               for (i = minX; i <= maxX; i++) 
+               {
+                       xx = _px - i;
+                       xx = xx * xx;
+                       for (j = minY; j <= maxY; j++) 
+                       {
+                               yy = _py - j;
+                               yy = yy * yy;
+                               for (k = minZ; k <= maxZ; k++) 
+                               {
+                                       pixelModify=false;
+                                       scalarComponent = _image->GetScalarComponentAsFloat(i,j, k, 0);
+                                       if ((_RangeMin <= scalarComponent)
+                                                       && (scalarComponent <= _RangeMax )) 
+                                       {
+                                               if (_brushform == 0) 
+                                               {
+                                                       pixelModify=true;
+//                                                     this->_IMManager->AddModifiedPixel(i, j, k); //DFCH
+//                                                     _image->SetScalarComponentFromFloat(i, j, k, 0,value);
+                                               } // _brushform 0
+                                               if (_brushform == 1) 
+                                               {
+                                                       zz = _pz - k;
+                                                       zz = zz * zz;
+                                                       if ((xx + yy + zz) <= rr) {
+                                                               pixelModify=true;
+//                                                             this->_IMManager->AddModifiedPixel(i, j, k); //DFCH
+//                                                             _image->SetScalarComponentFromFloat(i, j, k, 0,value);
+                                                       }
+                                               } // _brushform 1
+                                               if (pixelModify==true)
+                                               {
+                                                               this->_IMManager->AddModifiedPixel(i, j, k); //DFCH
+                                                               if (_image2!=NULL)
+                                                               {
+                                                                       _image2->SetScalarComponentFromFloat(i, j, k, 0,value);
+                                                               }else {
+                                                                       _image->SetScalarComponentFromFloat(i, j, k, 0,value);
+                                                               }
+                                               } // if pixelModify
+                                       } //   GetRangeMin && GetRangeMax
+
+                               } //for k
+                       } //for j
+               } //for i
+               _image->Modified();
+       } else {
+               printf(
+                               "ERROR : bbcreaMaracasvisu::vtkInteractorManualPaint::PaintImage :  Image not set. \n");
+       } // _image
 }
 
 //---------------------------------------------------------------------------
-void BrushFilter::SetRangeMax( int max )
+void BrushFilter::SetBrushSize(int brushsize) 
 {
-       _RangeMax  = max;
+       _brushsize = brushsize;
 }
 
 //---------------------------------------------------------------------------
-int BrushFilter::GetRangeMin( )
+void BrushFilter::SetBrushForm(int brushform) 
 {
-       return( _RangeMin );
+       _brushform = brushform;
 }
 
 //---------------------------------------------------------------------------
-int BrushFilter::GetRangeMax(  )
+void BrushFilter::SetBrushTool(int brushtool) 
 {
-       return( _RangeMax );
+       _brushtool = brushtool;
 }