/*=========================================================================
Program: Visualization Toolkit
Module: vtkCellDistanceSelector
Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
All rights reserved.
See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
This software is distributed WITHOUT ANY WARRANTY; without even
the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
PURPOSE. See the above copyright notice for more information.
=========================================================================*/
/**
* @class vtkCellDistanceSelector
* @brief select neighbor cells up to a distance
*
*
* This filter grows an input selection by iteratively selecting neighbor
* cells (a neighbor cell is a cell that shares a vertex/edge/face), up to
* a given topological distance to the selected neighborhood (number of times
* we add neighbor cells).
* This filter takes a vtkSelection and a vtkCompositeDataSet as inputs.
* It outputs a vtkSelection identifying all the selected cells.
*
* @par Thanks:
* This file has been initially developed in the frame of CEA's Love visualization software
* development
CEA/DIF - Commissariat a l'Energie Atomique, Centre DAM Ile-De-France
BP12,
* F-91297 Arpajon, France.
Modified and integrated into VTK, Kitware SAS 2012 Implementation
* by Thierry Carrard and Philippe Pebay
*/
#ifndef vtkCellDistanceSelector_h
#define vtkCellDistanceSelector_h
#include "vtkFiltersSelectionModule.h" // For export macro
#include "vtkSelectionAlgorithm.h"
#include "vtkSmartPointer.h" // For smart pointers
class vtkDataSet;
class vtkSelection;
class vtkAlgorithmOutput;
class vtkDataArray;
//@{
/**
* Grows a selection, selecting neighbor cells, up to a user defined topological distance
*/
class VTKFILTERSSELECTION_EXPORT vtkCellDistanceSelector : public vtkSelectionAlgorithm
{
public:
vtkTypeMacro(vtkCellDistanceSelector, vtkSelectionAlgorithm);
void PrintSelf(ostream& os, vtkIndent indent) override;
//@}
static vtkCellDistanceSelector* New();
/**
* enumeration values to specify input port types
*/
enum InputPorts
{
INPUT_MESH = 0, //!< Port 0 is for input mesh
INPUT_SELECTION = 1 //!< Port 1 is for input selection
};
/**
* A convenience method to set the data object input connection to the producer output
*/
void SetInputMeshConnection(vtkAlgorithmOutput* in) { this->SetInputConnection(INPUT_MESH, in); }
/**
* A convenience method to set the input data object
*/
void SetInputMesh(vtkDataObject* obj) { this->SetInputData(INPUT_MESH, obj); }
/**
* A convenience method to set the selection input connection to the producer output
*/
void SetInputSelectionConnection(vtkAlgorithmOutput* in)
{
this->SetInputConnection(INPUT_SELECTION, in);
}
/**
* A convenience method to set the input selection
*/
void SetInputSelection(vtkSelection* obj) { this->SetInputData(INPUT_SELECTION, obj); }
//@{
/**
* Tells how far (in term of topological distance) away from seed cells to expand the selection
*/
vtkSetMacro(Distance, int);
vtkGetMacro(Distance, int);
//@}
//@{
/**
* If set, seed cells passed with SetSeedCells will be included in the final selection
*/
vtkSetMacro(IncludeSeed, vtkTypeBool);
vtkGetMacro(IncludeSeed, vtkTypeBool);
vtkBooleanMacro(IncludeSeed, vtkTypeBool);
//@}
//@{
/**
* If set, intermediate cells (between seed cells and the selection boundary) will be included in
* the final selection
*/
vtkSetMacro(AddIntermediate, vtkTypeBool);
vtkGetMacro(AddIntermediate, vtkTypeBool);
vtkBooleanMacro(AddIntermediate, vtkTypeBool);
//@}
protected:
vtkCellDistanceSelector();
~vtkCellDistanceSelector() override;
void AddSelectionNode(
vtkSelection* output, vtkSmartPointer outIndices, int partNumber, int d);
int FillInputPortInformation(int port, vtkInformation* info) override;
int RequestData(vtkInformation*, vtkInformationVector**, vtkInformationVector*) override;
/**
* Tological radius from seed cells to be used to select cells
* Default: 1
*/
int Distance;
/**
* Decide whether seed cells are included in selection
* Default: 1
*/
vtkTypeBool IncludeSeed;
/**
* Decide whether at distance between 1 and Distance-1 are included in selection
* Default: 1
*/
vtkTypeBool AddIntermediate;
private:
vtkCellDistanceSelector(const vtkCellDistanceSelector&) = delete;
void operator=(const vtkCellDistanceSelector&) = delete;
};
#endif /* vtkCellDistanceSelector_h */