VTK  9.0.1
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 =========================================================================*/
28 #ifndef vtkUnstructuredGrid_h
29 #define vtkUnstructuredGrid_h
30 
31 #include "vtkCellArray.h" //inline GetCellPoints()
32 #include "vtkCommonDataModelModule.h" // For export macro
33 #include "vtkIdTypeArray.h" //inline GetCellPoints()
35 
36 #include "vtkSmartPointer.h" // for smart pointer
37 
38 class vtkCellArray;
40 class vtkBezierCurve;
43 class vtkBezierTriangle;
44 class vtkBezierTetra;
45 class vtkBezierWedge;
46 class vtkConvexPointSet;
47 class vtkEmptyCell;
48 class vtkHexahedron;
49 class vtkIdList;
50 class vtkIdTypeArray;
51 class vtkLagrangeCurve;
55 class vtkLagrangeTetra;
56 class vtkLagrangeWedge;
57 class vtkLine;
58 class vtkPixel;
59 class vtkPolyLine;
60 class vtkPolyVertex;
61 class vtkPolygon;
62 class vtkPyramid;
63 class vtkPentagonalPrism;
64 class vtkHexagonalPrism;
65 class vtkQuad;
66 class vtkQuadraticEdge;
68 class vtkQuadraticWedge;
71 class vtkQuadraticQuad;
72 class vtkQuadraticTetra;
74 class vtkTetra;
75 class vtkTriangle;
76 class vtkTriangleStrip;
78 class vtkVertex;
79 class vtkVoxel;
80 class vtkWedge;
84 class vtkBiQuadraticQuad;
88 class vtkCubicLine;
89 class vtkPolyhedron;
90 class vtkIdTypeArray;
91 
92 class VTKCOMMONDATAMODEL_EXPORT vtkUnstructuredGrid : public vtkUnstructuredGridBase
93 {
94 public:
99 
101 
105  void PrintSelf(ostream& os, vtkIndent indent) override;
107 
111  int GetDataObjectType() override { return VTK_UNSTRUCTURED_GRID; }
112 
122  bool AllocateEstimate(vtkIdType numCells, vtkIdType maxCellSize)
123  {
124  return this->AllocateExact(numCells, numCells * maxCellSize);
125  }
126 
136  bool AllocateExact(vtkIdType numCells, vtkIdType connectivitySize);
137 
147  void Allocate(vtkIdType numCells = 1000, int vtkNotUsed(extSize) = 1000) override
148  {
149  this->AllocateExact(numCells, numCells);
150  }
151 
153 
156  void Reset();
157  void CopyStructure(vtkDataSet* ds) override;
159  using vtkDataSet::GetCell;
160  vtkCell* GetCell(vtkIdType cellId) override;
161  void GetCell(vtkIdType cellId, vtkGenericCell* cell) override;
162  void GetCellBounds(vtkIdType cellId, double bounds[6]) override;
163  void GetCellPoints(vtkIdType cellId, vtkIdList* ptIds) override;
164  void GetPointCells(vtkIdType ptId, vtkIdList* cellIds) override;
167 
171  int GetCellType(vtkIdType cellId) override;
172 
184  void GetCellTypes(vtkCellTypes* types) override;
185 
196  void GetCellPoints(vtkIdType cellId, vtkIdType& npts, vtkIdType const*& pts)
197  {
198  this->Connectivity->GetCellAtId(cellId, npts, pts);
199  }
200 
202 
207  void GetPointCells(vtkIdType ptId, vtkIdType& ncells, vtkIdType*& cells)
208  VTK_SIZEHINT(cells, ncells);
209 #ifndef VTK_LEGACY_REMOVE
210  VTK_LEGACY(void GetPointCells(vtkIdType ptId, unsigned short& ncells, vtkIdType*& cells))
211  VTK_SIZEHINT(cells, ncells);
212 #endif
214 
222 
226  void Squeeze() override;
227 
231  void Initialize() override;
232 
236  int GetMaxCellSize() override;
237 
242  void BuildLinks();
243 
252 
259  void GetFaceStream(vtkIdType cellId, vtkIdList* ptIds);
260 
269  void GetFaceStream(vtkIdType cellId, vtkIdType& nfaces, vtkIdType const*& ptIds);
270 
272 
281  void SetCells(int type, vtkCellArray* cells);
282  void SetCells(int* types, vtkCellArray* cells);
283  void SetCells(vtkUnsignedCharArray* cellTypes, vtkCellArray* cells);
284  void SetCells(vtkUnsignedCharArray* cellTypes, vtkCellArray* cells, vtkIdTypeArray* faceLocations,
285  vtkIdTypeArray* faces);
287 
291  vtkCellArray* GetCells() { return this->Connectivity; }
292 
299  void GetCellNeighbors(vtkIdType cellId, vtkIdList* ptIds, vtkIdList* cellIds) override;
300 
302 
306  vtkIdType InsertNextLinkedCell(int type, int npts, const vtkIdType pts[]) VTK_SIZEHINT(pts, npts);
309  void ResizeCellList(vtkIdType ptId, int size);
311 
313 
316  virtual int GetPiece();
317  virtual int GetNumberOfPieces();
319 
323  virtual int GetGhostLevel();
324 
333  unsigned long GetActualMemorySize() override;
334 
336 
339  void ShallowCopy(vtkDataObject* src) override;
340  void DeepCopy(vtkDataObject* src) override;
342 
348  void GetIdsOfCellsOfType(int type, vtkIdTypeArray* array) override;
349 
353  int IsHomogeneous() override;
354 
360 
362 
368 
373 
375 
381 
390 
399 
412  static void DecomposeAPolyhedronCell(vtkCellArray* polyhedronCellArray, vtkIdType& nCellpts,
413  vtkIdType& nCellfaces, vtkCellArray* cellArray, vtkIdTypeArray* faces);
414 
415  static void DecomposeAPolyhedronCell(const vtkIdType* polyhedronCellStream, vtkIdType& nCellpts,
416  vtkIdType& nCellfaces, vtkCellArray* cellArray, vtkIdTypeArray* faces);
417 
430  static void DecomposeAPolyhedronCell(vtkIdType nCellFaces, const vtkIdType* inFaceStream,
431  vtkIdType& nCellpts, vtkCellArray* cellArray, vtkIdTypeArray* faces);
432 
439  static void ConvertFaceStreamPointIds(vtkIdList* faceStream, vtkIdType* idMap);
440 
446  static void ConvertFaceStreamPointIds(vtkIdType nfaces, vtkIdType* faceStream, vtkIdType* idMap);
447 
448  //====================== Begin Legacy Methods ================================
449 
458 
460 
476  void SetCells(
477  vtkUnsignedCharArray* cellTypes, vtkIdTypeArray* cellLocations, vtkCellArray* cells);
478  void SetCells(vtkUnsignedCharArray* cellTypes, vtkIdTypeArray* cellLocations, vtkCellArray* cells,
479  vtkIdTypeArray* faceLocations, vtkIdTypeArray* faces);
481 
482  //====================== End Legacy Methods ==================================
483 
484 protected:
487 
488  // These are all the cells that vtkUnstructuredGrid can represent. Used by
489  // GetCell() (and similar) methods.
537 
538  // Points derived from vtkPointSet.
539  // Attribute data (i.e., point and cell data (i.e., scalars, vectors, normals, tcoords)
540  // derived from vtkDataSet.
541 
542  // The heart of the data represention. The points are managed by the
543  // superclass vtkPointSet. A cell is defined by its connectivity (i.e., the
544  // point ids that define the cell) and the cell type, represented by the
545  // Connectivity and Types arrays.
546  // Finally, when certain topological information is needed (e.g.,
547  // all the cells that use a point), the cell links array is built.
551 
552  // Set of all cell types present in the grid. All entries are unique.
554 
555  // The DistinctCellTypes is cached, so we keep track of the last time it was
556  // updated so we can compare it to the modified time of the Types array.
558 
559  // Special support for polyhedra/cells with explicit face representations.
560  // The Faces class represents polygonal faces using a modified vtkCellArray
561  // structure. Each cell face list begins with the total number of faces in
562  // the cell, followed by a vtkCellArray data organization
563  // (n,i,j,k,n,i,j,k,...).
566 
567  // Legacy support -- stores the old-style cell array locations.
569 
570  vtkIdType InternalInsertNextCell(int type, vtkIdType npts, const vtkIdType ptIds[]) override;
573  vtkIdType nfaces, const vtkIdType faces[]) override;
574  void InternalReplaceCell(vtkIdType cellId, int npts, const vtkIdType pts[]) override;
575 
576 private:
577  // Hide these from the user and the compiler.
578  vtkUnstructuredGrid(const vtkUnstructuredGrid&) = delete;
579  void operator=(const vtkUnstructuredGrid&) = delete;
580 
581  void Cleanup();
582 };
583 
584 #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
Definition: vtkCellArray.h:180
Efficient cell iterator for vtkDataSet topologies.
object provides direct access to cells in vtkCellArray and type information
Definition: vtkCellTypes.h:48
abstract class to specify cell behavior
Definition: vtkCell.h:57
a 3D cell defined by a set of convex points
cell represents a cubic , isoparametric 1D line
Definition: vtkCubicLine.h:43
general representation of visualization data
Definition: vtkDataObject.h:60
abstract class to specify dataset behavior
Definition: vtkDataSet.h:57
virtual vtkCell * GetCell(vtkIdType cellId)=0
Get cell with cellId such that: 0 <= cellId < NumberOfCells.
an empty cell used as a place-holder during processing
Definition: vtkEmptyCell.h:30
provides thread-safe access to cells
a 3D cell that represents a prism with hexagonal base
a cell that represents a linear 3D hexahedron
Definition: vtkHexahedron.h:42
list of point or cell ids
Definition: vtkIdList.h:31
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:30
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
Definition: vtkPolyVertex.h:33
a cell that represents an n-sided polygon
Definition: vtkPolygon.h:40
a 3D cell defined by a set of polygonal faces
Definition: vtkPolyhedron.h:58
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
a 3D cell that represents a tetrahedron
Definition: vtkTetra.h:42
cell represents a parabolic, 27-node isoparametric hexahedron
a cell that represents a triangle strip
a cell that represents a triangle
Definition: vtkTriangle.h:36
dynamic, self-adjusting array of unsigned char
dataset represents arbitrary combinations of all possible cell types.
dataset represents arbitrary combinations of all possible cell types
vtkBezierCurve * BezierCurve
void RemoveReferenceToCell(vtkIdType ptId, vtkIdType cellId)
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
vtkCell * GetCell(vtkIdType cellId) override
Get cell with cellId such that: 0 <= cellId < NumberOfCells.
vtkQuadraticTriangle * QuadraticTriangle
void GetCell(vtkIdType cellId, vtkGenericCell *cell) override
Get cell with cellId such that: 0 <= cellId < NumberOfCells.
vtkQuadraticPyramid * QuadraticPyramid
void SetCells(vtkUnsignedCharArray *cellTypes, vtkIdTypeArray *cellLocations, vtkCellArray *cells, vtkIdTypeArray *faceLocations, vtkIdTypeArray *faces)
void InternalReplaceCell(vtkIdType cellId, int npts, const vtkIdType pts[]) override
static vtkUnstructuredGrid * GetData(vtkInformation *info)
Retrieve an instance of this class from an information object.
void GetPointCells(vtkIdType ptId, unsigned short &ncells, vtkIdType *&cells)
vtkBezierQuadrilateral * BezierQuadrilateral
vtkSmartPointer< vtkIdTypeArray > CellLocations
vtkAbstractCellLinks * GetCellLinks()
Get the cell links.
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
vtkBiQuadraticTriangle * BiQuadraticTriangle
vtkLagrangeQuadrilateral * LagrangeQuadrilateral
void GetCellPoints(vtkIdType cellId, vtkIdType &npts, vtkIdType const *&pts)
A higher-performing variant of the virtual vtkDataSet::GetCellPoints() for unstructured grids.
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)
vtkSmartPointer< vtkCellTypes > DistinctCellTypes
void SetCells(int *types, vtkCellArray *cells)
vtkQuadraticTetra * QuadraticTetra
vtkMTimeType DistinctCellTypesUpdateMTime
void GetCellPoints(vtkIdType cellId, vtkIdList *ptIds) override
Topological inquiry to get points defining cell.
vtkSmartPointer< vtkIdTypeArray > Faces
vtkPolyVertex * PolyVertex
void Squeeze() override
Squeeze all arrays in the grid to conserve memory.
vtkQuadraticPolygon * QuadraticPolygon
vtkLagrangeHexahedron * LagrangeHexahedron
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
vtkLagrangeTriangle * LagrangeTriangle
vtkHexagonalPrism * HexagonalPrism
static vtkUnstructuredGrid * GetData(vtkInformationVector *v, int i=0)
vtkCellArray * GetCells()
Return the unstructured grid connectivity array.
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].
vtkUnsignedCharArray * GetCellTypesArray()
Get the array of all cell types in the grid.
vtkIdType InternalInsertNextCell(int type, vtkIdType npts, const vtkIdType ptIds[]) override
vtkIdTypeArray * GetFaceLocations()
void ResizeCellList(vtkIdType ptId, int size)
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
Get the bounds of the cell with cellId such that: 0 <= cellId < NumberOfCells.
void SetCells(int type, vtkCellArray *cells)
Provide cell information to define the dataset.
vtkHexahedron * Hexahedron
vtkIdType InternalInsertNextCell(int type, vtkIdType npts, const vtkIdType ptIds[], vtkIdType nfaces, const vtkIdType faces[]) override
static void DecomposeAPolyhedronCell(const vtkIdType *polyhedronCellStream, vtkIdType &nCellpts, vtkIdType &nCellfaces, vtkCellArray *cellArray, vtkIdTypeArray *faces)
vtkBezierWedge * BezierWedge
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
Determine the number of cells composing the dataset.
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
Topological inquiry to get cells using point.
vtkBezierTetra * BezierTetra
void GetPointCells(vtkIdType ptId, vtkIdType &ncells, vtkIdType *&cells)
Special (efficient) operation to return the list of cells using the specified point ptId.
vtkIdType * GetFaces(vtkIdType cellId)
Special support for polyhedron.
vtkSmartPointer< vtkUnsignedCharArray > Types
vtkLagrangeCurve * LagrangeCurve
void SetCells(vtkUnsignedCharArray *cellTypes, vtkCellArray *cells)
vtkIdTypeArray * GetCellLocationsArray()
Get the array of all the starting indices of cell definitions in the cell array.
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
Topological inquiry to get all cells using list of points exclusive of cell specified (e....
void CopyStructure(vtkDataSet *ds) override
Copy the geometric structure of an input point set object.
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
vtkCellIterator * NewCellIterator() override
Return an iterator that traverses the cells in this data set.
~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,...
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
Methods invoked by print to print information about the object including superclasses.
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
vtkIdTypeArray * GetFaces()
Get pointer to faces and facelocations.
virtual int GetNumberOfPieces()
void AddReferenceToCell(vtkIdType ptId, vtkIdType cellId)
vtkPolyhedron * Polyhedron
static vtkUnstructuredGrid * New()
Standard instantiation method.
void ShallowCopy(vtkDataObject *src) override
Shallow and Deep copy.
void DeepCopy(vtkDataObject *src) override
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
@ info
Definition: vtkX3D.h:382
@ type
Definition: vtkX3D.h:522
@ size
Definition: vtkX3D.h:259
int vtkIdType
Definition: vtkType.h:338
#define VTK_UNSTRUCTURED_GRID
Definition: vtkType.h:89
vtkTypeUInt32 vtkMTimeType
Definition: vtkType.h:293
#define VTK_SIZEHINT(...)