/*# --------------------------------------------------------------------- # # Copyright (c) CREATIS (Centre de Recherche en Acquisition et Traitement de l'Image # pour la Sant�) # Authors : Eduardo Davila, Frederic Cervenansky, Claire Mouton # Previous Authors : Laurent Guigues, Jean-Pierre Roux # CreaTools website : www.creatis.insa-lyon.fr/site/fr/creatools_accueil # # This software is governed by the CeCILL-B license under French law and # abiding by the rules of distribution of free software. You can use, # modify and/ or redistribute the software under the terms of the CeCILL-B # license as circulated by CEA, CNRS and INRIA at the following URL # http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html # or in the file LICENSE.txt. # # As a counterpart to the access to the source code and rights to copy, # modify and redistribute granted by the license, users are provided only # with a limited warranty and the software's author, the holder of the # economic rights, and the successive licensors have only limited # liability. # # The fact that you are presently reading this means that you have had # knowledge of the CeCILL-B license and that you accept its terms. # ------------------------------------------------------------------------ */ #include "BrushFilter.h" BrushFilter::BrushFilter() { _brushsize = 1; _brushform = 0; // 0 rectangle-cube , 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) { size = _brushsize - 1; minX = _px - size; maxX = _px + size; minY = _py - size; maxY = _py + size; minZ = _pz - size; maxZ = _pz + size; if (_2D3D == 0) //2D { if (_direction == 0) // YZ { minX = _px; maxX = _px; } if (_direction == 1) // XZ { minY = _py; maxY = _py; } if (_direction == 2) // XY { minZ = _pz; maxZ = _pz; } } if (_2D3D == 1) // 3D { } if (minX < _minX) { minX = _minX; } if (minY < _minY) { minY = _minY; } if (minZ < _minZ) { minZ = _minZ; } if (maxX > _maxX) { maxX = _maxX; } if (maxY > _maxY) { maxY = _maxY; } if (maxZ > _maxZ) { maxZ = _maxZ; } //-- SetGeneralMinMax(minX, maxX, minY, maxY, minZ, maxZ); } //--------------------------------------------------------------------------- void BrushFilter::Run() // virtual { if (_image != NULL) { float value = (float) _graylevel; int i, j, k; int size; int minX, maxX, minY, maxY, minZ, maxZ; FindMinMaxBrush(minX, maxX, minY, maxY, minZ, maxZ, size); double xx, yy, zz, rr = size * size; printf("EED BrushFilter::Run() %d %d\n", _RangeMin, _RangeMax); 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)) // { float scalarComponent = _image->GetScalarComponentAsFloat(i,j, k, 0); if ((_RangeMin <= scalarComponent) && (scalarComponent <= _RangeMax )) { if (_brushform == 0) { this->_IMManager->AddModifiedPixel(i, j, k); //DFCH _image->SetScalarComponentFromFloat(i, j, k, 0,value); } // _brushform 0 if (_brushform == 1) { zz = _pz - k; zz = zz * zz; if ((xx + yy + zz) <= rr) { this->_IMManager->AddModifiedPixel(i, j, k); //DFCH _image->SetScalarComponentFromFloat(i, j, k, 0,value); } } // _brushform 1 } // GetRangeMin && GetRangeMax // } //if _minX _maxX _minY _maxY _minZ _maxZ } //k } //j } //i _image->Modified(); } else { printf( "ERROR : bbcreaMaracasvisu::vtkInteractorManualPaint::PaintImage : Image not set. \n"); } // _image } //--------------------------------------------------------------------------- void BrushFilter::SetBrushSize(int brushsize) { _brushsize = brushsize; } //--------------------------------------------------------------------------- void BrushFilter::SetBrushForm(int brushform) { _brushform = brushform; } //--------------------------------------------------------------------------- void BrushFilter::SetBrushTool(int brushtool) { _brushtool = brushtool; } //--------------------------------------------------------------------------- void BrushFilter::SetRangeMin(int min) { _RangeMin = min; } //--------------------------------------------------------------------------- void BrushFilter::SetRangeMax(int max) { _RangeMax = max; } //--------------------------------------------------------------------------- int BrushFilter::GetRangeMin() { return _RangeMin; } //--------------------------------------------------------------------------- int BrushFilter::GetRangeMax() { return _RangeMax; }