]> Creatis software - creaMaracasVisu.git/commitdiff
*** empty log message ***
authorEduardo Davila <Eduardo.Davila@creatis.insa-lyon.fr>
Thu, 11 Nov 2010 15:54:23 +0000 (15:54 +0000)
committerEduardo Davila <Eduardo.Davila@creatis.insa-lyon.fr>
Thu, 11 Nov 2010 15:54:23 +0000 (15:54 +0000)
lib/maracasVisuLib/src/interface/wxWindows/widgets/manualPaint/BrushFilter.cpp
lib/maracasVisuLib/src/interface/wxWindows/widgets/manualPaint/BrushFilter.h
lib/maracasVisuLib/src/interface/wxWindows/widgets/manualPaint/FillFilter.cpp
lib/maracasVisuLib/src/interface/wxWindows/widgets/manualPaint/FillFilter.h
lib/maracasVisuLib/src/interface/wxWindows/widgets/manualPaint/ManualPaintModel.cpp
lib/maracasVisuLib/src/interface/wxWindows/widgets/manualPaint/ManualPaintModel.h
lib/maracasVisuLib/src/interface/wxWindows/widgets/manualPaint/ManualPaintPanel.cpp
lib/maracasVisuLib/src/interface/wxWindows/widgets/manualPaint/ManualPaintPanel.h
lib/maracasVisuLib/src/interface/wxWindows/widgets/manualPaint/baseFilterManualPaint.cpp [new file with mode: 0644]
lib/maracasVisuLib/src/interface/wxWindows/widgets/manualPaint/baseFilterManualPaint.h [new file with mode: 0644]
lib/maracasVisuLib/src/interface/wxWindows/widgets/manualPaint/wxManualPaintPanel.cpp

index 79b39f5855ae1a154627c7ab1ade9eb39933137e..e5371b77ad8d9342e23e44c4392f864b267bc8e6 100644 (file)
@@ -1,14 +1,10 @@
 
 #include "BrushFilter.h"
 
-
-BrushFilter::BrushFilter()
+baseFilterManualPaint::baseFilterManualPaint()
 {
     _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;
@@ -27,12 +23,44 @@ BrushFilter::BrushFilter()
 }
 
 //---------------------------------------------------------------------------
-BrushFilter::~BrushFilter()
+baseFilterManualPaint::~baseFilterManualPaint()  // virtual
+{
+}
+
+//---------------------------------------------------------------------------
+void baseFilterManualPaint::Run()  // virtual
+{
+}
+
+
+//---------------------------------------------------------------------------
+void baseFilterManualPaint::SetGrayLevel( double graylevel )
+{
+    _graylevel = graylevel;
+}
+
+//---------------------------------------------------------------------------
+void baseFilterManualPaint::Set2D3D( int dim2D3D )
+{
+    _2D3D = dim2D3D;
+}
+
+//---------------------------------------------------------------------------
+void baseFilterManualPaint::SetDirection(int direction)
+{
+    _direction = direction;
+}
+
+//---------------------------------------------------------------------------
+void baseFilterManualPaint::SetPoint(int px,int py, int pz)
 {
+    _px=px;
+    _py=py;
+    _pz=pz;
 }
 
 //---------------------------------------------------------------------------
-void BrushFilter::SetImage(vtkImageData *image)
+void baseFilterManualPaint::SetImage(vtkImageData *image)
 {
     _image=image;
     int ext[6];
@@ -43,11 +71,10 @@ void BrushFilter::SetImage(vtkImageData *image)
     _maxX=ext[1]-ext[0];
     _maxY=ext[3]-ext[2];
     _maxZ=ext[5]-ext[4];
-
 }
 
 //---------------------------------------------------------------------------
