]> Creatis software - creaMaracasVisu.git/commitdiff
*** empty log message ***
authorEduardo Davila <Eduardo.Davila@creatis.insa-lyon.fr>
Wed, 3 Nov 2010 07:55:06 +0000 (07:55 +0000)
committerEduardo Davila <Eduardo.Davila@creatis.insa-lyon.fr>
Wed, 3 Nov 2010 07:55:06 +0000 (07:55 +0000)
lib/maracasVisuLib/src/interface/wxWindows/widgets/manualPaint/BrushFilter.cpp [new file with mode: 0644]
lib/maracasVisuLib/src/interface/wxWindows/widgets/manualPaint/BrushFilter.h [new file with mode: 0644]
lib/maracasVisuLib/src/interface/wxWindows/widgets/manualPaint/FillFilter.cpp [new file with mode: 0644]
lib/maracasVisuLib/src/interface/wxWindows/widgets/manualPaint/FillFilter.h [new file with mode: 0644]

diff --git a/lib/maracasVisuLib/src/interface/wxWindows/widgets/manualPaint/BrushFilter.cpp b/lib/maracasVisuLib/src/interface/wxWindows/widgets/manualPaint/BrushFilter.cpp
new file mode 100644 (file)
index 0000000..311072d
--- /dev/null
@@ -0,0 +1,262 @@
+
+#include "BrushFilter.h"
+
+
+BrushFilter::BrushFilter()
+{
+    _graylevel          =   0.0;
+    _brushsize          =   1;
+    _brushform          =   0;      // 0 rectangle-box  ,   1 circle-sphere
+    _2D3D               =   1;      // 0 2D             ,   1 true 3D
+    _brushtool          =   0;      // 0 pencil         ,   1 fill
+    _direction          =   0;      // 1 XZ             ,   0 YZ            ,   2 XY
+    _minX               =   0;
+    _minY               =   0;
+    _minZ               =   0;
+    _maxX               =   0;
+    _maxY               =   0;
+    _maxZ               =   0;
+
+    _pMinX              =   0;
+    _pMinY              =   0;
+    _pMinZ              =   0;
+    _pMaxX              =   0;
+    _pMaxY              =   0;
+    _pMaxZ              =   0;
+
+}
+
+//---------------------------------------------------------------------------
+BrushFilter::~BrushFilter()
+{
+}
+
+//---------------------------------------------------------------------------
+void BrushFilter::SetImage(vtkImageData *image)
+{
+    _image=image;
+    int ext[6];
+    _image->GetWholeExtent(ext);
+    _minX=0;
+    _minY=0;
+    _minZ=0;
+    _maxX=ext[1]-ext[0];
+    _maxY=ext[3]-ext[2];
+    _maxZ=ext[5]-ext[4];
+
+}
+
+//---------------------------------------------------------------------------
+void BrushFilter::ResetGeneralMinMax()
+{
+       _pMinX=10000;
+       _pMinY=10000;
+       _pMinZ=10000;
+       _pMaxX=-10000;
+       _pMaxY=-10000;
+       _pMaxZ=-10000;
+}
+
+
+//---------------------------------------------------------------------------
+void BrushFilter::SetGeneralMinMax(int minX,int maxX,int minY,int maxY,int minZ,int maxZ)
+{
+       if (_pMinX>minX)
+        {
+               _pMinX=minX;
+        }
+
+       if (_pMinY>minY)
+        {
+               _pMinY=minY;
+        }
+
+       if (_pMinZ>minZ)
+        {
+               _pMinZ=minZ;
+        }
+
+       if (_pMaxX<maxX)
+        {
+               _pMaxX=maxX;
+        }
+
+       if (_pMaxY<maxY)
+        {
+               _pMaxY=maxY;
+        }
+
+       if (_pMaxZ<maxZ)
+        {
+               _pMaxZ=maxZ;
+        }
+
+}
+
+
+//---------------------------------------------------------------------------
+void BrushFilter::FindMinMaxBrush(int &minxX,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()
+{
+    if (_image!=NULL)
+    {
+        float value=(float)_graylevel;
+        int i,j,k;
+
+       int size;
+        int minX,maxX,minY,maxY,minZ,maxZ;
+        FindMinMaxBrush(minxX,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))
+//                    {
+                        zz=pz-k;
+                        zz=zz*zz;
+                        if (_brushform==0)
+                        {
+                            _image->SetScalarComponentFromFloat (i,j,k, 0, value );
+                        } else if (_brushform==1)
+                        {
+                            if ((xx+yy+zz)<=rr)
+                            {
+                                _image->SetScalarComponentFromFloat (i,j,k, 0, value );
+                            }
+                        } // _brushform
+
+//                    } //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;
+}
+
+//---------------------------------------------------------------------------
+void BrushFilter::SetGrayLevel( double graylevel )
+{
+    _graylevel = graylevel;
+}
+
+//---------------------------------------------------------------------------
+void BrushFilter::SetBrushForm( int brushform )
+{
+    _brushform = brushform;
+}
+
+//---------------------------------------------------------------------------
+void BrushFilter::SetBrushTool( int brushtool )
+{
+    _brushtool = brushtool;
+}
+
+//---------------------------------------------------------------------------
+void BrushFilter::Set2D3D( int dim2D3D )
+{
+    _2D3D = dim2D3D;
+}
+
+//---------------------------------------------------------------------------
+void BrushFilter::SetDirection(int direction)
+{
+    _direction = direction;
+}
+
+//---------------------------------------------------------------------------
+void BrushFilter::Set(int px,int py, int pz)
+{
+    _px=px;
+    _py=py;
+    _pz=pz;
+}
+
+
diff --git a/lib/maracasVisuLib/src/interface/wxWindows/widgets/manualPaint/BrushFilter.h b/lib/maracasVisuLib/src/interface/wxWindows/widgets/manualPaint/BrushFilter.h
new file mode 100644 (file)
index 0000000..03af3fa
--- /dev/null
@@ -0,0 +1,75 @@
+#ifndef _BRUSH_FILTER_H_
+#define _BRUSH_FILTER_H_
+
+#include <vtkImageData.h>
+
+
+class BrushFilter  {
+public:
+       BrushFilter();
+       virtual ~BrushFilter();
+
+    void SetImage(vtkImageData *image);
+    void SetPoint(int px,int py, int pz);
+    void SetBrushSize( int brushsize );
+    void SetBrushForm( int brushform );
+    void SetBrushTool( int brushtool );
+    void Set2D3D( int dim2D3D );
+    void SetGrayLevel( double graylevel );
+    void SetDirection(int direction);
+    void FindMinMaxBrush(int &minxX,int &maxX,int &minY,int &maxY,int &minZ,int &maxZ,int &size);
+    void ResetGeneralMinMax();
+    void SetGeneralMinMax(int minX,int maxX,int minY,int maxY,int minZ,int maxZ);
+    void Run();
+
+
+private:
+    vtkImageData    *_image;
+    int            _px;    // start point of the brush
+    int            _py;
+    int            _pz;
+    int            _pMinX;  // General min max of many brush actions
+    int            _pMinY;
+    int            _pMinZ;
+    int            _pMaxX;
+    int            _pMaxY;
+    int            _pMaxZ;
+    int             _minX;   // min max of the image
+    int             _maxX;
+    int             _minY;
+    int             _maxY;
+    int             _minZ;
+    int             _maxZ;
+    int             _brushsize;
+    int             _brushform;
+    int             _brushtool;
+    bool            _2D3D;
+    double          _graylevel;
+
+
+// EED Borrame
+//    double          _tolerancefill;
+//    int             _distancefill;
+//    double          _graylevelbasefill;
+//    int             _direction;
+//    int             _pxfill;
+//    int             _pyfill;
+//    int             _pzfill;
+//    double          _distbasefill;
+//    double          _tmpDistfill;
+//    double          _tmpiglfill;
+//    long int        _countRecursiveFill;
+//    long int        _countRecursiveFillProblem;
+//    vtkImageData    *_auxImageFill;
+//    bool             _usingAuxImageFill;
+//    bool             _auxGrayLevelValidationFill;
+//    long int        _countProgressingFill;
+//    long int        _limitRecursionFill;
+//    void    SetAuxImageFill(int px,int py, int pz);
+
+protected:
+
+};
+
+
+#endif // _BRUSH_FILTER_H_
diff --git a/lib/maracasVisuLib/src/interface/wxWindows/widgets/manualPaint/FillFilter.cpp b/lib/maracasVisuLib/src/interface/wxWindows/widgets/manualPaint/FillFilter.cpp
new file mode 100644 (file)
index 0000000..32d6827
--- /dev/null
@@ -0,0 +1,388 @@
+
+#include "ManualPaintModel.h"
+
+
+ManualPaintModel::ManualPaintModel()
+{
+    _graylevel          =   0.0;
+    _brushsize          =   1;
+    _brushform          =   0;      // 0 rectangle-box  ,   1 circle-sphere
+    _2D3D               =   1;      // 0 2D             ,   1 true 3D
+    _brushtool          =   0;      // 0 pencil         ,   1 fill
+    _direction          =   0;      // 1 XZ             ,   0 YZ            ,   2 XY
+    _tolerancefill      =   50;
+    _distancefill       =   500;
+    _limitRecursionFill =   100000;
+    _minX               =   0;
+    _minY               =   0;
+    _minZ               =   0;
+    _maxX               =   0;
+    _maxY               =   0;
+    _maxZ               =   0;
+    _auxImageFill       =   NULL;
+}
+
+//---------------------------------------------------------------------------
+ManualPaintModel::~ManualPaintModel()
+{
+    if (_auxImageFill!=NULL)
+    {
+        _auxImageFill->Delete();
+    }
+}
+
+//---------------------------------------------------------------------------
+void ManualPaintModel::SetImage(vtkImageData *image)
+{
+    _image=image;
+
+    int ext[6];
+    _image->GetWholeExtent(ext);
+    _minX=0;
+    _minY=0;
+    _minZ=0;
+    _maxX=ext[1]-ext[0];
+    _maxY=ext[3]-ext[2];
+    _maxZ=ext[5]-ext[4];
+
+
+    if (_auxImageFill!=NULL)
+    {
+        _auxImageFill->Delete();
+    }
+       _auxImageFill = vtkImageData::New();
+       _auxImageFill->SetDimensions(_maxX+1,_maxY+1,_maxZ+1);
+       _auxImageFill->SetOrigin(0,0,0);
+       _auxImageFill->SetExtent( 0 , _maxX , 0 , _maxY , 0, _maxZ );
+       _auxImageFill->SetWholeExtent( 0 , _maxX , 0 , _maxY , 0, _maxZ );
+       _auxImageFill->SetScalarTypeToUnsignedChar();
+       _auxImageFill->AllocateScalars();
+
+}
+
+//---------------------------------------------------------------------------
+void ManualPaintModel::PaintImage(int px,int py, int pz)
+{
+    if (_brushtool==0)
+    {
+        BrushTool(px,py,pz);
+    }
+    if (_brushtool==1)
+    {
+        FillTool(px,py,pz);
+    }
+}
+
+
+//---------------------------------------------------------------------------
+void ManualPaintModel::FillTool(int px,int py, int pz)
+{
+    if ((px>=_minX) && (px<=_maxX) && (py>=_minY) && (py<=_maxY) && (pz>=_minZ) && (pz<=_maxZ))
+    {
+        _graylevelbasefill          = _image->GetScalarComponentAsDouble(px,py,pz, 0);
+        _pxfill                     = px;
+        _pyfill                     = py;
+        _pzfill                     = pz;
+        _distbasefill               = _distancefill*_distancefill;
+        _countRecursiveFill         = 0;
+        _countRecursiveFillProblem  = 0;
+        _countProgressingFill       = 0;
+        unsigned char *pImage = (unsigned char *)_auxImageFill->GetScalarPointer();
+        _usingAuxImageFill=false;
+        memset ( pImage , 0 , _maxX*_maxY*_maxZ );
+
+        FillToolRecursive(px,py,pz);
+        printf("--\n");
+
+        int ii,jj,kk;
+        while (_countRecursiveFillProblem!=0)
+        {
+            _countRecursiveFillProblem  = 0;
+            _usingAuxImageFill=true;
+            for(ii=0;ii<=_maxX;ii++)
+            {
+                for(jj=0;jj<=_maxY;jj++)
+                {
+                    for(kk=0;kk<=_maxZ;kk++)
+                    {
+                        pImage=(unsigned char *)_auxImageFill->GetScalarPointer(ii,jj,kk);
+                        if ( (*pImage)==1 )
+                        {
+                            FillToolRecursive(ii,jj,kk);
+                        }
+                    } // for kk
+                } // for jj
+            } //for ii
+            printf("-\n");
+        } // while
+
+    } //if _minX _maxX _minY _maxY _minZ _maxZ
+}
+
+
+//---------------------------------------------------------------------------
+void ManualPaintModel::FillToolRecursive(int px,int py, int pz)
+{
+    _countRecursiveFill++;
+
+    _countProgressingFill++;
+    if (_countProgressingFill>200000)
+    {
+        printf("R %ld \n", _countRecursiveFill );
+        _countProgressingFill=0;
+    }
+
+    if ((px>=_minX) && (px<=_maxX) && (py>=_minY) && (py<=_maxY) && (pz>=_minZ) && (pz<=_maxZ))
+    {
+        if (_usingAuxImageFill==true)
+        {
+            _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) &&
+                                        (_tmpiglfill>=_graylevelbasefill-_tolerancefill) &&
+                                        (_tmpiglfill<=_graylevelbasefill+_tolerancefill) &&
+                                        (_tmpDistfill<=_distbasefill);
+
+        if (  _auxGrayLevelValidationFill==true )
+        {
+            _image->SetScalarComponentFromFloat (px,py,pz, 0, (float)_graylevel );
+
+            if (_countRecursiveFill< _limitRecursionFill)
+            {
+
+                if (_2D3D==0) //2D
+                {
+                    if (_direction==0)  // YZ
+                    {
+                        //FillToolRecursive(px+1,py,pz);
+                        //FillToolRecursive(px-1,py,pz);
+                        FillToolRecursive(px,py+1,pz);
+                        FillToolRecursive(px,py-1,pz);
+                        FillToolRecursive(px,py,pz-1);
+                        FillToolRecursive(px,py,pz+1);
+                    }
+                    if (_direction==1) // XZ
+                    {
+                        FillToolRecursive(px+1,py,pz);
+                        FillToolRecursive(px-1,py,pz);
+                        //FillToolRecursive(px,py+1,pz);
+                        //FillToolRecursive(px,py-1,pz);
+                        FillToolRecursive(px,py,pz-1);
+                        FillToolRecursive(px,py,pz+1);
+                    }
+                    if (_direction==2) // XY
+                    {
+                        FillToolRecursive(px+1,py,pz);
+                        FillToolRecursive(px,py+1,pz);
+                        FillToolRecursive(px-1,py,pz);
+                        FillToolRecursive(px,py-1,pz);
+                        //FillToolRecursive(px,py,pz-1);
+                        //FillToolRecursive(px,py,pz+1);
+                    }
+                } else  {   // 3D
+
+                    FillToolRecursive(px+1,py,pz);
+                    FillToolRecursive(px-1,py,pz);
+                    FillToolRecursive(px,py+1,pz);
+                    FillToolRecursive(px,py-1,pz);
+                    FillToolRecursive(px,py,pz-1);
+                    FillToolRecursive(px,py,pz+1);
+                } // 2D 3D
+
+            } //_countRecursiveFill
+        } // _graylevel
+
+
+        if (  (_auxGrayLevelValidationFill==true ) &&
+              (_countRecursiveFill>= _limitRecursionFill)
+            )
+        {
+            _countRecursiveFillProblem++;
+
+                if (_2D3D==0) //2D
+                {
+                    if (_direction==0)  // YZ
+                    {
+                        //SetAuxImageFill(px+1,py,pz);
+                        //SetAuxImageFill(px-1,py,pz);
+                        SetAuxImageFill(px,py+1,pz);
+                        SetAuxImageFill(px,py-1,pz);
+                        SetAuxImageFill(px,py,pz-1);
+                        SetAuxImageFill(px,py,pz+1);
+                    }
+                    if (_direction==1) // XZ
+                    {
+                        SetAuxImageFill(px+1,py,pz);
+                        SetAuxImageFill(px-1,py,pz);
+                        //SetAuxImageFill(px,py+1,pz);
+                        //SetAuxImageFill(px,py-1,pz);
+                        SetAuxImageFill(px,py,pz-1);
+                        SetAuxImageFill(px,py,pz+1);
+                    }
+                    if (_direction==2) // XY
+                    {
+                        SetAuxImageFill(px+1,py,pz);
+                        SetAuxImageFill(px-1,py,pz);
+                        SetAuxImageFill(px,py+1,pz);
+                        SetAuxImageFill(px,py-1,pz);
+                        //SetAuxImageFill(px,py,pz-1);
+                        //SetAuxImageFill(px,py,pz+1);
+                    }
+                } else  {   // 3D
+
+                    SetAuxImageFill(px+1,py,pz);
+                    SetAuxImageFill(px-1,py,pz);
+                    SetAuxImageFill(px,py+1,pz);
+                    SetAuxImageFill(px,py-1,pz);
+                    SetAuxImageFill(px,py,pz-1);
+                    SetAuxImageFill(px,py,pz+1);
+                } // 2D 3D
+
+        } // _graylevel   //_limitRecursionFill
+
+
+    } //if _minX _maxX _minY _maxY _minZ _maxZ
+
+
+    _countRecursiveFill--;
+
+}
+
+//---------------------------------------------------------------------------
+void ManualPaintModel::SetAuxImageFill(int px,int py, int pz)
+{
+    if ((px>=_minX) && (px<=_maxX) && (py>=_minY) && (py<=_maxY) && (pz>=_minZ) && (pz<=_maxZ))
+    {
+        _auxImageFill->SetScalarComponentFromFloat (px, py, pz,0, 1);
+    }
+}
+
+//---------------------------------------------------------------------------
+void ManualPaintModel::BrushTool(int px,int py, int pz)
+{
+    if (_image!=NULL)
+    {
+        float value=(float)_graylevel;
+        int i,j,k;
+        int size = _brushsize-1;
+
+        int minX = px-size;
+        int maxX = px+size;
+        int minY = py-size;
+        int maxY = py+size;
+        int minZ = pz-size;
+        int 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
+        {
+        }
+
+
+        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))
+                    {
+                        zz=pz-k;
+                        zz=zz*zz;
+                        if (_brushform==0)
+                        {
+                            _image->SetScalarComponentFromFloat (i,j,k, 0, value );
+                        } else if (_brushform==1)
+                        {
+                            if ((xx+yy+zz)<=rr)
+                            {
+                                _image->SetScalarComponentFromFloat (i,j,k, 0, value );
+                            }
+                        } // _brushform
+
+                    } //if _minX _maxX _minY _maxY _minZ _maxZ
+
+                }//k
+            }//j
+        }//i
+        _image->Modified();
+    } else  {
+        printf("ERROR : bbcreaMaracasvisu::vtkInteractorManualPaint::PaintImage :  Image not set. \n");
+    } // _image
+}
+
+
+//---------------------------------------------------------------------------
+void ManualPaintModel::SetBrushSize( int brushsize )
+{
+    _brushsize = brushsize;
+}
+
+//---------------------------------------------------------------------------
+void ManualPaintModel::SetGrayLevel( double graylevel )
+{
+    _graylevel = graylevel;
+}
+
+//---------------------------------------------------------------------------
+void ManualPaintModel::SetBrushForm( int brushform )
+{
+    _brushform = brushform;
+}
+
+//---------------------------------------------------------------------------
+void ManualPaintModel::SetBrushTool( int brushtool )
+{
+    _brushtool = brushtool;
+}
+
+//---------------------------------------------------------------------------
+void ManualPaintModel::Set2D3D( int dim2D3D )
+{
+    _2D3D = dim2D3D;
+}
+
+//---------------------------------------------------------------------------
+void ManualPaintModel::SetToleranceFill(double tolerancefill)
+{
+    _tolerancefill = tolerancefill;
+}
+
+//---------------------------------------------------------------------------
+void ManualPaintModel::SetDistanceFill(int distancefill)
+{
+    _distancefill = distancefill;
+}
+
+//---------------------------------------------------------------------------
+void ManualPaintModel::SetDirection(int direction)
+{
+    _direction = direction;
+}
diff --git a/lib/maracasVisuLib/src/interface/wxWindows/widgets/manualPaint/FillFilter.h b/lib/maracasVisuLib/src/interface/wxWindows/widgets/manualPaint/FillFilter.h
new file mode 100644 (file)
index 0000000..a0d7af8
--- /dev/null
@@ -0,0 +1,68 @@
+#ifndef _MANUAL_PAINT_MODEL_H_
+#define _MANUAL_PAINT_MODEL_H_
+
+#include <vtkImageData.h>
+
+
+class ManualPaintModel  {
+public:
+       ManualPaintModel();
+       virtual ~ManualPaintModel();
+
+    void SetImage(vtkImageData *image);
+    void PaintImage(int px,int py, int pz);
+    void SetBrushSize( int brushsize );
+    void SetBrushForm( int brushform );
+    void SetBrushTool( int brushtool );
+    void Set2D3D( int dim2D3D );
+    void SetGrayLevel( double graylevel );
+
+    void FillTool(int px,int py, int pz);
+    void FillToolRecursive(int px,int py, int pz);
+
+    void BrushTool(int px,int py, int pz);
+    void SetToleranceFill(double tolerancefill);
+    void SetDistanceFill(int distancefill);
+    void SetDirection(int direction);
+
+private:
+    vtkImageData    *_image;
+    int             _minX;
+    int             _maxX;
+    int             _minY;
+    int             _maxY;
+    int             _minZ;
+    int             _maxZ;
+    int             _brushsize;
+    int             _brushform;
+    int             _brushtool;
+    bool            _2D3D;
+    double          _graylevel;
+    double          _tolerancefill;
+    int             _distancefill;
+    double          _graylevelbasefill;
+    int             _direction;
+
+    int             _pxfill;
+    int             _pyfill;
+    int             _pzfill;
+    double          _distbasefill;
+    double          _tmpDistfill;
+    double          _tmpiglfill;
+    long int        _countRecursiveFill;
+    long int        _countRecursiveFillProblem;
+    vtkImageData    *_auxImageFill;
+    bool             _usingAuxImageFill;
+    bool             _auxGrayLevelValidationFill;
+    long int        _countProgressingFill;
+    long int        _limitRecursionFill;
+
+
+    void    SetAuxImageFill(int px,int py, int pz);
+
+protected:
+
+};
+
+
+#endif // _MANUAL_PAINT_MODEL_H_