Cloned library of VTK-5.0.0 with extra build files for internal package management.
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.
 
 
 
 
 
 

239 lines
11 KiB

/*=========================================================================
Program: Visualization Toolkit
Module: $RCSfile: vtkBoxClipDataSet.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.
=========================================================================*/
/*----------------------------------------------------------------------------
Copyright (c) Sandia Corporation
See Copyright.txt or http://www.paraview.org/HTML/Copyright.html for details.
----------------------------------------------------------------------------*/
// .NAME vtkBoxClipDataSet - clip an unstructured grid
//
// .SECTION Description
// Clipping means that is actually 'cuts' through the cells of the dataset,
// returning tetrahedral cells inside of the box.
// The output of this filter is an unstructured grid.
//
// This filter can be configured to compute a second output. The
// second output is the part of the cell that is clipped away. Set the
// GenerateClippedData boolean on if you wish to access this output data.
//
// The vtkBoxClipDataSet will triangulate all types of 3D cells (i.e, create tetrahedra).
// This is necessary to preserve compatibility across face neighbors.
//
// To use this filter,you can decide if you will be clipping with a box or a hexahedral box.
// 1) Set orientation
// if(SetOrientation(0)): box (parallel with coordinate axis)
// SetBoxClip(xmin,xmax,ymin,ymax,zmin,zmax)
// if(SetOrientation(1)): hexahedral box (Default)
// SetBoxClip(n[0],o[0],n[1],o[1],n[2],o[2],n[3],o[3],n[4],o[4],n[5],o[5])
// PlaneNormal[] normal of each plane
// PlanePoint[] point on the plane
// 2) Apply the GenerateClipScalarsOn()
// 3) Execute clipping Update();
#ifndef __vtkBoxClipDataSet_h
#define __vtkBoxClipDataSet_h
#include "vtkUnstructuredGridAlgorithm.h"
class vtkGenericCell;
class vtkCell3D;
class vtkDataArray;
class vtkCellArray;
class vtkPointData;
class vtkCellData;
class vtkPoints;
class vtkIdList;
class vtkPointLocator;
class VTK_GRAPHICS_EXPORT vtkBoxClipDataSet : public vtkUnstructuredGridAlgorithm
{
public:
vtkTypeRevisionMacro(vtkBoxClipDataSet,vtkUnstructuredGridAlgorithm);
void PrintSelf(ostream& os, vtkIndent indent);
// Description:
// Constructor of the clipping box.
static vtkBoxClipDataSet *New();
// Description
// Specify the Box with which to perform the clipping.
// If the box is not parallel to axis, you need to especify
// normal vector of each plane and a point on the plane.
void SetBoxClip(double xmin, double xmax,
double ymin, double ymax,
double zmin, double zmax);
void SetBoxClip(const double *n0, const double *o0,
const double *n1, const double *o1,
const double *n2, const double *o2,
const double *n3, const double *o3,
const double *n4, const double *o4,
const double *n5, const double *o5);
// Description:
// If this flag is enabled, then the output scalar values will be
// interpolated, and not the input scalar data.
vtkSetMacro(GenerateClipScalars,int);
vtkGetMacro(GenerateClipScalars,int);
vtkBooleanMacro(GenerateClipScalars,int);
// Description:
// Control whether a second output is generated. The second output
// contains the polygonal data that's been clipped away.
vtkSetMacro(GenerateClippedOutput,int);
vtkGetMacro(GenerateClippedOutput,int);
vtkBooleanMacro(GenerateClippedOutput,int);
// Description:
// Set the tolerance for merging clip intersection points that are near
// the vertices of cells. This tolerance is used to prevent the generation
// of degenerate primitives. Note that only 3D cells actually use this
// instance variable.
//vtkSetClampMacro(MergeTolerance,double,0.0001,0.25);
//vtkGetMacro(MergeTolerance,double);
// Description:
// Return the Clipped output.
vtkUnstructuredGrid *GetClippedOutput();
virtual int GetNumberOfOutputs();
// Description:
// Specify 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. The
// locator is used to merge coincident points.
void CreateDefaultLocator();
// Description:
// Return the mtime also considering the locator.
unsigned long GetMTime();
vtkGetMacro(Orientation,unsigned int);
vtkSetMacro(Orientation,unsigned int);
void MinEdgeF(const unsigned int *id_v, const vtkIdType *cellIds,
unsigned int *edgF );
void PyramidToTetra(const vtkIdType *pyramId, const vtkIdType *cellIds,
vtkCellArray *newCellArray);
void WedgeToTetra(const vtkIdType *wedgeId, const vtkIdType *cellIds,
vtkCellArray *newCellArray);
void CellGrid(vtkIdType typeobj, vtkIdType npts, const vtkIdType *cellIds,
vtkCellArray *newCellArray);
void CreateTetra(vtkIdType npts, const vtkIdType *cellIds,
vtkCellArray *newCellArray);
void ClipBox(vtkPoints *newPoints,vtkGenericCell *cell,
vtkPointLocator *locator, vtkCellArray *tets,vtkPointData *inPD,
vtkPointData *outPD,vtkCellData *inCD,vtkIdType cellId,
vtkCellData *outCD);
void ClipHexahedron(vtkPoints *newPoints, vtkGenericCell *cell,
vtkPointLocator *locator, vtkCellArray *tets,
vtkPointData *inPD, vtkPointData *outPD,
vtkCellData *inCD, vtkIdType cellId, vtkCellData *outCD);
void ClipBoxInOut(vtkPoints *newPoints, vtkGenericCell *cell,
vtkPointLocator *locator, vtkCellArray **tets,
vtkPointData *inPD, vtkPointData *outPD,
vtkCellData *inCD, vtkIdType cellId, vtkCellData **outCD);
void ClipHexahedronInOut(vtkPoints *newPoints,vtkGenericCell *cell,
vtkPointLocator *locator, vtkCellArray **tets,
vtkPointData *inPD, vtkPointData *outPD,
vtkCellData *inCD, vtkIdType cellId,
vtkCellData **outCD);
void ClipBox2D(vtkPoints *newPoints, vtkGenericCell *cell,
vtkPointLocator *locator, vtkCellArray *tets,
vtkPointData *inPD, vtkPointData *outPD, vtkCellData *inCD,
vtkIdType cellId, vtkCellData *outCD);
void ClipBoxInOut2D(vtkPoints *newPoints,vtkGenericCell *cell,
vtkPointLocator *locator, vtkCellArray **tets,
vtkPointData *inPD, vtkPointData *outPD,
vtkCellData *inCD, vtkIdType cellId, vtkCellData **outCD);
void ClipHexahedron2D(vtkPoints *newPoints,vtkGenericCell *cell,
vtkPointLocator *locator, vtkCellArray *tets,
vtkPointData *inPD, vtkPointData *outPD,
vtkCellData *inCD, vtkIdType cellId,
vtkCellData *outCD);
void ClipHexahedronInOut2D(vtkPoints *newPoints, vtkGenericCell *cell,
vtkPointLocator *locator, vtkCellArray **tets,
vtkPointData *inPD, vtkPointData *outPD,
vtkCellData *inCD,vtkIdType cellId,
vtkCellData **outCD);
void ClipBox1D(vtkPoints *newPoints, vtkGenericCell *cell,
vtkPointLocator *locator, vtkCellArray *lines,
vtkPointData *inPD, vtkPointData *outPD, vtkCellData *inCD,
vtkIdType cellId, vtkCellData *outCD);
void ClipBoxInOut1D(vtkPoints *newPoints, vtkGenericCell *cell,
vtkPointLocator *locator, vtkCellArray **lines,
vtkPointData *inPD, vtkPointData *outPD,
vtkCellData *inCD, vtkIdType cellId, vtkCellData **outCD);
void ClipHexahedron1D(vtkPoints *newPoints, vtkGenericCell *cell,
vtkPointLocator *locator, vtkCellArray *lines,
vtkPointData *inPD, vtkPointData *outPD,
vtkCellData *inCD, vtkIdType cellId,
vtkCellData *outCD);
void ClipHexahedronInOut1D(vtkPoints *newPoints, vtkGenericCell *cell,
vtkPointLocator *locator, vtkCellArray **lines,
vtkPointData *inPD, vtkPointData *outPD,
vtkCellData *inCD, vtkIdType cellId,
vtkCellData **outCD);
void ClipBox0D(vtkGenericCell *cell,
vtkPointLocator *locator, vtkCellArray *verts,
vtkPointData *inPD, vtkPointData *outPD, vtkCellData *inCD,
vtkIdType cellId, vtkCellData *outCD);
void ClipBoxInOut0D(vtkGenericCell *cell,
vtkPointLocator *locator, vtkCellArray **verts,
vtkPointData *inPD, vtkPointData *outPD,
vtkCellData *inCD,
vtkIdType cellId, vtkCellData **outCD);
void ClipHexahedron0D(vtkGenericCell *cell,
vtkPointLocator *locator, vtkCellArray *verts,
vtkPointData *inPD, vtkPointData *outPD,
vtkCellData *inCD,
vtkIdType cellId, vtkCellData *outCD);
void ClipHexahedronInOut0D(vtkGenericCell *cell,
vtkPointLocator *locator, vtkCellArray **verts,
vtkPointData *inPD, vtkPointData *outPD,
vtkCellData *inCD,
vtkIdType cellId, vtkCellData **outCD);
protected:
vtkBoxClipDataSet();
~vtkBoxClipDataSet();
virtual int RequestData(vtkInformation *, vtkInformationVector **, vtkInformationVector *);
virtual int FillInputPortInformation(int port, vtkInformation *info);
vtkPointLocator *Locator;
int GenerateClipScalars;
int GenerateClippedOutput;
//double MergeTolerance;
double BoundBoxClip[3][2];
unsigned int Orientation;
double PlaneNormal[6][3]; //normal of each plane
double PlanePoint[6][3]; //point on the plane
private:
vtkBoxClipDataSet(const vtkBoxClipDataSet&); // Not implemented.
void operator=(const vtkBoxClipDataSet&); // Not implemented.
};
#endif