-void BrushFilter::ResetGeneralMinMax()
+void baseFilterManualPaint::ResetGeneralMinMax()
 {
        _pMinX=10000;
        _pMinY=10000;
@@ -59,7 +86,7 @@ void BrushFilter::ResetGeneralMinMax()
 
 
 //---------------------------------------------------------------------------
-void BrushFilter::SetGeneralMinMax(int minX,int maxX,int minY,int maxY,int minZ,int maxZ)
+void baseFilterManualPaint::SetGeneralMinMax(int minX,int maxX,int minY,int maxY,int minZ,int maxZ)
 {
        if (_pMinX>minX)
         {
@@ -94,6 +121,24 @@ void BrushFilter::SetGeneralMinMax(int minX,int maxX,int minY,int maxY,int minZ,
 }
 
 
+
+//---------------------------------------------------------------------------
+//---------------------------------------------------------------------------
+//---------------------------------------------------------------------------
+
+
+BrushFilter::BrushFilter()
+{
+    _brushsize          =   1;
+    _brushform          =   0;      // 0 rectangle-box  ,   1 circle-sphere
+    _brushtool          =   0;      // 0 pencil         ,   1 fill
+}
+
+//---------------------------------------------------------------------------
+BrushFilter::~BrushFilter()  // virtual
+{
+}
+
 //---------------------------------------------------------------------------
 void BrushFilter::FindMinMaxBrush(int &minX,int &maxX,int &minY,int &maxY,int &minZ,int &maxZ,int &size)
 {
@@ -165,7 +210,7 @@ void BrushFilter::FindMinMaxBrush(int &minX,int &maxX,int &minY,int &maxY,int &m
 
 
 //---------------------------------------------------------------------------
-void BrushFilter::Run()
+void BrushFilter::Run()  // virtual
 {
     if (_image!=NULL)
     {
@@ -221,12 +266,6 @@ void BrushFilter::SetBrushSize( int brushsize )
     _brushsize = brushsize;
 }
 
-//---------------------------------------------------------------------------
-void BrushFilter::SetGrayLevel( double graylevel )
-{
-    _graylevel = graylevel;
-}
-
 //---------------------------------------------------------------------------
 void BrushFilter::SetBrushForm( int brushform )
 {
@@ -239,24 +278,4 @@ void BrushFilter::SetBrushTool( int brushtool )
     _brushtool = brushtool;
 }
 
-//---------------------------------------------------------------------------
-void BrushFilter::Set2D3D( int dim2D3D )
-{
-    _2D3D = dim2D3D;
-}
-
-//---------------------------------------------------------------------------
-void BrushFilter::SetDirection(int direction)
-{
-    _direction = direction;
-}
-
-//---------------------------------------------------------------------------
-void BrushFilter::SetPoint(int px,int py, int pz)
-{
-    _px=px;
-    _py=py;
-    _pz=pz;
-}
-
 
index 1ee180ef26555b464bb1e5a50c9e5042272f6a73..a39cd6edb4742d61b8c85509cc200dcd82f48621 100644 (file)
@@ -1,72 +1,25 @@
 #ifndef _BRUSH_FILTER_H_
 #define _BRUSH_FILTER_H_
 
-#include <vtkImageData.h>
+#include "baseFilterManualPaint.h"
 
-
-class BrushFilter  {
+class BrushFilter : public  baseFilterManualPaint {
 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();
+    virtual void Run();
 
 
 private:
-    vtkImageData    *_image;
-    int             _direction;
-    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:
 
index edb4effb6cd30679f7beebbb4e9819581018afe1..d88e1b157560546dade5592473e98993075f3d03 100644 (file)
@@ -4,18 +4,9 @@
 
 FillFilter::FillFilter()
 {
-    _graylevel          =   0.0;
-    _2D3D               =   1;      // 0 2D             ,   1 true 3D
-    _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;
 }
 
@@ -29,20 +20,9 @@ FillFilter::~FillFilter()
 }
 
 //---------------------------------------------------------------------------
-void FillFilter::SetImage(vtkImageData *image)
+void FillFilter::SetImage(vtkImageData *image) // virtual
 {
-    _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];
-
-
+    baseFilterManualPaint::SetImage(image);
     if (_auxImageFill!=NULL)
     {
         _auxImageFill->Delete();
@@ -54,18 +34,18 @@ void FillFilter::SetImage(vtkImageData *image)
        _auxImageFill->SetWholeExtent( 0 , _maxX , 0 , _maxY , 0, _maxZ );
        _auxImageFill->SetScalarTypeToUnsignedChar();
        _auxImageFill->AllocateScalars();
-
 }
 
+
 //---------------------------------------------------------------------------
-void FillFilter::FillTool(int px,int py, int pz)
+void FillFilter::Run() // virtual
 {
-    if ((px>=_minX) && (px<=_maxX) && (py>=_minY) && (py<=_maxY) && (pz>=_minZ) && (pz<=_maxZ))
+    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;
+        _graylevelbasefill          = _image->GetScalarComponentAsDouble(_px,_py,_pz, 0);
+        _pxfill                     = _px;
+        _pyfill                     = _py;
+        _pzfill                     = _pz;
         _distbasefill               = _distancefill*_distancefill;
         _countRecursiveFill         = 0;
         _countRecursiveFillProblem  = 0;
@@ -74,7 +54,7 @@ void FillFilter::FillTool(int px,int py, int pz)
         _usingAuxImageFill=false;
         memset ( pImage , 0 , _maxX*_maxY*_maxZ );
 
-        FillToolRecursive(px,py,pz);
+        FillToolRecursive(_px,_py,_pz);
         printf("--\n");
 
         int ii,jj,kk;
@@ -243,99 +223,6 @@ void FillFilter::SetAuxImageFill(int px,int py, int pz)
     }
 }
 
-//---------------------------------------------------------------------------
-void FillFilter::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 FillFilter::SetGrayLevel( double graylevel )
-{
-    _graylevel = graylevel;
-}
-
-
-
-//---------------------------------------------------------------------------
-void FillFilter::Set2D3D( int dim2D3D )
-{
-    _2D3D = dim2D3D;
-}
 
 //---------------------------------------------------------------------------
 void FillFilter::SetToleranceFill(double tolerancefill)
@@ -349,9 +236,4 @@ void FillFilter::SetDistanceFill(int distancefill)
     _distancefill = distancefill;
 }
 
-//---------------------------------------------------------------------------
-void FillFilter::SetDirection(int direction)
-{
-    _direction = direction;
-}
 
index 3d9084f3ebf001af50c1eef9b11d96c805cfdeca..e6c7188787871f4c67c2dc87bb008a99b5d45e27 100644 (file)
@@ -1,43 +1,24 @@
-#ifndef _MANUAL_PAINT_MODEL_H_
-#define _MANUAL_PAINT_MODEL_H_
+#ifndef _FILL_FILTER_H_
+#define _FILL_FILTER_H_
 
-#include <vtkImageData.h>
+#include "baseFilterManualPaint.h"
 
-
-class FillFilter  {
+class FillFilter : public baseFilterManualPaint {
 public:
        FillFilter();
        virtual ~FillFilter();
 
-    void SetImage(vtkImageData *image);
-    void Set2D3D( int dim2D3D );
-    void SetGrayLevel( double graylevel );
-
-    void FillTool(int px,int py, int pz);
+    void Run();
     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);
+    virtual void SetImage(vtkImageData *image);
 
 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;
@@ -53,7 +34,6 @@ private:
     long int        _countProgressingFill;
     long int        _limitRecursionFill;
 
-
     void    SetAuxImageFill(int px,int py, int pz);
 
 protected:
@@ -61,4 +41,4 @@ protected:
 };
 
 
-#endif // _MANUAL_PAINT_MODEL_H_
+#endif // _FILL_FILTER_H_
index 32d682779874ed9b65493bf13184d5b8c00884de..ee34a4a27638d75ab615250b4bf78a9dce7de7dc 100644 (file)
 
 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;
+    _tool           =  0;      // 0 pencil         ,   1 fill
+    _brushfilter    =  new BrushFilter();
+    _fillfilter     =  new FillFilter();
 }
 
 //---------------------------------------------------------------------------
 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();
-
+    delete _brushfilter;
+    delete _fillfilter;
 }
 
 //---------------------------------------------------------------------------
 void ManualPaintModel::PaintImage(int px,int py, int pz)
 {
-    if (_brushtool==0)
+    if (_tool==0)
     {
-        BrushTool(px,py,pz);
+        _brushfilter->SetPoint(px,py,pz);
+        _brushfilter->Run();
     }
-    if (_brushtool==1)
+    if (_tool==1)
     {
-        FillTool(px,py,pz);
+        _fillfilter->SetPoint(px,py,pz);
+        _fillfilter->Run();
     }
 }
 
-
 //---------------------------------------------------------------------------
-void ManualPaintModel::FillTool(int px,int py, int pz)
+void ManualPaintModel::SetTool( int tool )
 {
-    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
+    _tool = tool;
 }
 
-
 //---------------------------------------------------------------------------
-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)
+void ManualPaintModel::Set2D3D( int dim2D3D )
 {
-    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
+    _brushfilter->Set2D3D(dim2D3D);
+    _fillfilter->Set2D3D(dim2D3D);
 }
 
 
 //---------------------------------------------------------------------------
-void ManualPaintModel::SetBrushSize( int brushsize )
+void ManualPaintModel::SetImage(vtkImageData *image)
 {
-    _brushsize = brushsize;
+    _brushfilter->SetImage(image);
+    _fillfilter->SetImage(image);
 }
 
 //---------------------------------------------------------------------------
 void ManualPaintModel::SetGrayLevel( double graylevel )
 {
-    _graylevel = graylevel;
+    _brushfilter->SetGrayLevel(graylevel);
+    _fillfilter->SetGrayLevel(graylevel);
 }
 
 //---------------------------------------------------------------------------
-void ManualPaintModel::SetBrushForm( int brushform )
+void ManualPaintModel::SetDirection(int direction)
 {
-    _brushform = brushform;
+    _brushfilter->SetDirection(direction);
+    _fillfilter->SetDirection(direction);
 }
 
+
 //---------------------------------------------------------------------------
-void ManualPaintModel::SetBrushTool( int brushtool )
+void ManualPaintModel::SetBrushSize( int brushsize )
 {
-    _brushtool = brushtool;
+    _brushfilter->SetBrushSize(brushsize);
 }
 
+
 //---------------------------------------------------------------------------
-void ManualPaintModel::Set2D3D( int dim2D3D )
+void ManualPaintModel::SetBrushForm( int brushform )
 {
-    _2D3D = dim2D3D;
+    _brushfilter->SetBrushForm(brushform);
 }
 
 //---------------------------------------------------------------------------
 void ManualPaintModel::SetToleranceFill(double tolerancefill)
 {
-    _tolerancefill = tolerancefill;
+    _fillfilter->SetToleranceFill(tolerancefill);
 }
 
 //---------------------------------------------------------------------------
 void ManualPaintModel::SetDistanceFill(int distancefill)
 {
-    _distancefill = distancefill;
+    _fillfilter->SetDistanceFill(distancefill);
 }
 
-//---------------------------------------------------------------------------
-void ManualPaintModel::SetDirection(int direction)
-{
-    _direction = direction;
-}
index a0d7af85bb833e92894ec112c0ae2731b5d8b6b3..ca60e18b7d807b4cb6a26f6b1ebe31901fe905ca 100644 (file)
@@ -1,7 +1,8 @@
 #ifndef _MANUAL_PAINT_MODEL_H_
 #define _MANUAL_PAINT_MODEL_H_
 
-#include <vtkImageData.h>
+#include "BrushFilter.h"
+#include "FillFilter.h"
 
 
 class ManualPaintModel  {
@@ -9,57 +10,22 @@ public:
        ManualPaintModel();
        virtual ~ManualPaintModel();
 
+    void SetTool( int tool );
+    void Set2D3D( int dim2D3D );
     void SetImage(vtkImageData *image);
-    void PaintImage(int px,int py, int pz);
+    void SetGrayLevel( double graylevel );
+    void SetDirection(int direction);
     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 PaintImage(int px,int py, int pz);
 
-    void    SetAuxImageFill(int px,int py, int pz);
 
+private:
+    int             _tool;
+    BrushFilter     *_brushfilter;
+    FillFilter      *_fillfilter;
 protected:
 
 };
index c2e57a128c43a7f3009e46de605492ae50db1799..4f9cc81880edd9ab9a390045cfb72a98650a0dbb 100644 (file)
@@ -44,11 +44,11 @@ void ManualPaintPanel::SetGrayLevel( double graylevel )
 }
 
 //---------------------------------------------------------------------------
-void ManualPaintPanel::SetBrushTool(int brushtool)
+void ManualPaintPanel::SetTool(int tool)
 {
     if (_manualPaintModel!=NULL)
     {
-        _manualPaintModel->SetBrushTool( brushtool );
+        _manualPaintModel->SetTool( tool );
     } else {
        printf("ERROR  in  ManualPaintPanel  _manualPaintModel not set.\n");
     }
index b581bad5b57d628b8ccf122345e709ae5d6bb33d..78561315a2755f476743de97ae707a343005418e 100644 (file)
@@ -11,7 +11,7 @@ public:
     void SetManualPaintModel(ManualPaintModel* manualPaintModel);
     void SetBrushSize( int brushsize );
     void SetGrayLevel( double graylevel );
-    void SetBrushTool(int brushtool);
+    void SetTool(int tool);
     void Set2D3D(int dim2D3D);
     void SetBrushForm(int brushform);
     void SetToleranceFill(double tolerancefill);
diff --git a/lib/maracasVisuLib/src/interface/wxWindows/widgets/manualPaint/baseFilterManualPaint.cpp b/lib/maracasVisuLib/src/interface/wxWindows/widgets/manualPaint/baseFilterManualPaint.cpp
new file mode 100644 (file)
index 0000000..90d153b
--- /dev/null
@@ -0,0 +1,121 @@
+
+#include "baseFilterManualPaint.h"
+
+baseFilterManualPaint::baseFilterManualPaint()
+{
+    _graylevel          =   0.0;
+    _2D3D               =   1;      // 0 2D             ,   1 true 3D
+    _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;
+}
+
+//---------------------------------------------------------------------------
+baseFilterManualPaint::~baseFilterManualPaint()  // virtual
+{
+}
+
+//---------------------------------------------------------------------------
+void baseFilterManualPaint::Run()  // virtual
+{
+}
+
+
+//---------------------------------------------------------------------------
+void baseFilterManualPaint::SetGrayLevel( double graylevel )
+{
+    _graylevel = graylevel;
+}
+
+//---------------------------------------------------------------------------
+void baseFilterManualPaint::Set2D3D( int dim2D3D )
+{
+    _2D3D = dim2D3D;
+}
+
+//---------------------------------------------------------------------------
+void baseFilterManualPaint::SetDirection(int direction)
+{
+    _direction = direction;
+}
+
+//---------------------------------------------------------------------------
+void baseFilterManualPaint::SetPoint(int px,int py, int pz)
+{
+    _px=px;
+    _py=py;
+    _pz=pz;
+}
+
+//---------------------------------------------------------------------------
+void baseFilterManualPaint::SetImage(vtkImageData *image)
+{
+    int ext[6];
+    _image=image;
+    _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 baseFilterManualPaint::ResetGeneralMinMax()
+{
+       _pMinX=10000;
+       _pMinY=10000;
+       _pMinZ=10000;
+       _pMaxX=-10000;
+       _pMaxY=-10000;
+       _pMaxZ=-10000;
+}
+
+
+//---------------------------------------------------------------------------
+void baseFilterManualPaint::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;
+        }
+
+}
+
diff --git a/lib/maracasVisuLib/src/interface/wxWindows/widgets/manualPaint/baseFilterManualPaint.h b/lib/maracasVisuLib/src/interface/wxWindows/widgets/manualPaint/baseFilterManualPaint.h
new file mode 100644 (file)
index 0000000..ab4fa78
--- /dev/null
@@ -0,0 +1,45 @@
+#ifndef _BASE_FILTER_MANUAL_PAINT_H_
+#define _BASE_FILTER_MANUAL_PAINT_H_
+
+#include <vtkImageData.h>
+
+class baseFilterManualPaint  {
+
+    public:
+        baseFilterManualPaint();
+        virtual ~baseFilterManualPaint();
+
+        virtual void SetImage(vtkImageData *image);
+        void SetPoint(int px,int py, int pz);
+        void Set2D3D( int dim2D3D );
+        void SetGrayLevel( double graylevel );
+        void SetDirection(int direction);
+        void ResetGeneralMinMax();
+        void SetGeneralMinMax(int minX,int maxX,int minY,int maxY,int minZ,int maxZ);
+        virtual void Run();
+
+    private:
+
+    protected:
+        vtkImageData    *_image;
+        int             _direction;
+        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;
+        bool            _2D3D;
+        double          _graylevel;
+};
+
+#endif // _BASE_FILTER_MANUAL_PAINT_H_
index 041df329b942b0b4bacf426a200a0b7ffcc40884..78f1d036f0ef660d83cd37d1279542b56aaa7bd0 100644 (file)
@@ -25,8 +25,8 @@ wxManualPaintPanel::wxManualPaintPanel(wxWindow * parent)
 
 
        wxString lst2D3D[2];
-       lst2D3D[0]=_T("2D circle");
-       lst2D3D[1]=_T("3D sphere");
+       lst2D3D[0]=_T("2D");
+       lst2D3D[1]=_T("3D");
                     _rb2D3D         = new wxRadioBox(panel, -1, _T("2D / 3D"), wxDefaultPosition, wxSize(270,45), 2 , lst2D3D,  2, wxRA_SPECIFY_COLS);
     _rb2D3D->SetSelection(1);
 
@@ -218,7 +218,6 @@ void wxManualPaintPanel::On2D3D(wxCommandEvent &event)
 //---------------------------------------------------------------------------
 void wxManualPaintPanel::OnBrushForm(wxCommandEvent &event)
 {
-    printf("EED wxManualPaintPanel::OnBrushForm BrushForm=%d \n", _rbBrushForm->GetSelection());
     SetBrushForm( _rbBrushForm->GetSelection() );
 }
 
@@ -226,7 +225,7 @@ void wxManualPaintPanel::OnBrushForm(wxCommandEvent &event)
 void wxManualPaintPanel::OnBrushTool(wxCommandEvent &event)
 {
     DisableControls();
-    SetBrushTool( _rbBrushTool->GetSelection() );
+    SetTool( _rbBrushTool->GetSelection() );
 
     if (_rbBrushTool->GetSelection()==0)  //Brush tool
     {