VTK  9.6.1
vtkUnstructuredGrid.h
Go to the documentation of this file.
1// SPDX-FileCopyrightText: Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
2// SPDX-License-Identifier: BSD-3-Clause
21
22#ifndef vtkUnstructuredGrid_h
23#define vtkUnstructuredGrid_h
24
25#include "vtkAbstractCellLinks.h" // For vtkAbstractCellLinks
26#include "vtkCellArray.h" // inline GetCellPoints()
27#include "vtkCommonDataModelModule.h" // For export macro
28#include "vtkDeprecation.h" // VTK_DEPRECATED_IN_9_6_0()
29#include "vtkSmartPointer.h" // for smart pointer
31#include "vtkWrappingHints.h" // For VTK_MARSHALMANUAL
32
33VTK_ABI_NAMESPACE_BEGIN
34class vtkIdList;
35class vtkIdTypeArray;
37
38class VTKCOMMONDATAMODEL_EXPORT VTK_MARSHALMANUAL vtkUnstructuredGrid
40{
41public:
47
49
53 void PrintSelf(ostream& os, vtkIndent indent) override;
55
59 int GetDataObjectType() VTK_FUTURE_CONST override { return VTK_UNSTRUCTURED_GRID; }
60
70 bool AllocateEstimate(vtkIdType numCells, vtkIdType maxCellSize)
71 {
72 return this->AllocateExact(numCells, numCells * maxCellSize);
73 }
74
84 bool AllocateExact(vtkIdType numCells, vtkIdType connectivitySize);
85
95 void Allocate(vtkIdType numCells = 1000, int vtkNotUsed(extSize) = 1000) override
96 {
97 this->AllocateExact(numCells, numCells);
98 }
99
101
104 void Reset();
105 void CopyStructure(vtkDataSet* ds) override;
108 vtkCell* GetCell(vtkIdType cellId) override;
109 void GetCell(vtkIdType cellId, vtkGenericCell* cell) override;
110 void GetCellBounds(vtkIdType cellId, double bounds[6]) override;
111 void GetCellPoints(vtkIdType cellId, vtkIdList* ptIds) override;
112 void GetPointCells(vtkIdType ptId, vtkIdList* cellIds) override;
115
119 int GetCellType(vtkIdType cellId) override;
120
125
127
138 void GetDistinctCellTypes(vtkCellTypes* types) override;
139 VTK_DEPRECATED_IN_9_6_0("Use GetDistinctCellTypes(vtkCellTypes* types) instead.")
140 void GetCellTypes(vtkCellTypes* types) override { this->GetDistinctCellTypes(types); }
142
156
169 void GetCellPoints(vtkIdType cellId, vtkIdType& npts, vtkIdType const*& pts)
170 {
171 this->Connectivity->GetCellAtId(cellId, npts, pts);
172 }
173
190 vtkIdType cellId, vtkIdType& npts, vtkIdType const*& pts, vtkIdList* ptIds) override
191 {
192 this->Connectivity->GetCellAtId(cellId, npts, pts, ptIds);
193 }
194
196
201 void GetPointCells(vtkIdType ptId, vtkIdType& ncells, vtkIdType*& cells)
202 VTK_SIZEHINT(cells, ncells);
204
206
212 vtkDataArray* GetCellTypes() { return this->Types; }
213 VTK_DEPRECATED_IN_9_6_0("Use GetCellTypes() instead")
216
220 void Squeeze() override;
221
225 void Initialize() override;
226
230 int GetMaxCellSize() override;
231
233
240
246
248
251 vtkSetSmartPointerMacro(Links, vtkAbstractCellLinks);
252 vtkGetSmartPointerMacro(Links, vtkAbstractCellLinks);
254
262 void GetFaceStream(vtkIdType cellId, vtkIdList* ptIds);
263
271 void SetCells(int type, vtkCellArray* cells);
272
274
284 void SetCells(int* types, vtkCellArray* cells);
285 void SetCells(vtkDataArray* cellTypes, vtkCellArray* cells);
287 vtkDataArray* cellTypes, vtkCellArray* cells, vtkCellArray* faceLocations, vtkCellArray* faces);
288 // VTK_DEPRECATED_IN_9_6_0
289 VTK_DEPRECATED_IN_9_5_0("This function is deprecated, use SetPolyhedralCells")
290 void SetCells(vtkUnsignedCharArray* cellTypes, vtkCellArray* cells, vtkIdTypeArray* faceLocations,
291 vtkIdTypeArray* faces);
293
297 vtkCellArray* GetCells() { return this->Connectivity; }
298
300
306 void GetCellNeighbors(vtkIdType cellId, vtkIdList* ptIds, vtkIdList* cellIds) override
307 {
308 this->GetCellNeighbors(cellId, ptIds->GetNumberOfIds(), ptIds->GetPointer(0), cellIds);
309 }
311 vtkIdType cellId, vtkIdType npts, const vtkIdType* ptIds, vtkIdList* cellIds);
313
323 vtkIdType cellId, unsigned char& cellType, vtkGenericCell* cell) override;
324
326
337 vtkIdType cellId, vtkIdType npts, const vtkIdType* ptIds, vtkIdType& neighborCellId);
338 bool IsCellBoundary(vtkIdType cellId, vtkIdType npts, const vtkIdType* ptIds)
339 {
340 vtkIdType neighborCellId;
341 return this->IsCellBoundary(cellId, npts, ptIds, neighborCellId);
342 }
343
344
346
350 vtkIdType InsertNextLinkedCell(int type, int npts, const vtkIdType pts[]) VTK_SIZEHINT(pts, npts);
353 void ResizeCellList(vtkIdType ptId, int size);
355
357
360 virtual int GetPiece();
361 virtual int GetNumberOfPieces();
363
367 virtual int GetGhostLevel();
368
377 unsigned long GetActualMemorySize() override;
378
380
383 void ShallowCopy(vtkDataObject* src) override;
384 void DeepCopy(vtkDataObject* src) override;
386
392 void GetIdsOfCellsOfType(int type, vtkIdTypeArray* array) override;
393
397 int IsHomogeneous() override;
398
405
407
413
418
420
427
436
445
458 static void DecomposeAPolyhedronCell(vtkCellArray* polyhedronCellArray, vtkIdType& nCellpts,
459 vtkIdType& nCellfaces, vtkCellArray* cellArray, vtkIdTypeArray* faces);
460
461 static void DecomposeAPolyhedronCell(const vtkIdType* polyhedronCellStream, vtkIdType& nCellpts,
462 vtkIdType& nCellfaces, vtkCellArray* cellArray, vtkIdTypeArray* faces);
463
476 static void DecomposeAPolyhedronCell(vtkIdType nCellFaces, const vtkIdType* inFaceStream,
477 vtkIdType& nCellpts, vtkCellArray* cellArray, vtkIdTypeArray* faces);
478
485 static void ConvertFaceStreamPointIds(vtkIdList* faceStream, vtkIdType* idMap);
486
492 static void ConvertFaceStreamPointIds(vtkIdType nfaces, vtkIdType* faceStream, vtkIdType* idMap);
493
500
501 //====================== Begin Legacy Methods ================================
502
510 VTK_DEPRECATED_IN_9_6_0("CellLocations is not longer used")
512
514
530 VTK_DEPRECATED_IN_9_6_0("CellLocations is not longer used, use other SetCells methods")
532 vtkUnsignedCharArray* cellTypes, vtkIdTypeArray* cellLocations, vtkCellArray* cells);
533 VTK_DEPRECATED_IN_9_6_0("This function is deprecated, use SetPolyhedralCells")
534 void SetCells(vtkUnsignedCharArray* cellTypes, vtkIdTypeArray* cellLocations, vtkCellArray* cells,
535 vtkIdTypeArray* faceLocations, vtkIdTypeArray* faces);
537
538 //====================== End Legacy Methods ==================================
539
540protected:
543
545
546 // Points derived from vtkPointSet.
547 // Attribute data (i.e., point and cell data (i.e., scalars, vectors, normals, tcoords)
548 // derived from vtkDataSet.
549
550 // The heart of the data representation. The points are managed by the
551 // superclass vtkPointSet. A cell is defined by its connectivity (i.e., the
552 // point ids that define the cell) and the cell type, represented by the
553 // Connectivity and Types arrays.
554 // Finally, when certain topological information is needed (e.g.,
555 // all the cells that use a point), the cell links array is built.
559
560 // Set of all cell types present in the grid. All entries are unique.
562
563 // The DistinctCellTypes is cached, so we keep track of the last time it was
564 // updated so we can compare it to the modified time of the Types array.
566
575
576 // VTK_DEPRECATED_IN_9_6_0()
577 // Legacy support -- stores the old-style cell array locations.
579
580 vtkIdType InternalInsertNextCell(int type, vtkIdType npts, const vtkIdType ptIds[]) override;
581 vtkIdType InternalInsertNextCell(int type, vtkIdList* ptIds) override;
583 int type, vtkIdType npts, const vtkIdType ptIds[], vtkIdType nfaces, const vtkIdType faces[]);
585 int type, vtkIdType npts, const vtkIdType pts[], vtkCellArray* faces) override;
586 void InternalReplaceCell(vtkIdType cellId, int npts, const vtkIdType pts[]) override;
587
600 static void DecomposeAPolyhedronCell(const vtkIdType* cellStream, vtkIdType& numCellPts,
601 vtkIdType& nCellFaces, vtkCellArray* cellArray, vtkCellArray* faces);
602
603 static void DecomposeAPolyhedronCell(vtkIdType nCellFaces, const vtkIdType* cellStream,
604 vtkIdType& numCellPts, vtkCellArray* cellArray, vtkCellArray* facesArray);
605
606 static void DecomposeAPolyhedronCell(vtkCellArray* polyhedronCell, vtkIdType& numCellPts,
607 vtkIdType& nCellfaces, vtkCellArray* cellArray, vtkCellArray* faces);
608
609 static void DecomposeAPolyhedronCell(const vtkIdType* cellStream, vtkIdType& numCellPts,
610 vtkIdType& nCellFaces, vtkCellArray* cellArray, vtkCellArray* faces,
611 vtkCellArray* faceLocations);
612
613 static void DecomposeAPolyhedronCell(vtkIdType nCellFaces, const vtkIdType* cellStream,
614 vtkIdType& numCellPts, vtkCellArray* cellArray, vtkCellArray* faces,
615 vtkCellArray* faceLocations);
616
617private:
618 // Hide these from the user and the compiler.
620 void operator=(const vtkUnstructuredGrid&) = delete;
621
622 void Cleanup();
623};
624
625VTK_ABI_NAMESPACE_END
626#endif
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:50
general representation of visualization data
virtual void GetDistinctCellTypes(vtkCellTypes *types)
Get a list of types of cells in a dataset.
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....
Detect and break reference loops.
provides thread-safe access to cells
list of point or cell ids
Definition vtkIdList.h:24
vtkIdType GetNumberOfIds() const noexcept
Return the number of id's in the list.
Definition vtkIdList.h:50
vtkIdType * GetPointer(vtkIdType i)
Get a pointer to a particular data index.
Definition vtkIdList.h:116
dynamic, self-adjusting array of vtkIdType
a simple class to control print indentation
Definition vtkIndent.h:29
Store zero or more vtkInformation instances.
Store vtkAlgorithm input/output information.
Hold a reference to a vtkObjectBase instance.
dynamic, self-adjusting array of unsigned char
void RemoveReferenceToCell(vtkIdType ptId, vtkIdType cellId)
Use these methods only if the dataset has been specified as Editable.
void GetCellTypes(vtkCellTypes *types) override
Get a list of types of cells in a dataset.
vtkSmartPointer< vtkCellArray > Faces
Special support for polyhedra/cells with explicit face representations.
void GetCell(vtkIdType cellId, vtkGenericCell *cell) override
Standard vtkDataSet methods; see vtkDataSet.h for documentation.
void InternalReplaceCell(vtkIdType cellId, int npts, const vtkIdType pts[]) override
vtkSmartPointer< vtkIdTypeArray > CellLocations
int GetDataObjectType() VTK_FUTURE_CONST override
Standard vtkDataSet API methods.
void SetPolyhedralCells(vtkDataArray *cellTypes, vtkCellArray *cells, vtkCellArray *faceLocations, vtkCellArray *faces)
Provide cell information to define the dataset.
void Allocate(vtkIdType numCells=1000, int extSize=1000) override
Method allocates initial storage for the cell connectivity.
vtkCellArray * GetCells()
Return the unstructured grid connectivity array.
void GetCellPoints(vtkIdType cellId, vtkIdType &npts, vtkIdType const *&pts)
A higher-performing variant of the virtual vtkDataSet::GetCellPoints() for unstructured grids.
vtkSmartPointer< vtkCellTypes > DistinctCellTypes
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.
vtkCellArray * GetPolyhedronFaces()
Get pointer to faces and facelocations for polyhedron cells.
int GetMaxSpatialDimension() override
Get the maximum/minimum spatial dimensionality of the data which is the maximum/minimum dimension of ...
void Squeeze() override
Squeeze all arrays in the grid to conserve memory.
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,...
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.
int GetCellNumberOfFaces(vtkIdType cellId, unsigned char &cellType, vtkGenericCell *cell) override
Get the number of faces of a cell.
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 GetPolyhedronFaces(vtkIdType cellId, vtkCellArray *faces)
Special support for polyhedron.
void ResizeCellList(vtkIdType ptId, int size)
Use these methods only if the dataset has been specified as Editable.
bool AllocateEstimate(vtkIdType numCells, vtkIdType maxCellSize)
Pre-allocate memory in internal data structures.
int InitializeFacesRepresentation(vtkIdType numPrevCells)
Special function used by vtkUnstructuredGridReader.
bool IsCellBoundary(vtkIdType cellId, vtkIdType npts, const vtkIdType *ptIds, vtkIdType &neighborCellId)
A topological inquiry to determine whether a topological entity (e.g., point, edge,...
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 with a single type.
vtkSmartPointer< vtkDataArray > Types
vtkCellArray * GetPolyhedronFaceLocations()
Get pointer to faces and facelocations for polyhedron cells.
vtkUnsignedCharArray * GetDistinctCellTypesArray()
Get a list of types of cells in a dataset.
vtkIdTypeArray * GetCellLocationsArray()
Get the array of all the starting indices of cell definitions in the cell array.
vtkSmartPointer< vtkCellArray > FaceLocations
static void DecomposeAPolyhedronCell(const vtkIdType *polyhedronCellStream, vtkIdType &nCellpts, vtkIdType &nCellfaces, vtkCellArray *cellArray, vtkIdTypeArray *faces)
void ReportReferences(vtkGarbageCollector *) override
bool IsCellBoundary(vtkIdType cellId, vtkIdType npts, const vtkIdType *ptIds)
A topological inquiry to determine whether a topological entity (e.g., point, edge,...
vtkMTimeType GetMeshMTime() override
Return the mesh (geometry/topology) modification time.
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.
bool AllocateExact(vtkIdType numCells, vtkIdType connectivitySize)
Pre-allocate memory in internal data structures.
void Reset()
Standard vtkDataSet methods; see vtkDataSet.h for documentation.
void GetPointCells(vtkIdType ptId, vtkIdList *cellIds) override
Standard vtkDataSet methods; see vtkDataSet.h for documentation.
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.
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 GetDistinctCellTypes(vtkCellTypes *types) override
Get a list of types of cells in a dataset.
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.
vtkSmartPointer< vtkCellArray > Connectivity
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,...
static void ConvertFaceStreamPointIds(vtkCellArray *faces, vtkIdType *idMap)
Convert pid in a face stream into idMap[pid].
int GetMinSpatialDimension() override
Get the maximum/minimum spatial dimensionality of the data which is the maximum/minimum dimension of ...
virtual int GetGhostLevel()
Get the ghost level.
int GetCellType(vtkIdType cellId) override
Get the type of the cell with the given cellId.
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.
unsigned long GetActualMemorySize() override
Return the actual size of the data in kibibytes (1024 bytes).
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()
static vtkUnstructuredGrid * New()
Standard instantiation method.
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.
vtkDataArray * GetCellTypes()
Get the array of all cell types in the grid.
void ShallowCopy(vtkDataObject *src) override
Shallow and Deep copy.
void DeepCopy(vtkDataObject *src) override
Shallow and Deep copy.
#define vtkDataArray
#define VTK_DEPRECATED_IN_9_6_0(reason)
#define VTK_DEPRECATED_IN_9_5_0(reason)
int vtkIdType
Definition vtkType.h:368
vtkTypeUInt32 vtkMTimeType
Definition vtkType.h:323
@ VTK_UNSTRUCTURED_GRID
Definition vtkType.h:113
#define VTK_SIZEHINT(...)
#define VTK_MARSHALMANUAL