VTK  9.2.5
vtkGenericAdaptorCell.h
Go to the documentation of this file.
1/*=========================================================================
2
3 Program: Visualization Toolkit
4 Module: vtkGenericAdaptorCell.h
5
6 Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
7 All rights reserved.
8 See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
9
10 This software is distributed WITHOUT ANY WARRANTY; without even
11 the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
12 PURPOSE. See the above copyright notice for more information.
13
14=========================================================================*/
62#ifndef vtkGenericAdaptorCell_h
63#define vtkGenericAdaptorCell_h
64
65#include "vtkCommonDataModelModule.h" // For export macro
66#include "vtkObject.h"
67
68class vtkLine;
69class vtkTetra;
70class vtkPoints;
71class vtkVertex;
72class vtkTriangle;
73class vtkCellData;
74class vtkPointData;
75class vtkCellArray;
76class vtkDoubleArray;
85class vtkIdList;
87class vtkPolygon;
89class vtkQuad;
90class vtkHexahedron;
91class vtkWedge;
92class vtkPyramid;
93
94class VTKCOMMONDATAMODEL_EXPORT vtkGenericAdaptorCell : public vtkObject
95{
96public:
98 void PrintSelf(ostream& os, vtkIndent indent) override;
99
104 virtual vtkIdType GetId() = 0;
105
109 virtual int IsInDataSet() = 0;
110
117 virtual int GetType() = 0;
118
123 virtual int GetDimension() = 0;
124
129 virtual int GetGeometryOrder() = 0;
130
136
144
152
159
163 virtual int IsPrimary() = 0;
164
169 virtual int GetNumberOfPoints() = 0;
170
181 virtual int GetNumberOfBoundaries(int dim = -1) = 0;
182
195 virtual int GetNumberOfDOFNodes() = 0;
196
202
209
216 virtual void GetBoundaryIterator(vtkGenericCellIterator* boundaries, int dim = -1) = 0;
217
219
229 virtual int CountNeighbors(vtkGenericAdaptorCell* boundary) = 0;
230 virtual void CountEdgeNeighbors(int* sharing) = 0;
232
243 virtual void GetNeighbors(vtkGenericAdaptorCell* boundary, vtkGenericCellIterator* neighbors) = 0;
244
253 int subId, double pcoords[3], vtkGenericCellIterator*& boundary) = 0;
254
266 virtual int EvaluatePosition(
267 const double x[3], double* closestPoint, int& subId, double pcoords[3], double& dist2) = 0;
268
276 virtual void EvaluateLocation(int subId, double pcoords[3], double x[3]) = 0;
277
288 virtual void InterpolateTuple(vtkGenericAttribute* a, double pcoords[3], double* val) = 0;
289
300 virtual void InterpolateTuple(
301 vtkGenericAttributeCollection* c, double pcoords[3], double* val) = 0;
302
347 vtkCellArray* polys, vtkPointData* outPd, vtkCellData* outCd, vtkPointData* internalPd,
348 vtkPointData* secondaryPd, vtkCellData* secondaryCd);
349
390 virtual void Clip(double value, vtkImplicitFunction* f, vtkGenericAttributeCollection* attributes,
391 vtkGenericCellTessellator* tess, int insideOut, vtkIncrementalPointLocator* locator,
392 vtkCellArray* connectivity, vtkPointData* outPd, vtkCellData* outCd, vtkPointData* internalPd,
393 vtkPointData* secondaryPd, vtkCellData* secondaryCd);
394
403 virtual int IntersectWithLine(double p1[3], double p2[3], double tol, double& t, double x[3],
404 double pcoords[3], int& subId) = 0;
405
418 virtual void Derivatives(
419 int subId, double pcoords[3], vtkGenericAttribute* attribute, double* derivs) = 0;
420
426 virtual void GetBounds(double bounds[6]) = 0;
427
434 virtual double* GetBounds();
435
440 virtual double GetLength2();
441
448 virtual int GetParametricCenter(double pcoords[3]) = 0;
449
457 virtual double GetParametricDistance(const double pcoords[3]) = 0;
458
469 virtual double* GetParametricCoords() = 0;
470
493 vtkCellArray* cellArray, vtkPointData* internalPd, vtkPointData* pd, vtkCellData* cd,
494 vtkUnsignedCharArray* types);
495
496 // The following methods are for the internals of the tessellation algorithm
497 // (the hash table in particular)
498
504 virtual int IsFaceOnBoundary(vtkIdType faceId) = 0;
505
510 virtual int IsOnBoundary() = 0;
511
518 virtual void GetPointIds(vtkIdType* id) = 0;
519
534 vtkGenericCellTessellator* tess, int index, vtkPoints* points,
535 vtkIncrementalPointLocator* locator, vtkCellArray* cellArray, vtkPointData* internalPd,
536 vtkPointData* pd, vtkCellData* cd);
537
550 virtual const vtkIdType* GetFaceArray(vtkIdType faceId) = 0;
551
558 virtual int GetNumberOfVerticesOnFace(int faceId) = 0;
559
571 virtual const vtkIdType* GetEdgeArray(vtkIdType edgeId) = 0;
572
573protected:
576
580 void Reset();
581
586 void AllocateTuples(int size);
587
588 // Internal tetra used for the contouring/clipping algorithm
592 vtkVertex* Vertex; // is it used ?
597
598 // Internal locator when tessellating on a cell basis, this is different
599 // from the main locator used in contour/clip filter, this locator is used for
600 // points for
601 // Be careful the use of a vtkLocator in conjunction with the table fast
602 // tessellator is very sensitive, we need to keep all the points we used
607
608 vtkIdList* InternalIds; // used by Tessellate() and TriangulateFace()
609
610 // Attributes to mimic the vtk cell look and feel, internal use only
614
615 // Scalar buffer to store the attributes values at some location
616 // There are variable members to reduce memory allocations.
617 double* Tuples;
619
620 // Cached Bounds.
621 double Bounds[6];
622
623private:
625 void operator=(const vtkGenericAdaptorCell&) = delete;
626};
627
628#endif
object to represent cell connectivity
Definition: vtkCellArray.h:187
represent and manipulate cell attribute data
Definition: vtkCellData.h:42
helper object to manage setting and generating contour values
dynamic, self-adjusting array of double
defines cell interface
virtual int GetDimension()=0
Return the topological dimension of the current cell.
virtual int IsOnBoundary()=0
Is the cell on the exterior boundary of the dataset?
virtual const vtkIdType * GetFaceArray(vtkIdType faceId)=0
Return the ids of the vertices defining face ‘faceId’.
vtkDoubleArray * InternalScalars
virtual void Tessellate(vtkGenericAttributeCollection *attributes, vtkGenericCellTessellator *tess, vtkPoints *points, vtkIncrementalPointLocator *locator, vtkCellArray *cellArray, vtkPointData *internalPd, vtkPointData *pd, vtkCellData *cd, vtkUnsignedCharArray *types)
Tessellate the cell if it is not linear or if at least one attribute of ‘attributes’ is not linear.
virtual int CountNeighbors(vtkGenericAdaptorCell *boundary)=0
Number of cells (dimension>boundary->GetDimension()) of the dataset that share the boundary ‘boundary...
virtual void GetBoundaryIterator(vtkGenericCellIterator *boundaries, int dim=-1)=0
Return the ‘boundaries’ cells of dimension ‘dim’ (or all dimensions less than GetDimension() if -1) t...
virtual void GetBounds(double bounds[6])=0
Compute the bounding box of the current cell in ‘bounds’ in global coordinates.
virtual int IntersectWithLine(double p1[3], double p2[3], double tol, double &t, double x[3], double pcoords[3], int &subId)=0
Is there an intersection between the current cell and the ray (‘p1’,‘p2’) according to a tolerance ‘t...
virtual int GetHighestOrderAttribute(vtkGenericAttributeCollection *ac)
Return the index of the first point centered attribute with the highest order in ‘ac’.
virtual int EvaluatePosition(const double x[3], double *closestPoint, int &subId, double pcoords[3], double &dist2)=0
Is ‘x’ inside the current cell? It also evaluates parametric coordinates ‘pcoords’,...
virtual void Contour(vtkContourValues *values, vtkImplicitFunction *f, vtkGenericAttributeCollection *attributes, vtkGenericCellTessellator *tess, vtkIncrementalPointLocator *locator, vtkCellArray *verts, vtkCellArray *lines, vtkCellArray *polys, vtkPointData *outPd, vtkCellData *outCd, vtkPointData *internalPd, vtkPointData *secondaryPd, vtkCellData *secondaryCd)
Generate a contour (contouring primitives) for each ‘values’ or with respect to an implicit function ...
virtual void Clip(double value, vtkImplicitFunction *f, vtkGenericAttributeCollection *attributes, vtkGenericCellTessellator *tess, int insideOut, vtkIncrementalPointLocator *locator, vtkCellArray *connectivity, vtkPointData *outPd, vtkCellData *outCd, vtkPointData *internalPd, vtkPointData *secondaryPd, vtkCellData *secondaryCd)
Cut (or clip) the current cell with respect to the contour defined by the ‘value’ or the implicit fun...
virtual void Derivatives(int subId, double pcoords[3], vtkGenericAttribute *attribute, double *derivs)=0
Compute derivatives ‘derivs’ of the attribute ‘attribute’ (from its values at the corner points of th...
virtual void InterpolateTuple(vtkGenericAttributeCollection *c, double pcoords[3], double *val)=0
Interpolate the whole collection of attributes ‘c’ at local position ‘pcoords’ of the cell into ‘val’...
virtual void CountEdgeNeighbors(int *sharing)=0
Number of cells (dimension>boundary->GetDimension()) of the dataset that share the boundary ‘boundary...
virtual int FindClosestBoundary(int subId, double pcoords[3], vtkGenericCellIterator *&boundary)=0
Compute the closest boundary of the current sub-cell ‘subId’ for point ‘pcoord’ (in parametric coordi...
virtual void EvaluateLocation(int subId, double pcoords[3], double x[3])=0
Determine the global coordinates ‘x’ from sub-cell ‘subId’ and parametric coordinates ‘pcoords’ in th...
virtual void GetPointIds(vtkIdType *id)=0
Put into ‘id’ the list of the dataset points that define the corner points of the cell.
virtual double * GetBounds()
Return the bounding box of the current cell in global coordinates.
virtual vtkGenericCellIterator * NewCellIterator()=0
Create an empty cell iterator.
~vtkGenericAdaptorCell() override
virtual int GetNumberOfBoundaries(int dim=-1)=0
Return the number of boundaries of dimension ‘dim’ (or all dimensions greater than 0 and less than Ge...
virtual int GetGeometryOrder()=0
Return the interpolation order of the geometry.
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
virtual int GetNumberOfVerticesOnFace(int faceId)=0
Return the number of vertices defining face ‘faceId’.
virtual void InterpolateTuple(vtkGenericAttribute *a, double pcoords[3], double *val)=0
Interpolate the attribute ‘a’ at local position ‘pcoords’ of the cell into ‘val’.
virtual double GetLength2()
Return the bounding box diagonal squared of the current cell.
void AllocateTuples(int size)
Allocate some memory if Tuples does not exist or is smaller than size.
vtkDoubleArray * InternalPoints
int IsGeometryLinear()
Does the cell have a non-linear interpolation for the geometry?
virtual void GetNeighbors(vtkGenericAdaptorCell *boundary, vtkGenericCellIterator *neighbors)=0
Put into ‘neighbors’ the cells (dimension>boundary->GetDimension()) of the dataset that share the bou...
vtkDoubleArray * PointDataScalars
virtual const vtkIdType * GetEdgeArray(vtkIdType edgeId)=0
Return the ids of the vertices defining edge ‘edgeId’.
virtual int IsInDataSet()=0
Does ‘this’ a cell of a dataset? (otherwise, it is a boundary cell)
virtual int GetParametricCenter(double pcoords[3])=0
Get the center of the current cell (in parametric coordinates) and place it in ‘pcoords’.
virtual int GetType()=0
Return the type of the current cell.
virtual void TriangulateFace(vtkGenericAttributeCollection *attributes, vtkGenericCellTessellator *tess, int index, vtkPoints *points, vtkIncrementalPointLocator *locator, vtkCellArray *cellArray, vtkPointData *internalPd, vtkPointData *pd, vtkCellData *cd)
Tessellate face ‘index’ of the cell.
virtual int GetAttributeOrder(vtkGenericAttribute *a)=0
Return the interpolation order of attribute ‘a’ on the cell (may differ by cell).
virtual int IsFaceOnBoundary(vtkIdType faceId)=0
Is the face ‘faceId’ of the current cell on the exterior boundary of the dataset?
virtual void GetPointIterator(vtkGenericPointIterator *it)=0
Return the points of cell into ‘it’.
virtual int GetNumberOfPoints()=0
Return the number of corner points that compose the cell.
void Reset()
Reset internal structures.
virtual double * GetParametricCoords()=0
Return a contiguous array of parametric coordinates of the corrner points defining the current cell.
virtual int IsPrimary()=0
Is the cell primary (i.e.
virtual int GetNumberOfDOFNodes()=0
Accumulated number of DOF nodes of the current cell.
vtkTypeBool IsAttributeLinear(vtkGenericAttribute *a)
Does the attribute ‘a’ have a non-linear interpolation?
virtual double GetParametricDistance(const double pcoords[3])=0
Return the distance of the parametric coordinate ‘pcoords’ to the current cell.
virtual vtkIdType GetId()=0
Unique identification number of the cell over the whole data set.
abstract class defined API for attribute data
iterator used to traverse cells
helper class to perform cell tessellation
iterator used to traverse points
a cell that represents a linear 3D hexahedron
Definition: vtkHexahedron.h:45
list of point or cell ids
Definition: vtkIdList.h:34
abstract interface for implicit functions
Abstract class in support of both point location and point insertion.
a simple class to control print indentation
Definition: vtkIndent.h:40
cell represents a 1D line
Definition: vtkLine.h:34
abstract base class for most VTK objects
Definition: vtkObject.h:63
helper class to generate triangulations
represent and manipulate point attribute data
Definition: vtkPointData.h:42
represent and manipulate 3D points
Definition: vtkPoints.h:40
a cell that represents an n-sided polygon
Definition: vtkPolygon.h:43
a 3D cell that represents a linear pyramid
Definition: vtkPyramid.h:47
a cell that represents a 2D quadrilateral
Definition: vtkQuad.h:39
a 3D cell that represents a tetrahedron
Definition: vtkTetra.h:45
a cell that represents a triangle
Definition: vtkTriangle.h:39
dynamic, self-adjusting array of unsigned char
a cell that represents a 3D point
Definition: vtkVertex.h:34
a 3D cell that represents a linear wedge
Definition: vtkWedge.h:47
int vtkTypeBool
Definition: vtkABI.h:69
int vtkIdType
Definition: vtkType.h:332
#define VTK_NEWINSTANCE