text: /*=========================================================================
  
    Program:   Visualization Toolkit
    Module:    vtkExtractUnstructuredGrid.h
  
    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   vtkExtractUnstructuredGrid
   * @brief   extract subset of unstructured grid geometry
   *
   * vtkExtractUnstructuredGrid is a general-purpose filter to
   * extract geometry (and associated data) from an unstructured grid
   * dataset. The extraction process is controlled by specifying a range
   * of point ids, cell ids, or a bounding box (referred to as "Extent").
   * Those cells laying within these regions are sent to the output.
   * The user has the choice of merging coincident points (Merging is on)
   * or using the original point set (Merging is off).
   *
   * @warning
   * If merging is off, the input points are copied through to the
   * output. This means unused points may be present in the output data.
   * If merging is on, then coincident points with different point attribute
   * values are merged.
   *
   * @sa
   * vtkImageDataGeometryFilter vtkStructuredGridGeometryFilter
   * vtkRectilinearGridGeometryFilter
   * vtkExtractGeometry vtkExtractVOI
  */
  
  #ifndef vtkExtractUnstructuredGrid_h
  #define vtkExtractUnstructuredGrid_h
  
  #include "vtkFiltersExtractionModule.h" // For export macro
  #include "vtkUnstructuredGridAlgorithm.h"
  
  class vtkIncrementalPointLocator;
  
  class VTKFILTERSEXTRACTION_EXPORT vtkExtractUnstructuredGrid : public vtkUnstructuredGridAlgorithm
  {
  public:
    vtkTypeMacro(vtkExtractUnstructuredGrid,vtkUnstructuredGridAlgorithm);
    void PrintSelf(ostream& os, vtkIndent indent) VTK_OVERRIDE;
  
    /**
     * Construct with all types of clipping turned off.
     */
    static vtkExtractUnstructuredGrid *New();
  
    //@{
    /**
     * Turn on/off selection of geometry by point id.
     */
    vtkSetMacro(PointClipping,int);
    vtkGetMacro(PointClipping,int);
    vtkBooleanMacro(PointClipping,int);
    //@}
  
    //@{
    /**
     * Turn on/off selection of geometry by cell id.
     */
    vtkSetMacro(CellClipping,int);
    vtkGetMacro(CellClipping,int);
    vtkBooleanMacro(CellClipping,int);
    //@}
  
    //@{
    /**
     * Turn on/off selection of geometry via bounding box.
     */
    vtkSetMacro(ExtentClipping,int);
    vtkGetMacro(ExtentClipping,int);
    vtkBooleanMacro(ExtentClipping,int);
    //@}
  
    //@{
    /**
     * Specify the minimum point id for point id selection.
     */
    vtkSetClampMacro(PointMinimum,vtkIdType,0,VTK_ID_MAX);
    vtkGetMacro(PointMinimum,vtkIdType);
    //@}
  
    //@{
    /**
     * Specify the maximum point id for point id selection.
     */
    vtkSetClampMacro(PointMaximum,vtkIdType,0,VTK_ID_MAX);
    vtkGetMacro(PointMaximum,vtkIdType);
    //@}
  
    //@{
    /**
     * Specify the minimum cell id for point id selection.
     */
    vtkSetClampMacro(CellMinimum,vtkIdType,0,VTK_ID_MAX);
    vtkGetMacro(CellMinimum,vtkIdType);
    //@}
  
    //@{
    /**
     * Specify the maximum cell id for point id selection.
     */
    vtkSetClampMacro(CellMaximum,vtkIdType,0,VTK_ID_MAX);
    vtkGetMacro(CellMaximum,vtkIdType);
    //@}
  
    /**
     * Specify a (xmin,xmax, ymin,ymax, zmin,zmax) bounding box to clip data.
     */
    void SetExtent(double xMin, double xMax, double yMin, double yMax,
                   double zMin, double zMax);
  
    //@{
    /**
     * Set / get a (xmin,xmax, ymin,ymax, zmin,zmax) bounding box to clip data.
     */
    void SetExtent(double extent[6]);
    double *GetExtent() { return this->Extent;};
    //@}
  
    //@{
    /**
     * Turn on/off merging of coincident points. Note that is merging is
     * on, points with different point attributes (e.g., normals) are merged,
     * which may cause rendering artifacts.
     */
    vtkSetMacro(Merging,int);
    vtkGetMacro(Merging,int);
    vtkBooleanMacro(Merging,int);
    //@}
  
    //@{
    /**
     * Set / get a spatial locator for merging points. By
     * default an instance of vtkMergePoints is used.
     */
    void SetLocator(vtkIncrementalPointLocator *locator);
    vtkGetObjectMacro(Locator,vtkIncrementalPointLocator);
    //@}
  
    /**
     * Create default locator. Used to create one when none is specified.
     */
    void CreateDefaultLocator();
  
    /**
     * Return the MTime also considering the locator.
     */
    vtkMTimeType GetMTime() VTK_OVERRIDE;
  
  protected:
    vtkExtractUnstructuredGrid();
    ~vtkExtractUnstructuredGrid()VTK_OVERRIDE {}
  
    int RequestData(vtkInformation *, vtkInformationVector **, vtkInformationVector *) VTK_OVERRIDE;
  
    vtkIdType PointMinimum;
    vtkIdType PointMaximum;
    vtkIdType CellMinimum;
    vtkIdType CellMaximum;
    double Extent[6];
    int PointClipping;
    int CellClipping;
    int ExtentClipping;
  
    int Merging;
    vtkIncrementalPointLocator *Locator;
  private:
    vtkExtractUnstructuredGrid(const vtkExtractUnstructuredGrid&) VTK_DELETE_FUNCTION;
    void operator=(const vtkExtractUnstructuredGrid&) VTK_DELETE_FUNCTION;
  };
  
  #endif
  
  
  