VTK  9.1.0
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 =========================================================================*/
137 #ifndef vtkUnstructuredGrid_h
138 #define vtkUnstructuredGrid_h
139 
140 #include "vtkCellArray.h" //inline GetCellPoints()
141 #include "vtkCommonDataModelModule.h" // For export macro
142 #include "vtkDeprecation.h" // for VTK_DEPRECATED_IN_9_0_0
143 #include "vtkIdTypeArray.h" //inline GetCellPoints()
144 #include "vtkUnstructuredGridBase.h"
145 
146 #include "vtkSmartPointer.h" // for smart pointer
147 
148 class vtkCellArray;
150 class vtkBezierCurve;
152 class vtkBezierHexahedron;
153 class vtkBezierTriangle;
154 class vtkBezierTetra;
155 class vtkBezierWedge;
156 class vtkConvexPointSet;
157 class vtkEmptyCell;
158 class vtkHexahedron;
159 class vtkIdList;
160 class vtkIdTypeArray;
161 class vtkLagrangeCurve;
164 class vtkLagrangeTriangle;
165 class vtkLagrangeTetra;
166 class vtkLagrangeWedge;
167 class vtkLine;
168 class vtkPixel;
169 class vtkPolyLine;
170 class vtkPolyVertex;
171 class vtkPolygon;
172 class vtkPyramid;
173 class vtkPentagonalPrism;
174 class vtkHexagonalPrism;
175 class vtkQuad;
176 class vtkQuadraticEdge;
178 class vtkQuadraticWedge;
179 class vtkQuadraticPolygon;
180 class vtkQuadraticPyramid;
181 class vtkQuadraticQuad;
182 class vtkQuadraticTetra;
184 class vtkTetra;
185 class vtkTriangle;
186 class vtkTriangleStrip;
188 class vtkVertex;
189 class vtkVoxel;
190 class vtkWedge;
195 class vtkBiQuadraticQuad;
199 class vtkCubicLine;
200 class vtkPolyhedron;
201 class vtkIdTypeArray;
202 
203 class VTKCOMMONDATAMODEL_EXPORT vtkUnstructuredGrid : public vtkUnstructuredGridBase
204 {
205 public:
211 
213 
217  void PrintSelf(ostream& os, vtkIndent indent) override;
219 
223  int GetDataObjectType() override { return VTK_UNSTRUCTURED_GRID; }
224 
234  bool AllocateEstimate(vtkIdType numCells, vtkIdType maxCellSize)
235  {
236  return this->AllocateExact(numCells, numCells * maxCellSize);
237  }
238 
248  bool AllocateExact(vtkIdType numCells, vtkIdType connectivitySize);
249 
259  void Allocate(vtkIdType numCells = 1000, int vtkNotUsed(extSize) = 1000) override
260  {
261  this->AllocateExact(numCells, numCells);
262  }
263 
265 
268  void Reset();
269  void CopyStructure(vtkDataSet* ds) override;
271  using vtkDataSet::GetCell;
272  vtkCell* GetCell(vtkIdType cellId) override;
273  void GetCell(vtkIdType cellId, vtkGenericCell* cell) override;
274  void GetCellBounds(vtkIdType cellId, double bounds[6]) override;
275  void GetCellPoints(vtkIdType cellId, vtkIdList* ptIds) override;
276  void GetPointCells(vtkIdType ptId, vtkIdList* cellIds) override;
279 
283  int GetCellType(vtkIdType cellId) override;
284 
296  void GetCellTypes(vtkCellTypes* types) override;
297 
308  void GetCellPoints(vtkIdType cellId, vtkIdType& npts, vtkIdType const*& pts)
309  {
310  this->Connectivity->GetCellAtId(cellId, npts, pts);
311  }
312 
314 
319  void GetPointCells(vtkIdType ptId, vtkIdType& ncells, vtkIdType*& cells)
320  VTK_SIZEHINT(cells, ncells);
322  "Use vtkUnstructuredGrid::GetPointCells::vtkIdType, vtkIdType&, vtkIdType*&)")
323  void GetPointCells(vtkIdType ptId, unsigned short& ncells, vtkIdType*& cells)
324  VTK_SIZEHINT(cells, ncells);
326 
333  vtkUnsignedCharArray* GetCellTypesArray();
334 
338  void Squeeze() override;
339 
343  void Initialize() override;
344 
348  int GetMaxCellSize() override;
349 
354  void BuildLinks();
355 
363  vtkAbstractCellLinks* GetCellLinks();
364 
371  void GetFaceStream(vtkIdType cellId, vtkIdList* ptIds);
372 
381  void GetFaceStream(vtkIdType cellId, vtkIdType& nfaces, vtkIdType const*& ptIds);
382 
384 
393  void SetCells(int type, vtkCellArray* cells);
394  void SetCells(int* types, vtkCellArray* cells);
395  void SetCells(vtkUnsignedCharArray* cellTypes, vtkCellArray* cells);
396  void SetCells(vtkUnsignedCharArray* cellTypes, vtkCellArray* cells, vtkIdTypeArray* faceLocations,
397  vtkIdTypeArray* faces);
399 
403  vtkCellArray* GetCells() { return this->Connectivity; }
404 
406 
412  void GetCellNeighbors(vtkIdType cellId, vtkIdList* ptIds, vtkIdList* cellIds) override
413  {
414  this->GetCellNeighbors(cellId, ptIds->GetNumberOfIds(), ptIds->GetPointer(0), cellIds);
415  }
417  vtkIdType cellId, vtkIdType npts, const vtkIdType* ptIds, vtkIdList* cellIds);
419 
421 
431  bool IsCellBoundary(vtkIdType cellId, vtkIdType npts, const vtkIdType* ptIds);
433 
435 
439  vtkIdType InsertNextLinkedCell(int type, int npts, const vtkIdType pts[]) VTK_SIZEHINT(pts, npts);
442  void ResizeCellList(vtkIdType ptId, int size);
444 
446 
449  virtual int GetPiece();
450  virtual int GetNumberOfPieces();
452 
456  virtual int GetGhostLevel();
457 
466  unsigned long GetActualMemorySize() override;
467 
469 
472  void ShallowCopy(vtkDataObject* src) override;
473  void DeepCopy(vtkDataObject* src) override;
475 
481  void GetIdsOfCellsOfType(int type, vtkIdTypeArray* array) override;
482 
486  int IsHomogeneous() override;
487 
494 
496 
502 
507 
509 
515 
524 
533 
546  static void DecomposeAPolyhedronCell(vtkCellArray* polyhedronCellArray, vtkIdType& nCellpts,
547  vtkIdType& nCellfaces, vtkCellArray* cellArray, vtkIdTypeArray* faces);
548 
549  static void DecomposeAPolyhedronCell(const vtkIdType* polyhedronCellStream, vtkIdType& nCellpts,
550  vtkIdType& nCellfaces, vtkCellArray* cellArray, vtkIdTypeArray* faces);
551 
564  static void DecomposeAPolyhedronCell(vtkIdType nCellFaces, const vtkIdType* inFaceStream,
565  vtkIdType& nCellpts, vtkCellArray* cellArray, vtkIdTypeArray* faces);
566 
573  static void ConvertFaceStreamPointIds(vtkIdList* faceStream, vtkIdType* idMap);
574 
580  static void ConvertFaceStreamPointIds(vtkIdType nfaces, vtkIdType* faceStream, vtkIdType* idMap);
581 
582  //====================== Begin Legacy Methods ================================
583 
592 
594 
610  void SetCells(
611  vtkUnsignedCharArray* cellTypes, vtkIdTypeArray* cellLocations, vtkCellArray* cells);
612  void SetCells(vtkUnsignedCharArray* cellTypes, vtkIdTypeArray* cellLocations, vtkCellArray* cells,
613  vtkIdTypeArray* faceLocations, vtkIdTypeArray* faces);
615 
616  //====================== End Legacy Methods ==================================
617 
618 protected:
621 
622  // These are all the cells that vtkUnstructuredGrid can represent. Used by
623  // GetCell() (and similar) methods.
672 
673  // Points derived from vtkPointSet.
674  // Attribute data (i.e., point and cell data (i.e., scalars, vectors, normals, tcoords)
675  // derived from vtkDataSet.
676 
677  // The heart of the data represention. The points are managed by the
678  // superclass vtkPointSet. A cell is defined by its connectivity (i.e., the
679  // point ids that define the cell) and the cell type, represented by the
680  // Connectivity and Types arrays.
681  // Finally, when certain topological information is needed (e.g.,
682  // all the cells that use a point), the cell links array is built.
686 
687  // Set of all cell types present in the grid. All entries are unique.
689 
690  // The DistinctCellTypes is cached, so we keep track of the last time it was
691  // updated so we can compare it to the modified time of the Types array.
693 
694  // Special support for polyhedra/cells with explicit face representations.
695  // The Faces class represents polygonal faces using a modified vtkCellArray
696  // structure. Each cell face list begins with the total number of faces in
697  // the cell, followed by a vtkCellArray data organization
698  // (n,i,j,k,n,i,j,k,...).
701 
702  // Legacy support -- stores the old-style cell array locations.
704 
705  vtkIdType InternalInsertNextCell(int type, vtkIdType npts, const vtkIdType ptIds[]) override;
708  vtkIdType nfaces, const vtkIdType faces[]) override;
709  void InternalReplaceCell(vtkIdType cellId, int npts, const vtkIdType pts[]) override;
710 
711 private:
712  // Hide these from the user and the compiler.
713  vtkUnstructuredGrid(const vtkUnstructuredGrid&) = delete;
714  void operator=(const vtkUnstructuredGrid&) = delete;
715 
716  void Cleanup();
717 };
718 
719 #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:290
Efficient cell iterator for vtkDataSet topologies.
object provides direct access to cells in vtkCellArray and type information
Definition: vtkCellTypes.h:137
abstract class to specify cell behavior
Definition: vtkCell.h:147
a 3D cell defined by a set of convex points
cell represents a cubic , isoparametric 1D line
Definition: vtkCubicLine.h:62
general representation of visualization data
abstract class to specify dataset behavior
Definition: vtkDataSet.h:166
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
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
list of point or cell ids
Definition: vtkIdList.h:140
vtkIdType * GetPointer(const vtkIdType i)
Get a pointer to a particular data index.
Definition: vtkIdList.h:235
vtkIdType GetNumberOfIds() const noexcept
Return the number of id's in the list.
Definition: vtkIdList.h:166
dynamic, self-adjusting array of vtkIdType
a simple class to control print indentation
Definition: vtkIndent.h:113
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:140
a 3D cell that represents a convex prism with pentagonal base
a cell that represents an orthogonal quadrilateral
Definition: vtkPixel.h:74
cell represents a set of 1D lines
Definition: vtkPolyLine.h:146
cell represents a set of 0D vertices
Definition: vtkPolyVertex.h:72
a cell that represents an n-sided polygon
Definition: vtkPolygon.h:149
a 3D cell defined by a set of polygonal faces
Definition: vtkPolyhedron.h:97
a 3D cell that represents a linear pyramid
Definition: vtkPyramid.h:103
a cell that represents a 2D quadrilateral
Definition: vtkQuad.h:95
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:111
cell represents a parabolic, 27-node isoparametric hexahedron
cell represents a parabolic, 13-node isoparametric pyramid
a cell that represents a triangle strip
a cell that represents a triangle
Definition: vtkTriangle.h:145
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)
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
vtkCell * GetCell(vtkIdType cellId) override
Standard vtkDataSet methods; see vtkDataSet.h for documentation.
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
static vtkUnstructuredGrid * GetData(vtkInformation *info)
Retrieve an instance of this class from an information object.
vtkBezierQuadrilateral * BezierQuadrilateral
vtkSmartPointer< vtkIdTypeArray > CellLocations
vtkQuadraticLinearQuad * QuadraticLinearQuad
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.
vtkSmartPointer< vtkCellTypes > DistinctCellTypes
vtkQuadraticTetra * QuadraticTetra
vtkMTimeType DistinctCellTypesUpdateMTime
void GetCellPoints(vtkIdType cellId, vtkIdList *ptIds) override
Standard vtkDataSet methods; see vtkDataSet.h for documentation.
vtkSmartPointer< vtkIdTypeArray > Faces
vtkPolyVertex * PolyVertex
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)
Retrieve an instance of this class from an information object.
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
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...
vtkIdTypeArray * GetFaceLocations()
Get pointer to faces and facelocations.
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.
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
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.
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
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
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
A topological inquiry to retrieve all of the cells using list of points exclusive of the current cell...
static vtkUnstructuredGrid * ExtendedNew()
void CopyStructure(vtkDataSet *ds) override
Standard vtkDataSet methods; see vtkDataSet.h for documentation.
vtkConvexPointSet * ConvexPointSet
vtkSmartPointer< vtkCellArray > Connectivity
vtkBezierHexahedron * BezierHexahedron
vtkCellIterator * NewCellIterator() override
Standard vtkDataSet methods; see vtkDataSet.h for documentation.
~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,...
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 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()
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.
vtkPolyhedron * Polyhedron
static vtkUnstructuredGrid * New()
Standard instantiation method.
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:100
a cell that represents a 3D orthogonal parallelepiped
Definition: vtkVoxel.h:88
a 3D cell that represents a linear wedge
Definition: vtkWedge.h:93
@ info
Definition: vtkX3D.h:382
@ type
Definition: vtkX3D.h:522
@ size
Definition: vtkX3D.h:259
#define VTK_DEPRECATED_IN_9_0_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(...)