You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
159 lines
5.7 KiB
159 lines
5.7 KiB
/*=========================================================================
|
|
|
|
Program: Visualization Toolkit
|
|
Module: $RCSfile: vtkGeometryFilter.h,v $
|
|
|
|
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.
|
|
|
|
=========================================================================*/
|
|
// .NAME vtkGeometryFilter - extract geometry from data (or convert data to polygonal type)
|
|
// .SECTION Description
|
|
// vtkGeometryFilter is a general-purpose filter to extract geometry (and
|
|
// associated data) from any type of dataset. Geometry is obtained as
|
|
// follows: all 0D, 1D, and 2D cells are extracted. All 2D faces that are
|
|
// used by only one 3D cell (i.e., boundary faces) are extracted. It also is
|
|
// possible to specify conditions on point ids, cell ids, and on
|
|
// bounding box (referred to as "Extent") to control the extraction process.
|
|
//
|
|
// This filter also may be used to convert any type of data to polygonal
|
|
// type. The conversion process may be less than satisfactory for some 3D
|
|
// datasets. For example, this filter will extract the outer surface of a
|
|
// volume or structured grid dataset. (For structured data you may want to
|
|
// use vtkImageDataGeometryFilter, vtkStructuredGridGeometryFilter,
|
|
// vtkExtractUnstructuredGrid, vtkRectilinearGridGeometryFilter, or
|
|
// vtkExtractVOI.)
|
|
|
|
// .SECTION Caveats
|
|
// When vtkGeometryFilter extracts cells (or boundaries of cells) it
|
|
// will (by default) merge duplicate vertices. This may cause problems
|
|
// in some cases. For example, if you've run vtkPolyDataNormals to
|
|
// generate normals, which may split meshes and create duplicate
|
|
// vertices, vtkGeometryFilter will merge these points back
|
|
// together. Turn merging off to prevent this from occurring.
|
|
|
|
// .SECTION See Also
|
|
// vtkImageDataGeometryFilter vtkStructuredGridGeometryFilter
|
|
// vtkExtractGeometry vtkExtractVOI
|
|
|
|
#ifndef __vtkGeometryFilter_h
|
|
#define __vtkGeometryFilter_h
|
|
|
|
#include "vtkPolyDataAlgorithm.h"
|
|
|
|
class vtkPointLocator;
|
|
|
|
class VTK_GRAPHICS_EXPORT vtkGeometryFilter : public vtkPolyDataAlgorithm
|
|
{
|
|
public:
|
|
static vtkGeometryFilter *New();
|
|
vtkTypeRevisionMacro(vtkGeometryFilter,vtkPolyDataAlgorithm);
|
|
void PrintSelf(ostream& os, vtkIndent indent);
|
|
|
|
// Description:
|
|
// Turn on/off selection of geometry by point id.
|
|
vtkSetMacro(PointClipping,int);
|
|
vtkGetMacro(PointClipping,int);
|
|
vtkBooleanMacro(PointClipping,int);
|
|
|
|
// Description:
|
|
// Turn on/off selection of geometry by cell id.
|
|
vtkSetMacro(CellClipping,int);
|
|
vtkGetMacro(CellClipping,int);
|
|
vtkBooleanMacro(CellClipping,int);
|
|
|
|
// Description:
|
|
// Turn on/off selection of geometry via bounding box.
|
|
vtkSetMacro(ExtentClipping,int);
|
|
vtkGetMacro(ExtentClipping,int);
|
|
vtkBooleanMacro(ExtentClipping,int);
|
|
|
|
// Description:
|
|
// Specify the minimum point id for point id selection.
|
|
vtkSetClampMacro(PointMinimum,vtkIdType,0,VTK_LARGE_ID);
|
|
vtkGetMacro(PointMinimum,vtkIdType);
|
|
|
|
// Description:
|
|
// Specify the maximum point id for point id selection.
|
|
vtkSetClampMacro(PointMaximum,vtkIdType,0,VTK_LARGE_ID);
|
|
vtkGetMacro(PointMaximum,vtkIdType);
|
|
|
|
// Description:
|
|
// Specify the minimum cell id for point id selection.
|
|
vtkSetClampMacro(CellMinimum,vtkIdType,0,VTK_LARGE_ID);
|
|
vtkGetMacro(CellMinimum,vtkIdType);
|
|
|
|
// Description:
|
|
// Specify the maximum cell id for point id selection.
|
|
vtkSetClampMacro(CellMaximum,vtkIdType,0,VTK_LARGE_ID);
|
|
vtkGetMacro(CellMaximum,vtkIdType);
|
|
|
|
// Description:
|
|
// 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);
|
|
|
|
// Description:
|
|
// Set / get a (xmin,xmax, ymin,ymax, zmin,zmax) bounding box to clip data.
|
|
void SetExtent(double extent[6]);
|
|
double *GetExtent() { return this->Extent;};
|
|
|
|
// Description:
|
|
// 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);
|
|
|
|
// Description:
|
|
// Set / get a spatial locator for merging points. By
|
|
// default an instance of vtkMergePoints is used.
|
|
void SetLocator(vtkPointLocator *locator);
|
|
vtkGetObjectMacro(Locator,vtkPointLocator);
|
|
|
|
// Description:
|
|
// Create default locator. Used to create one when none is specified.
|
|
void CreateDefaultLocator();
|
|
|
|
// Description:
|
|
// Return the MTime also considering the locator.
|
|
unsigned long GetMTime();
|
|
|
|
protected:
|
|
vtkGeometryFilter();
|
|
~vtkGeometryFilter();
|
|
|
|
virtual int RequestData(vtkInformation *, vtkInformationVector **, vtkInformationVector *);
|
|
virtual int FillInputPortInformation(int port, vtkInformation *info);
|
|
|
|
//special cases for performance
|
|
void PolyDataExecute(vtkDataSet *, vtkPolyData *, vtkInformation *);
|
|
void UnstructuredGridExecute(vtkDataSet *, vtkPolyData *, vtkInformation *);
|
|
void StructuredGridExecute(vtkDataSet *, vtkPolyData *, vtkInformation *);
|
|
int RequestUpdateExtent(vtkInformation *, vtkInformationVector **, vtkInformationVector *);
|
|
|
|
vtkIdType PointMaximum;
|
|
vtkIdType PointMinimum;
|
|
vtkIdType CellMinimum;
|
|
vtkIdType CellMaximum;
|
|
double Extent[6];
|
|
int PointClipping;
|
|
int CellClipping;
|
|
int ExtentClipping;
|
|
|
|
int Merging;
|
|
vtkPointLocator *Locator;
|
|
private:
|
|
vtkGeometryFilter(const vtkGeometryFilter&); // Not implemented.
|
|
void operator=(const vtkGeometryFilter&); // Not implemented.
|
|
};
|
|
|
|
#endif
|
|
|
|
|
|
|