VTK  9.2.6
vtkUnstructuredGrid.h
Go to the documentation of this file.
1/*=========================================================================
2
3 Program: Visualization Toolkit
4 Module: vtkUnstructuredGrid.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=========================================================================*/
27
28#ifndef vtkUnstructuredGrid_h
29#define vtkUnstructuredGrid_h
30
31#include "vtkAbstractCellLinks.h" // For vtkAbstractCellLinks
32#include "vtkCellArray.h" // inline GetCellPoints()
33#include "vtkCommonDataModelModule.h" // For export macro
34#include "vtkDeprecation.h" // For deprecation
35#include "vtkIdTypeArray.h" // inline GetCellPoints()
37
38#include "vtkSmartPointer.h" // for smart pointer
39
40class vtkCellArray;
42class vtkBezierCurve;
46class vtkBezierTetra;
47class vtkBezierWedge;
49class vtkEmptyCell;
50class vtkHexahedron;
51class vtkIdList;
52class vtkIdTypeArray;
59class vtkLine;
60class vtkPixel;
61class vtkPolyLine;
62class vtkPolyVertex;
63class vtkPolygon;
64class vtkPyramid;
67class vtkQuad;
76class vtkTetra;
77class vtkTriangle;
80class vtkVertex;
81class vtkVoxel;
82class vtkWedge;
91class vtkCubicLine;
92class vtkPolyhedron;
93class vtkIdTypeArray;
94
95class VTKCOMMONDATAMODEL_EXPORT vtkUnstructuredGrid : public vtkUnstructuredGridBase
96{
97public:
103
105
109 void PrintSelf(ostream& os, vtkIndent indent) override;
111
115 int GetDataObjectType() override { return VTK_UNSTRUCTURED_GRID; }
116
126 bool AllocateEstimate(vtkIdType numCells, vtkIdType maxCellSize)
127 {
128 return this->AllocateExact(numCells, numCells * maxCellSize);
129 }
130
140 bool AllocateExact(vtkIdType numCells, vtkIdType connectivitySize);
141
151 void Allocate(vtkIdType numCells = 1000, int vtkNotUsed(extSize) = 1000) override
152 {
153 this->AllocateExact(numCells, numCells);
154 }
155
157
160 void Reset();
161 void CopyStructure(vtkDataSet* ds) override;
164 vtkCell* GetCell(vtkIdType cellId) override;
165 void GetCell(vtkIdType cellId, vtkGenericCell* cell) override;
166 void GetCellBounds(vtkIdType cellId, double bounds[6]) override;
167 void GetCellPoints(vtkIdType cellId, vtkIdList* ptIds) override;
168 void GetPointCells(vtkIdType ptId, vtkIdList* cellIds) override;
171
175 int GetCellType(vtkIdType cellId) override;
176
181
193 VTK_DEPRECATED_IN_9_2_0("Please use GetDistinctCellTypesArray() instead.")
194 void GetCellTypes(vtkCellTypes* types) override;
195
209
222 void GetCellPoints(vtkIdType cellId, vtkIdType& npts, vtkIdType const*& pts)
223 {
224 this->Connectivity->GetCellAtId(cellId, npts, pts);
225 }
226
243 vtkIdType cellId, vtkIdType& npts, vtkIdType const*& pts, vtkIdList* ptIds) override
244 {
245 this->Connectivity->GetCellAtId(cellId, npts, pts, ptIds);
246 }
247
249
254 void GetPointCells(vtkIdType ptId, vtkIdType& ncells, vtkIdType*& cells)
255 VTK_SIZEHINT(cells, ncells);
257
265
269 void Squeeze() override;
270
274 void Initialize() override;
275
279 int GetMaxCellSize() override;
280
286
288
294
303
310 void GetFaceStream(vtkIdType cellId, vtkIdList* ptIds);
311
320 void GetFaceStream(vtkIdType cellId, vtkIdType& nfaces, vtkIdType const*& ptIds);
321
323
332 void SetCells(int type, vtkCellArray* cells);
333 void SetCells(int* types, vtkCellArray* cells);
335 void SetCells(vtkUnsignedCharArray* cellTypes, vtkCellArray* cells, vtkIdTypeArray* faceLocations,
336 vtkIdTypeArray* faces);
338
342 vtkCellArray* GetCells() { return this->Connectivity; }
343
345
351 void GetCellNeighbors(vtkIdType cellId, vtkIdList* ptIds, vtkIdList* cellIds) override
352 {
353 this->GetCellNeighbors(cellId, ptIds->GetNumberOfIds(), ptIds->GetPointer(0), cellIds);
354 }
356 vtkIdType cellId, vtkIdType npts, const vtkIdType* ptIds, vtkIdList* cellIds);
358
360
371 bool IsCellBoundary(vtkIdType cellId, vtkIdType npts, const vtkIdType* ptIds);
372 bool IsCellBoundary(vtkIdType cellId, vtkIdType npts, const vtkIdType* ptIds, vtkIdList* cellIds);
374
376
380 vtkIdType InsertNextLinkedCell(int type, int npts, const vtkIdType pts[]) VTK_SIZEHINT(pts, npts);
383 void ResizeCellList(vtkIdType ptId, int size);
385
387
390 virtual int GetPiece();
391 virtual int GetNumberOfPieces();
393
397 virtual int GetGhostLevel();
398
407 unsigned long GetActualMemorySize() override;
408
410
413 void ShallowCopy(vtkDataObject* src) override;
414 void DeepCopy(vtkDataObject* src) override;
416
422 void GetIdsOfCellsOfType(int type, vtkIdTypeArray* array) override;
423
427 int IsHomogeneous() override;
428
435
437
443
448
450
456
465
474
487 static void DecomposeAPolyhedronCell(vtkCellArray* polyhedronCellArray, vtkIdType& nCellpts,
488 vtkIdType& nCellfaces, vtkCellArray* cellArray, vtkIdTypeArray* faces);
489
490 static void DecomposeAPolyhedronCell(const vtkIdType* polyhedronCellStream, vtkIdType& nCellpts,
491 vtkIdType& nCellfaces, vtkCellArray* cellArray, vtkIdTypeArray* faces);
492
505 static void DecomposeAPolyhedronCell(vtkIdType nCellFaces, const vtkIdType* inFaceStream,
506 vtkIdType& nCellpts, vtkCellArray* cellArray, vtkIdTypeArray* faces);
507
514 static void ConvertFaceStreamPointIds(vtkIdList* faceStream, vtkIdType* idMap);
515
521 static void ConvertFaceStreamPointIds(vtkIdType nfaces, vtkIdType* faceStream, vtkIdType* idMap);
522
523 //====================== Begin Legacy Methods ================================
524
533
535
552 vtkUnsignedCharArray* cellTypes, vtkIdTypeArray* cellLocations, vtkCellArray* cells);
553 void SetCells(vtkUnsignedCharArray* cellTypes, vtkIdTypeArray* cellLocations, vtkCellArray* cells,
554 vtkIdTypeArray* faceLocations, vtkIdTypeArray* faces);
556
557 //====================== End Legacy Methods ==================================
558
559protected:
562
563 // These are all the cells that vtkUnstructuredGrid can represent. Used by
564 // GetCell() (and similar) methods.
613
614 // Points derived from vtkPointSet.
615 // Attribute data (i.e., point and cell data (i.e., scalars, vectors, normals, tcoords)
616 // derived from vtkDataSet.
617
618 // The heart of the data representation. The points are managed by the
619 // superclass vtkPointSet. A cell is defined by its connectivity (i.e., the
620 // point ids that define the cell) and the cell type, represented by the
621 // Connectivity and Types arrays.
622 // Finally, when certain topological information is needed (e.g.,
623 // all the cells that use a point), the cell links array is built.
627
628 // Set of all cell types present in the grid. All entries are unique.
630
631 // The DistinctCellTypes is cached, so we keep track of the last time it was
632 // updated so we can compare it to the modified time of the Types array.
634
635 // Special support for polyhedra/cells with explicit face representations.
636 // The Faces class represents polygonal faces using a modified vtkCellArray
637 // structure. Each cell face list begins with the total number of faces in
638 // the cell, followed by a vtkCellArray data organization
639 // (n,i,j,k,n,i,j,k,...).
642
643 // Legacy support -- stores the old-style cell array locations.
645
646 vtkIdType InternalInsertNextCell(int type, vtkIdType npts, const vtkIdType ptIds[]) override;
647 vtkIdType InternalInsertNextCell(int type, vtkIdList* ptIds) override;
649 vtkIdType nfaces, const vtkIdType faces[]) override;
650 void InternalReplaceCell(vtkIdType cellId, int npts, const vtkIdType pts[]) override;
651
652private:
653 // Hide these from the user and the compiler.
655 void operator=(const vtkUnstructuredGrid&) = delete;
656
657 void Cleanup();
658};
659
660#endif
A 3D cell that represents an arbitrary order Bezier hex.
A 3D cell that represents an arbitrary order Bezier tetrahedron.
A 2D cell that represents an arbitrary order Bezier triangle.
A 3D cell that represents an arbitrary order Bezier wedge.
cell represents a parabolic, 9-node isoparametric quad
cell represents a biquadratic, 24-node isoparametric hexahedron
cell represents a parabolic, 18-node isoparametric wedge
cell represents a parabolic, isoparametric triangle
object to represent cell connectivity
Efficient cell iterator for vtkDataSet topologies.
object provides direct access to cells in vtkCellArray and type information
abstract class to specify cell behavior
Definition vtkCell.h:58
a 3D cell defined by a set of convex points
cell represents a cubic , isoparametric 1D line
general representation of visualization data
virtual vtkCell * GetCell(vtkIdType cellId)=0
Get cell with cellId such that: 0 <= cellId < NumberOfCells.
virtual void GetCellNeighbors(vtkIdType cellId, vtkIdList *ptIds, vtkIdList *cellIds)
Topological inquiry to get all cells using list of points exclusive of cell specified (e....
an empty cell used as a place-holder during processing
provides thread-safe access to cells
a 3D cell that represents a prism with hexagonal base
a cell that represents a linear 3D hexahedron
list of point or cell ids
Definition vtkIdList.h:31
vtkIdType GetNumberOfIds() const noexcept
Return the number of id's in the list.
Definition vtkIdList.h:57
vtkIdType * GetPointer(const vtkIdType i)
Get a pointer to a particular data index.
Definition vtkIdList.h:126
dynamic, self-adjusting array of vtkIdType
a simple class to control print indentation
Definition vtkIndent.h:34
Store zero or more vtkInformation instances.
Store vtkAlgorithm input/output information.
A 3D cell that represents an arbitrary order Lagrange hex.
A 3D cell that represents an arbitrary order Lagrange tetrahedron.
A 2D cell that represents an arbitrary order Lagrange triangle.
A 3D cell that represents an arbitrary order Lagrange wedge.
cell represents a 1D line
Definition vtkLine.h:31
a 3D cell that represents a convex prism with pentagonal base
a cell that represents an orthogonal quadrilateral
Definition vtkPixel.h:35
cell represents a set of 1D lines
Definition vtkPolyLine.h:37
cell represents a set of 0D vertices
a cell that represents an n-sided polygon
Definition vtkPolygon.h:40
a 3D cell defined by a set of polygonal faces
a 3D cell that represents a linear pyramid
Definition vtkPyramid.h:44
a cell that represents a 2D quadrilateral
Definition vtkQuad.h:36
cell represents a parabolic, isoparametric edge
cell represents a parabolic, 20-node isoparametric hexahedron
cell represents a quadratic-linear, 6-node isoparametric quad
cell represents a, 12-node isoparametric wedge
a cell that represents a parabolic n-sided polygon
cell represents a parabolic, 13-node isoparametric pyramid
cell represents a parabolic, 8-node isoparametric quad
cell represents a parabolic, 10-node isoparametric tetrahedron
cell represents a parabolic, isoparametric triangle
cell represents a parabolic, 15-node isoparametric wedge
Hold a reference to a vtkObjectBase instance.
a 3D cell that represents a tetrahedron
Definition vtkTetra.h:42
cell represents a parabolic, 27-node isoparametric hexahedron
cell represents a parabolic, 19-node isoparametric pyramid
a cell that represents a triangle strip
a cell that represents a triangle
Definition vtkTriangle.h:36
dynamic, self-adjusting array of unsigned char
vtkBezierCurve * BezierCurve
void RemoveReferenceToCell(vtkIdType ptId, vtkIdType cellId)
Use these methods only if the dataset has been specified as Editable.
void SetCells(vtkUnsignedCharArray *cellTypes, vtkIdTypeArray *cellLocations, vtkCellArray *cells)
Special methods specific to vtkUnstructuredGrid for defining the cells composing the dataset.
void GetCellTypes(vtkCellTypes *types) override
Get a list of types of cells in a dataset.
vtkLagrangeWedge * LagrangeWedge
vtkQuadraticLinearWedge * QuadraticLinearWedge
vtkQuadraticQuad * QuadraticQuad
vtkIdType * GetFaces(vtkIdType cellId)
Special support for polyhedron.
vtkQuadraticTriangle * QuadraticTriangle
void GetCell(vtkIdType cellId, vtkGenericCell *cell) override
Standard vtkDataSet methods; see vtkDataSet.h for documentation.
vtkQuadraticPyramid * QuadraticPyramid
void SetCells(vtkUnsignedCharArray *cellTypes, vtkIdTypeArray *cellLocations, vtkCellArray *cells, vtkIdTypeArray *faceLocations, vtkIdTypeArray *faces)
Special methods specific to vtkUnstructuredGrid for defining the cells composing the dataset.
void InternalReplaceCell(vtkIdType cellId, int npts, const vtkIdType pts[]) override
vtkBezierQuadrilateral * BezierQuadrilateral
vtkSmartPointer< vtkIdTypeArray > CellLocations
vtkQuadraticLinearQuad * QuadraticLinearQuad
void GetFaceStream(vtkIdType cellId, vtkIdType &nfaces, vtkIdType const *&ptIds)
Get the number of faces and the face stream of a polyhedral cell.
vtkTriangleStrip * TriangleStrip
vtkCellArray * GetCells()
Return the unstructured grid connectivity array.
vtkBiQuadraticTriangle * BiQuadraticTriangle
vtkLagrangeQuadrilateral * LagrangeQuadrilateral
vtkBiQuadraticQuadraticWedge * BiQuadraticQuadraticWedge
vtkIdType InternalInsertNextCell(int type, vtkIdList *ptIds) override
virtual vtkMTimeType GetMeshMTime()
Return the mesh (geometry/topology) modification time.
void SetCells(vtkUnsignedCharArray *cellTypes, vtkCellArray *cells, vtkIdTypeArray *faceLocations, vtkIdTypeArray *faces)
Provide cell information to define the dataset.
vtkSmartPointer< vtkCellTypes > DistinctCellTypes
void SetCells(int *types, vtkCellArray *cells)
Provide cell information to define the dataset.
vtkQuadraticTetra * QuadraticTetra
vtkCell * GetCell(vtkIdType cellId) override
Standard vtkDataSet methods; see vtkDataSet.h for documentation.
vtkMTimeType DistinctCellTypesUpdateMTime
void GetCellPoints(vtkIdType cellId, vtkIdList *ptIds) override
Standard vtkDataSet methods; see vtkDataSet.h for documentation.
vtkSmartPointer< vtkIdTypeArray > Faces
void Squeeze() override
Squeeze all arrays in the grid to conserve memory.
vtkQuadraticPolygon * QuadraticPolygon
vtkLagrangeHexahedron * LagrangeHexahedron
vtkIdType GetCellSize(vtkIdType cellId) override
Get the size of the cell with given cellId.
static void DecomposeAPolyhedronCell(vtkIdType nCellFaces, const vtkIdType *inFaceStream, vtkIdType &nCellpts, vtkCellArray *cellArray, vtkIdTypeArray *faces)
A static method for converting an input polyhedron cell stream of format [nFace0Pts,...
vtkTriQuadraticHexahedron * TriQuadraticHexahedron
vtkIdTypeArray * GetFaces()
Get pointer to faces and facelocations.
vtkLagrangeTriangle * LagrangeTriangle
vtkHexagonalPrism * HexagonalPrism
vtkBiQuadraticQuad * BiQuadraticQuad
vtkQuadraticEdge * QuadraticEdge
int IsHomogeneous() override
Returns whether cells are all of the same type.
static void ConvertFaceStreamPointIds(vtkIdList *faceStream, vtkIdType *idMap)
Convert pid in a face stream into idMap[pid].
vtkIdType InternalInsertNextCell(int type, vtkIdType npts, const vtkIdType ptIds[]) override
static vtkUnstructuredGrid * GetData(vtkInformation *info)
Retrieve an instance of this class from an information object.
void GetCellNeighbors(vtkIdType cellId, vtkIdType npts, const vtkIdType *ptIds, vtkIdList *cellIds)
A topological inquiry to retrieve all of the cells using list of points exclusive of the current cell...
void ResizeCellList(vtkIdType ptId, int size)
Use these methods only if the dataset has been specified as Editable.
vtkBiQuadraticQuadraticHexahedron * BiQuadraticQuadraticHexahedron
bool AllocateEstimate(vtkIdType numCells, vtkIdType maxCellSize)
Pre-allocate memory in internal data structures.
int InitializeFacesRepresentation(vtkIdType numPrevCells)
Special function used by vtkUnstructuredGridReader.
void GetCellBounds(vtkIdType cellId, double bounds[6]) override
Standard vtkDataSet methods; see vtkDataSet.h for documentation.
void SetCells(int type, vtkCellArray *cells)
Provide cell information to define the dataset.
vtkGetSmartPointerMacro(Links, vtkAbstractCellLinks)
Set/Get the links that you created possibly without using BuildLinks.
vtkUnsignedCharArray * GetDistinctCellTypesArray()
Get a list of types of cells in a dataset.
vtkIdType InternalInsertNextCell(int type, vtkIdType npts, const vtkIdType ptIds[], vtkIdType nfaces, const vtkIdType faces[]) override
vtkSetSmartPointerMacro(Links, vtkAbstractCellLinks)
Set/Get the links that you created possibly without using BuildLinks.
vtkIdTypeArray * GetCellLocationsArray()
Get the array of all the starting indices of cell definitions in the cell array.
static void DecomposeAPolyhedronCell(const vtkIdType *polyhedronCellStream, vtkIdType &nCellpts, vtkIdType &nCellfaces, vtkCellArray *cellArray, vtkIdTypeArray *faces)
vtkBezierWedge * BezierWedge
bool IsCellBoundary(vtkIdType cellId, vtkIdType npts, const vtkIdType *ptIds)
A topological inquiry to determine whether a topological entity (e.g., point, edge,...
vtkIdType InsertNextLinkedCell(int type, int npts, const vtkIdType pts[])
Use these methods only if the dataset has been specified as Editable.
void GetFaceStream(vtkIdType cellId, vtkIdList *ptIds)
Get the face stream of a polyhedron cell in the following format: (numCellFaces, numFace0Pts,...
vtkSmartPointer< vtkAbstractCellLinks > Links
vtkIdType GetNumberOfCells() override
Standard vtkDataSet methods; see vtkDataSet.h for documentation.
void Allocate(vtkIdType numCells=1000, int vtkNotUsed(extSize)=1000) override
Method allocates initial storage for the cell connectivity.
vtkLagrangeTetra * LagrangeTetra
vtkQuadraticHexahedron * QuadraticHexahedron
bool AllocateExact(vtkIdType numCells, vtkIdType connectivitySize)
Pre-allocate memory in internal data structures.
void Reset()
Standard vtkDataSet methods; see vtkDataSet.h for documentation.
vtkSmartPointer< vtkIdTypeArray > FaceLocations
void GetPointCells(vtkIdType ptId, vtkIdList *cellIds) override
Standard vtkDataSet methods; see vtkDataSet.h for documentation.
vtkBezierTetra * BezierTetra
vtkCellIterator * NewCellIterator() override
Standard vtkDataSet methods; see vtkDataSet.h for documentation.
void GetPointCells(vtkIdType ptId, vtkIdType &ncells, vtkIdType *&cells)
Special (efficient) operation to return the list of cells using the specified point ptId.
vtkSmartPointer< vtkUnsignedCharArray > Types
vtkLagrangeCurve * LagrangeCurve
void SetCells(vtkUnsignedCharArray *cellTypes, vtkCellArray *cells)
Provide cell information to define the dataset.
void RemoveGhostCells()
This method will remove any cell that is marked as ghost (has the vtkDataSetAttributes::DUPLICATECELL...
void GetCellNeighbors(vtkIdType cellId, vtkIdList *ptIds, vtkIdList *cellIds) override
A topological inquiry to retrieve all of the cells using list of points exclusive of the current cell...
static vtkUnstructuredGrid * GetData(vtkInformationVector *v, int i=0)
Retrieve an instance of this class from an information object.
void CopyStructure(vtkDataSet *ds) override
Standard vtkDataSet methods; see vtkDataSet.h for documentation.
void Initialize() override
Reset the grid to an empty state and free any memory.
int GetMaxCellSize() override
Get the size, in number of points, of the largest cell.
vtkConvexPointSet * ConvexPointSet
vtkSmartPointer< vtkCellArray > Connectivity
vtkBezierHexahedron * BezierHexahedron
~vtkUnstructuredGrid() override
static void DecomposeAPolyhedronCell(vtkCellArray *polyhedronCellArray, vtkIdType &nCellpts, vtkIdType &nCellfaces, vtkCellArray *cellArray, vtkIdTypeArray *faces)
A static method for converting a polyhedron vtkCellArray of format [nCellFaces, nFace0Pts,...
bool IsCellBoundary(vtkIdType cellId, vtkIdType npts, const vtkIdType *ptIds, vtkIdList *cellIds)
A topological inquiry to determine whether a topological entity (e.g., point, edge,...
vtkTriQuadraticPyramid * TriQuadraticPyramid
virtual int GetGhostLevel()
Get the ghost level.
int GetCellType(vtkIdType cellId) override
Get the type of the cell with the given cellId.
vtkQuadraticWedge * QuadraticWedge
void PrintSelf(ostream &os, vtkIndent indent) override
Standard methods for type information and printing.
static void ConvertFaceStreamPointIds(vtkIdType nfaces, vtkIdType *faceStream, vtkIdType *idMap)
Convert pid in a face stream into idMap[pid].
void BuildLinks()
Build topological links from points to lists of cells that use each point.
void GetIdsOfCellsOfType(int type, vtkIdTypeArray *array) override
Fill vtkIdTypeArray container with list of cell Ids.
virtual int GetPiece()
Set / Get the piece and the number of pieces.
vtkPentagonalPrism * PentagonalPrism
unsigned long GetActualMemorySize() override
Return the actual size of the data in kibibytes (1024 bytes).
vtkBezierTriangle * BezierTriangle
virtual int GetNumberOfPieces()
Set / Get the piece and the number of pieces.
void AddReferenceToCell(vtkIdType ptId, vtkIdType cellId)
Use these methods only if the dataset has been specified as Editable.
static vtkUnstructuredGrid * ExtendedNew()
vtkIdTypeArray * GetFaceLocations()
Get pointer to faces and facelocations.
static vtkUnstructuredGrid * New()
Standard instantiation method.
vtkAbstractCellLinks * GetCellLinks()
Get the cell links.
vtkUnsignedCharArray * GetCellTypesArray()
Get the array of all cell types in the grid.
void GetCellPoints(vtkIdType cellId, vtkIdType &npts, vtkIdType const *&pts, vtkIdList *ptIds) override
A higher-performing variant of the virtual vtkDataSet::GetCellPoints() for unstructured grids.
void ShallowCopy(vtkDataObject *src) override
Shallow and Deep copy.
void DeepCopy(vtkDataObject *src) override
Shallow and Deep copy.
int GetDataObjectType() override
Standard vtkDataSet API methods.
a cell that represents a 3D point
Definition vtkVertex.h:31
a cell that represents a 3D orthogonal parallelepiped
Definition vtkVoxel.h:39
a 3D cell that represents a linear wedge
Definition vtkWedge.h:44
#define VTK_DEPRECATED_IN_9_2_0(reason)
int vtkIdType
Definition vtkType.h:332
#define VTK_UNSTRUCTURED_GRID
Definition vtkType.h:81
vtkTypeUInt32 vtkMTimeType
Definition vtkType.h:287
#define VTK_SIZEHINT(...)