X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=lib%2FmaracasVisuLib%2Fsrc%2Finterface%2FwxWindows%2Fwidgets%2FmanualPaint%2FManualPaintModel.cpp;h=ee34a4a27638d75ab615250b4bf78a9dce7de7dc;hb=3eef3f302abd6996a4eaebb0536770bca9bf428d;hp=ab44d0afe8d0c856963e233c53edad95f827a9ce;hpb=23b33a3a7e3f42eacbaad218510fb77e27aa9c2f;p=creaMaracasVisu.git diff --git a/lib/maracasVisuLib/src/interface/wxWindows/widgets/manualPaint/ManualPaintModel.cpp b/lib/maracasVisuLib/src/interface/wxWindows/widgets/manualPaint/ManualPaintModel.cpp index ab44d0a..ee34a4a 100644 --- a/lib/maracasVisuLib/src/interface/wxWindows/widgets/manualPaint/ManualPaintModel.cpp +++ b/lib/maracasVisuLib/src/interface/wxWindows/widgets/manualPaint/ManualPaintModel.cpp @@ -4,188 +4,91 @@ ManualPaintModel::ManualPaintModel() { - _graylevel = 0.0; - _brushsize = 1; - _brushform = 0; // 0 rectangle-box , 1 circle-sphere - _2D3D = 0; // 0 2D , 1 true 3D - _brushtool = 0; // 0 pencil , 1 fill - - _minX=0; - _minY=0; - _minZ=0; - _maxX=0; - _maxY=0; - _maxZ=0; + _tool = 0; // 0 pencil , 1 fill + _brushfilter = new BrushFilter(); + _fillfilter = new FillFilter(); } //--------------------------------------------------------------------------- ManualPaintModel::~ManualPaintModel() { + delete _brushfilter; + delete _fillfilter; } -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]; -} - +//--------------------------------------------------------------------------- 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; - FillToolRecursive(px,py,pz); - } //if _minX _maxX _minY _maxY _minZ _maxZ + _tool = tool; } - -void ManualPaintModel::FillToolRecursive(int px,int py, int pz) -{ - - double dist=(px-_pxfill) * (px-_pxfill) + (py-_pyfill) * (py-_pyfill) + (pz-_pzfill) * (pz-_pzfill); - - if ((px>=_minX) && (px<=_maxX) && (py>=_minY) && (py<=_maxY) && (pz>=_minZ) && (pz<=_maxZ)) - { - float value=(float)_graylevel; - double igl=_image->GetScalarComponentAsDouble(px,py,pz, 0); - if ( (igl!=_graylevel) && - (igl>=_graylevelbasefill-_tolerancefill) && - (igl<=_graylevelbasefill+_tolerancefill) && - (dist<=_distbasefill) - ) - { -// _image->SetScalarComponentFromFloat (px,py,pz, 0, dist+500 ); - _image->SetScalarComponentFromFloat (px,py,pz, 0, value ); - 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); - } - } //if _minX _maxX _minY _maxY _minZ _maxZ -} - -void ManualPaintModel::BrushTool(int px,int py, int pz) +//--------------------------------------------------------------------------- +void ManualPaintModel::Set2D3D( int dim2D3D ) { - - printf("EED ManualPaintModel::PaintImage %d %d %d\n", px,py,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; - - double xx,yy,zz,rr=size*size; - - printf("EED bbcreaMaracasvisu::vtkInteractorManualPaint::PaintImage brushForm=%d\n",_brushform); - 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); }