#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;
}
//---------------------------------------------------------------------------
-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];
_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;
//---------------------------------------------------------------------------
-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)
{
}
+
+//---------------------------------------------------------------------------
+//---------------------------------------------------------------------------
+//---------------------------------------------------------------------------
+
+
+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)
{
//---------------------------------------------------------------------------
-void BrushFilter::Run()
+void BrushFilter::Run() // virtual
{
if (_image!=NULL)
{
_brushsize = brushsize;
}
-//---------------------------------------------------------------------------
-void BrushFilter::SetGrayLevel( double graylevel )
-{
- _graylevel = graylevel;
-}
-
//---------------------------------------------------------------------------
void BrushFilter::SetBrushForm( int brushform )
{
_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;
-}
-
#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:
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;
}
}
//---------------------------------------------------------------------------
-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();
_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;
_usingAuxImageFill=false;
memset ( pImage , 0 , _maxX*_maxY*_maxZ );
- FillToolRecursive(px,py,pz);
+ FillToolRecursive(_px,_py,_pz);
printf("--\n");
int ii,jj,kk;
}
}
-//---------------------------------------------------------------------------
-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)
_distancefill = distancefill;
}
-//---------------------------------------------------------------------------
-void FillFilter::SetDirection(int direction)
-{
- _direction = direction;
-}
-#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;
long int _countProgressingFill;
long int _limitRecursionFill;
-
void SetAuxImageFill(int px,int py, int pz);
protected:
};
-#endif // _MANUAL_PAINT_MODEL_H_
+#endif // _FILL_FILTER_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;
+ _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;
-}
#ifndef _MANUAL_PAINT_MODEL_H_
#define _MANUAL_PAINT_MODEL_H_
-#include <vtkImageData.h>
+#include "BrushFilter.h"
+#include "FillFilter.h"
class ManualPaintModel {
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:
};
}
//---------------------------------------------------------------------------
-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");
}
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);
--- /dev/null
+
+#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;
+ }
+
+}
+
--- /dev/null
+#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_
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);
//---------------------------------------------------------------------------
void wxManualPaintPanel::OnBrushForm(wxCommandEvent &event)
{
- printf("EED wxManualPaintPanel::OnBrushForm BrushForm=%d \n", _rbBrushForm->GetSelection());
SetBrushForm( _rbBrushForm->GetSelection() );
}
void wxManualPaintPanel::OnBrushTool(wxCommandEvent &event)
{
DisableControls();
- SetBrushTool( _rbBrushTool->GetSelection() );
+ SetTool( _rbBrushTool->GetSelection() );
if (_rbBrushTool->GetSelection()==0) //Brush tool
{