]> Creatis software - creaMaracasVisu.git/blobdiff - lib/maracasVisuLib/src/interface/wxWindows/widgets/manualPaint/FillFilter.cpp
DFCH: UndoRedo + ManualPaint - Code update. Undo beta1 working :) :) :)
[creaMaracasVisu.git] / lib / maracasVisuLib / src / interface / wxWindows / widgets / manualPaint / FillFilter.cpp
index c27634363f1820fabda718992bbcea383d1e21ed..9dc1cb43686f4e2334b74b99411d9c3ba2019a2a 100644 (file)
@@ -6,7 +6,7 @@ FillFilter::FillFilter()
 {
     _tolerancefill      =   50;
     _distancefill       =   500;
-    _limitRecursionFill =   100000;
+    _limitRecursionFill =   50000;
     _auxImageFill       =   NULL;
 }
 
@@ -86,6 +86,7 @@ void FillFilter::Run() // virtual
 //---------------------------------------------------------------------------
 void FillFilter::FillToolRecursive(int px,int py, int pz)
 {
+       this->_MRegion->value = (float) _graylevel;
     _countRecursiveFill++;
 
     _countProgressingFill++;
@@ -99,18 +100,58 @@ void FillFilter::FillToolRecursive(int px,int py, int pz)
     {
         if (_usingAuxImageFill==true)
         {
+               this->CalculateMinMaxRegion(px,py,pz); //DFCH
             _auxImageFill->SetScalarComponentFromFloat (px, py, pz,0, 0);
         }
         _tmpDistfill=(px-_pxfill)*(px-_pxfill)  + (py-_pyfill)*(py-_pyfill) + (pz-_pzfill)*(pz-_pzfill);
         _tmpiglfill=_image->GetScalarComponentAsDouble(px,py,pz, 0);
 
-        _auxGrayLevelValidationFill =   (_tmpiglfill!=_graylevel) &&
+        float grayLBFMTOL = _graylevelbasefill-_tolerancefill;
+        float grayLBFPTOL = _graylevelbasefill+_tolerancefill;
+        bool isInRange = false;
+        //DFCH
+        if( _RangeMin <= grayLBFMTOL && _RangeMax >= grayLBFPTOL )
+        {
+               isInRange = true;
+        }//fi esle
+        else if( _RangeMin > grayLBFMTOL && _RangeMax >= grayLBFPTOL )
+        {
+               grayLBFMTOL = _RangeMin;
+               isInRange = true;
+        }//fi esle
+        else if( _RangeMin <= grayLBFMTOL && _RangeMax < grayLBFPTOL )
+        {
+               grayLBFPTOL = _RangeMax;
+               isInRange = true;
+        }//fi esle
+        else if(  ( _RangeMin <= _graylevelbasefill ) && ( _graylevelbasefill <= _RangeMax ) )
+        {
+               grayLBFMTOL = _RangeMin;
+               grayLBFPTOL = _RangeMax;
+               isInRange = true;
+        }//fi esle
+
+        if( isInRange )
+        {
+               _auxGrayLevelValidationFill =  (_tmpiglfill!=_graylevel) &&
+                                           (_tmpiglfill>=grayLBFMTOL) &&
+                                           (_tmpiglfill<=grayLBFPTOL) &&
+                                           (_tmpDistfill<=_distbasefill); //DFCH
+        }//fi
+        else
+        {
+               _auxGrayLevelValidationFill = false;
+        }//esle
+        //DFCH
+        /*_auxGrayLevelValidationFill =   (_tmpiglfill!=_graylevel) &&
                                         (_tmpiglfill>=_graylevelbasefill-_tolerancefill) &&
                                         (_tmpiglfill<=_graylevelbasefill+_tolerancefill) &&
-                                        (_tmpDistfill<=_distbasefill);
+                                        (_tmpDistfill<=_distbasefill);*/ //DFCH
+
 
         if (  _auxGrayLevelValidationFill==true )
         {
+               this->CalculateMinMaxRegion(px,py,pz); //DFCH
             _image->SetScalarComponentFromFloat (px,py,pz, 0, (float)_graylevel );
 
             if (_countRecursiveFill< _limitRecursionFill)
@@ -219,6 +260,7 @@ void FillFilter::SetAuxImageFill(int px,int py, int pz)
 {
     if ((px>=_minX) && (px<=_maxX) && (py>=_minY) && (py<=_maxY) && (pz>=_minZ) && (pz<=_maxZ))
     {
+       this->CalculateMinMaxRegion(px,py,pz); //DFCH
         _auxImageFill->SetScalarComponentFromFloat (px, py, pz,0, 1);
     }
 }
@@ -237,27 +279,25 @@ void FillFilter::SetDistanceFill(int distancefill)
 }
 
 //---------------------------------------------------------------------------
-void FillFilter::SetRangeMin( unsigned int min )
+void FillFilter::SetRangeMin(  int min )
 {
-       std::cout<<"pechaaan   Min: " << min <<std::endl;
        _RangeMin  = min;
 }
 
 //---------------------------------------------------------------------------
-void FillFilter::SetRangeMax( unsigned int max )
+void FillFilter::SetRangeMax(  int max )
 {
-       std::cout<<"pechaaan   Max: " << max <<std::endl;
        _RangeMax  = max;
 }
 
 //---------------------------------------------------------------------------
-unsigned int FillFilter::GetRangeMin( )
+int FillFilter::GetRangeMin( )
 {
        return( _RangeMin );
 }
 
 //---------------------------------------------------------------------------
-unsigned int FillFilter::GetRangeMax(  )
+int FillFilter::GetRangeMax(  )
 {
        return( _RangeMax );
 }