You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

184 lines
5.2 KiB
C

/*=========================================================================
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) override;
/**
* Construct with all types of clipping turned off.
*/
static vtkExtractUnstructuredGrid* New();
//@{
/**
* Turn on/off selection of geometry by point id.
*/
vtkSetMacro(PointClipping, vtkTypeBool);
vtkGetMacro(PointClipping, vtkTypeBool);
vtkBooleanMacro(PointClipping, vtkTypeBool);
//@}
//@{
/**
* Turn on/off selection of geometry by cell id.
*/
vtkSetMacro(CellClipping, vtkTypeBool);
vtkGetMacro(CellClipping, vtkTypeBool);
vtkBooleanMacro(CellClipping, vtkTypeBool);
//@}
//@{
/**
* Turn on/off selection of geometry via bounding box.
*/
vtkSetMacro(ExtentClipping, vtkTypeBool);
vtkGetMacro(ExtentClipping, vtkTypeBool);
vtkBooleanMacro(ExtentClipping, vtkTypeBool);
//@}
//@{
/**
* 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() VTK_SIZEHINT(6) { 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, vtkTypeBool);
vtkGetMacro(Merging, vtkTypeBool);
vtkBooleanMacro(Merging, vtkTypeBool);
//@}
//@{
/**
* 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() override;
protected:
vtkExtractUnstructuredGrid();
~vtkExtractUnstructuredGrid() override {}
int RequestData(vtkInformation*, vtkInformationVector**, vtkInformationVector*) override;
vtkIdType PointMinimum;
vtkIdType PointMaximum;
vtkIdType CellMinimum;
vtkIdType CellMaximum;
double Extent[6];
vtkTypeBool PointClipping;
vtkTypeBool CellClipping;
vtkTypeBool ExtentClipping;
vtkTypeBool Merging;
vtkIncrementalPointLocator* Locator;
private:
vtkExtractUnstructuredGrid(const vtkExtractUnstructuredGrid&) = delete;
void operator=(const vtkExtractUnstructuredGrid&) = delete;
};
#endif