From 5c6b0f79c56a52bb4b7fa4beff359ba99ae3293a Mon Sep 17 00:00:00 2001 From: Eduardo Davila Date: Thu, 11 Nov 2010 15:54:23 +0000 Subject: [PATCH] *** empty log message *** --- .../widgets/manualPaint/BrushFilter.cpp | 93 +++-- .../widgets/manualPaint/BrushFilter.h | 53 +-- .../widgets/manualPaint/FillFilter.cpp | 138 +------ .../widgets/manualPaint/FillFilter.h | 34 +- .../widgets/manualPaint/ManualPaintModel.cpp | 358 ++---------------- .../widgets/manualPaint/ManualPaintModel.h | 56 +-- .../widgets/manualPaint/ManualPaintPanel.cpp | 4 +- .../widgets/manualPaint/ManualPaintPanel.h | 2 +- .../manualPaint/baseFilterManualPaint.cpp | 121 ++++++ .../manualPaint/baseFilterManualPaint.h | 45 +++ .../manualPaint/wxManualPaintPanel.cpp | 7 +- 11 files changed, 291 insertions(+), 620 deletions(-) create mode 100644 lib/maracasVisuLib/src/interface/wxWindows/widgets/manualPaint/baseFilterManualPaint.cpp create mode 100644 lib/maracasVisuLib/src/interface/wxWindows/widgets/manualPaint/baseFilterManualPaint.h diff --git a/lib/maracasVisuLib/src/interface/wxWindows/widgets/manualPaint/BrushFilter.cpp b/lib/maracasVisuLib/src/interface/wxWindows/widgets/manualPaint/BrushFilter.cpp index 79b39f5..e5371b7 100644 --- a/lib/maracasVisuLib/src/interface/wxWindows/widgets/manualPaint/BrushFilter.cpp +++ b/lib/maracasVisuLib/src/interface/wxWindows/widgets/manualPaint/BrushFilter.cpp @@ -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; -} - diff --git a/lib/maracasVisuLib/src/interface/wxWindows/widgets/manualPaint/BrushFilter.h b/lib/maracasVisuLib/src/interface/wxWindows/widgets/manualPaint/BrushFilter.h index 1ee180e..a39cd6e 100644 --- a/lib/maracasVisuLib/src/interface/wxWindows/widgets/manualPaint/BrushFilter.h +++ b/lib/maracasVisuLib/src/interface/wxWindows/widgets/manualPaint/BrushFilter.h @@ -1,72 +1,25 @@ #ifndef _BRUSH_FILTER_H_ #define _BRUSH_FILTER_H_ -#include +#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: diff --git a/lib/maracasVisuLib/src/interface/wxWindows/widgets/manualPaint/FillFilter.cpp b/lib/maracasVisuLib/src/interface/wxWindows/widgets/manualPaint/FillFilter.cpp index edb4eff..d88e1b1 100644 --- a/lib/maracasVisuLib/src/interface/wxWindows/widgets/manualPaint/FillFilter.cpp +++ b/lib/maracasVisuLib/src/interface/wxWindows/widgets/manualPaint/FillFilter.cpp @@ -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; -} diff --git a/lib/maracasVisuLib/src/interface/wxWindows/widgets/manualPaint/FillFilter.h b/lib/maracasVisuLib/src/interface/wxWindows/widgets/manualPaint/FillFilter.h index 3d9084f..e6c7188 100644 --- a/lib/maracasVisuLib/src/interface/wxWindows/widgets/manualPaint/FillFilter.h +++ b/lib/maracasVisuLib/src/interface/wxWindows/widgets/manualPaint/FillFilter.h @@ -1,43 +1,24 @@ -#ifndef _MANUAL_PAINT_MODEL_H_ -#define _MANUAL_PAINT_MODEL_H_ +#ifndef _FILL_FILTER_H_ +#define _FILL_FILTER_H_ -#include +#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_ diff --git a/lib/maracasVisuLib/src/interface/wxWindows/widgets/manualPaint/ManualPaintModel.cpp b/lib/maracasVisuLib/src/interface/wxWindows/widgets/manualPaint/ManualPaintModel.cpp index 32d6827..ee34a4a 100644 --- a/lib/maracasVisuLib/src/interface/wxWindows/widgets/manualPaint/ManualPaintModel.cpp +++ b/lib/maracasVisuLib/src/interface/wxWindows/widgets/manualPaint/ManualPaintModel.cpp @@ -4,385 +4,91 @@ 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; -} diff --git a/lib/maracasVisuLib/src/interface/wxWindows/widgets/manualPaint/ManualPaintModel.h b/lib/maracasVisuLib/src/interface/wxWindows/widgets/manualPaint/ManualPaintModel.h index a0d7af8..ca60e18 100644 --- a/lib/maracasVisuLib/src/interface/wxWindows/widgets/manualPaint/ManualPaintModel.h +++ b/lib/maracasVisuLib/src/interface/wxWindows/widgets/manualPaint/ManualPaintModel.h @@ -1,7 +1,8 @@ #ifndef _MANUAL_PAINT_MODEL_H_ #define _MANUAL_PAINT_MODEL_H_ -#include +#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: }; diff --git a/lib/maracasVisuLib/src/interface/wxWindows/widgets/manualPaint/ManualPaintPanel.cpp b/lib/maracasVisuLib/src/interface/wxWindows/widgets/manualPaint/ManualPaintPanel.cpp index c2e57a1..4f9cc81 100644 --- a/lib/maracasVisuLib/src/interface/wxWindows/widgets/manualPaint/ManualPaintPanel.cpp +++ b/lib/maracasVisuLib/src/interface/wxWindows/widgets/manualPaint/ManualPaintPanel.cpp @@ -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"); } diff --git a/lib/maracasVisuLib/src/interface/wxWindows/widgets/manualPaint/ManualPaintPanel.h b/lib/maracasVisuLib/src/interface/wxWindows/widgets/manualPaint/ManualPaintPanel.h index b581bad..7856131 100644 --- a/lib/maracasVisuLib/src/interface/wxWindows/widgets/manualPaint/ManualPaintPanel.h +++ b/lib/maracasVisuLib/src/interface/wxWindows/widgets/manualPaint/ManualPaintPanel.h @@ -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 index 0000000..90d153b --- /dev/null +++ b/lib/maracasVisuLib/src/interface/wxWindows/widgets/manualPaint/baseFilterManualPaint.cpp @@ -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 + +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_ diff --git a/lib/maracasVisuLib/src/interface/wxWindows/widgets/manualPaint/wxManualPaintPanel.cpp b/lib/maracasVisuLib/src/interface/wxWindows/widgets/manualPaint/wxManualPaintPanel.cpp index 041df32..78f1d03 100644 --- a/lib/maracasVisuLib/src/interface/wxWindows/widgets/manualPaint/wxManualPaintPanel.cpp +++ b/lib/maracasVisuLib/src/interface/wxWindows/widgets/manualPaint/wxManualPaintPanel.cpp @@ -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 { -- 2.45.1