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.
132 lines
4.8 KiB
132 lines
4.8 KiB
/*=========================================================================
|
|
|
|
Program: Visualization Toolkit
|
|
Module: $RCSfile: vtkDataSetSurfaceFilter.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 vtkDataSetSurfaceFilter - Extracts outer (polygonal) surface.
|
|
// .SECTION Description
|
|
// vtkDataSetSurfaceFilter is a faster version of vtkGeometry filter, but it
|
|
// does not have an option to select bounds. It may use more memory than
|
|
// vtkGeometryFilter. It only has one option: whether to use triangle strips
|
|
// when the input type is structured.
|
|
|
|
// .SECTION See Also
|
|
// vtkGeometryFilter vtkStructuredGridGeometryFilter.
|
|
|
|
#ifndef __vtkDataSetSurfaceFilter_h
|
|
#define __vtkDataSetSurfaceFilter_h
|
|
|
|
#include "vtkPolyDataAlgorithm.h"
|
|
|
|
|
|
class vtkPointData;
|
|
class vtkPoints;
|
|
//BTX
|
|
struct vtkFastGeomQuadStruct;
|
|
typedef struct vtkFastGeomQuadStruct vtkFastGeomQuad;
|
|
//ETX
|
|
|
|
class VTK_GRAPHICS_EXPORT vtkDataSetSurfaceFilter : public vtkPolyDataAlgorithm
|
|
{
|
|
public:
|
|
static vtkDataSetSurfaceFilter *New();
|
|
vtkTypeRevisionMacro(vtkDataSetSurfaceFilter,vtkPolyDataAlgorithm);
|
|
void PrintSelf(ostream& os, vtkIndent indent);
|
|
|
|
// Description:
|
|
// When input is structured data, this flag will generate faces with
|
|
// triangle strips. This should render faster and use less memory, but no
|
|
// cell data is copied. By default, UseStrips is Off.
|
|
vtkSetMacro(UseStrips, int);
|
|
vtkGetMacro(UseStrips, int);
|
|
vtkBooleanMacro(UseStrips, int);
|
|
|
|
// Description:
|
|
// If PieceInvariant is true, vtkDataSetSurfaceFilter requests
|
|
// 1 ghost level from input in order to remove internal surface
|
|
// that are between processes. False by default.
|
|
vtkSetMacro(PieceInvariant, int);
|
|
vtkGetMacro(PieceInvariant, int);
|
|
|
|
protected:
|
|
vtkDataSetSurfaceFilter();
|
|
~vtkDataSetSurfaceFilter();
|
|
|
|
int UseStrips;
|
|
|
|
virtual int RequestUpdateExtent(vtkInformation *, vtkInformationVector **, vtkInformationVector *);
|
|
|
|
virtual int RequestData(vtkInformation *, vtkInformationVector **, vtkInformationVector *);
|
|
virtual int FillInputPortInformation(int port, vtkInformation *info);
|
|
int StructuredExecute(vtkDataSet *input, vtkPolyData *output, int *ext,
|
|
vtkInformation *inInfo);
|
|
int UnstructuredGridExecute(vtkDataSet *input, vtkPolyData *output);
|
|
int DataSetExecute(vtkDataSet *input, vtkPolyData *output);
|
|
|
|
// Helper methods.
|
|
void ExecuteFaceStrips(vtkDataSet *input, vtkPolyData *output,
|
|
int maxFlag, int *ext,
|
|
int aAxis, int bAxis, int cAxis,
|
|
vtkInformation *inInfo);
|
|
void ExecuteFaceQuads(vtkDataSet *input, vtkPolyData *output,
|
|
int maxFlag, int *ext,
|
|
int aAxis, int bAxis, int cAxis,
|
|
vtkInformation *inInfo);
|
|
|
|
void InitializeQuadHash(vtkIdType numPoints);
|
|
void DeleteQuadHash();
|
|
void InsertQuadInHash(vtkIdType a, vtkIdType b, vtkIdType c, vtkIdType d,
|
|
vtkIdType sourceId);
|
|
void InsertTriInHash(vtkIdType a, vtkIdType b, vtkIdType c,
|
|
vtkIdType sourceId);
|
|
void InsertPentaInHash(vtkIdType a, vtkIdType b,
|
|
vtkIdType c, vtkIdType d,
|
|
vtkIdType e,
|
|
vtkIdType sourceId);
|
|
void InsertHexInHash(vtkIdType a, vtkIdType b,
|
|
vtkIdType c, vtkIdType d,
|
|
vtkIdType e, vtkIdType f,
|
|
vtkIdType sourceId);
|
|
void InitQuadHashTraversal();
|
|
vtkFastGeomQuad *GetNextVisibleQuadFromHash();
|
|
|
|
vtkFastGeomQuad **QuadHash;
|
|
vtkIdType QuadHashLength;
|
|
vtkFastGeomQuad *QuadHashTraversal;
|
|
vtkIdType QuadHashTraversalIndex;
|
|
|
|
vtkIdType *PointMap;
|
|
vtkIdType GetOutputPointId(vtkIdType inPtId, vtkDataSet *input,
|
|
vtkPoints *outPts, vtkPointData *outPD);
|
|
|
|
vtkIdType NumberOfNewCells;
|
|
|
|
// Better memory allocation for faces (hash)
|
|
void InitFastGeomQuadAllocation(int numberOfCells);
|
|
vtkFastGeomQuad* NewFastGeomQuad();
|
|
void DeleteAllFastGeomQuads();
|
|
// -----
|
|
int FastGeomQuadArrayLength;
|
|
int NumberOfFastGeomQuadArrays;
|
|
vtkFastGeomQuad** FastGeomQuadArrays;
|
|
// These indexes allow us to find the next available face.
|
|
int NextArrayIndex;
|
|
int NextQuadIndex;
|
|
|
|
int PieceInvariant;
|
|
|
|
private:
|
|
vtkDataSetSurfaceFilter(const vtkDataSetSurfaceFilter&); // Not implemented.
|
|
void operator=(const vtkDataSetSurfaceFilter&); // Not implemented.
|
|
};
|
|
|
|
#endif
|
|
|