VTK  9.7.20260720
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
130
131#ifndef vtkUnstructuredGrid_h
132#define vtkUnstructuredGrid_h
133
134#include "vtkAbstractCellLinks.h" // For vtkAbstractCellLinks
135#include "vtkCellArray.h" // inline GetCellPoints()
136#include "vtkCommonDataModelModule.h" // For export macro
137#include "vtkSmartPointer.h" // for smart pointer
139#include "vtkWrappingHints.h" // For VTK_MARSHALMANUAL
140
141VTK_ABI_NAMESPACE_BEGIN
142class vtkIdList;
143class vtkIdTypeArray;
145
146class VTKCOMMONDATAMODEL_EXPORT VTK_MARSHALMANUAL vtkUnstructuredGrid
148{
149public:
155
157
161 void PrintSelf(ostream& os, vtkIndent indent) override;
163
167 int GetDataObjectType() VTK_FUTURE_CONST override { return VTK_UNSTRUCTURED_GRID; }
168
178 bool AllocateEstimate(vtkIdType numCells, vtkIdType maxCellSize)
179 {
180 return this->AllocateExact(numCells, numCells * maxCellSize);
181 }
182
192 bool AllocateExact(vtkIdType numCells, vtkIdType connectivitySize);
193
203 void Allocate(vtkIdType numCells = 1000, int vtkNotUsed(extSize) = 1000) override
204 {
205 this->AllocateExact(numCells, numCells);
206 }
207
209
212 void Reset();
213 void CopyStructure(vtkDataSet* ds) override;
216 vtkCell* GetCell(vtkIdType cellId) override;
217 void GetCell(vtkIdType cellId, vtkGenericCell* cell) override;
218 void GetCellBounds(vtkIdType cellId, double bounds[6]) override;
219 void GetCellPoints(vtkIdType cellId, vtkIdList* ptIds) override;
220 void GetPointCells(vtkIdType ptId, vtkIdList* cellIds) override;
223
227 int GetCellType(vtkIdType cellId) override;
228
233
235
246 void GetDistinctCellTypes(vtkCellTypes* types) override;
248
262
275 void GetCellPoints(vtkIdType cellId, vtkIdType& npts, vtkIdType const*& pts)
276 {
277 this->Connectivity->GetCellAtId(cellId, npts, pts);
278 }
279
296 vtkIdType cellId, vtkIdType& npts, vtkIdType const*& pts, vtkIdList* ptIds) override
297 {
298 this->Connectivity->GetCellAtId(cellId, npts, pts, ptIds);
299 }
300
302
307 void GetPointCells(vtkIdType ptId, vtkIdType& ncells, vtkIdType*& cells)
308 VTK_SIZEHINT(cells, ncells);
310
317 vtkDataArray* GetCellTypes() { return this->Types; }
318
322 void Squeeze() override;
323
327 void Initialize() override;
328
332 int GetMaxCellSize() override;
333
335
342
348
350
353 vtkSetSmartPointerMacro(Links, vtkAbstractCellLinks);
354 vtkGetSmartPointerMacro(Links, vtkAbstractCellLinks);
356
364 void GetFaceStream(vtkIdType cellId, vtkIdList* ptIds);
365
373 void SetCells(int type, vtkCellArray* cells);
374
376
386 void SetCells(int* types, vtkCellArray* cells);
387 void SetCells(vtkDataArray* cellTypes, vtkCellArray* cells);
389 vtkDataArray* cellTypes, vtkCellArray* cells, vtkCellArray* faceLocations, vtkCellArray* faces);
391
395 vtkCellArray* GetCells() { return this->Connectivity; }
396
398
404 void GetCellNeighbors(vtkIdType cellId, vtkIdList* ptIds, vtkIdList* cellIds) override
405 {
406 this->GetCellNeighbors(cellId, ptIds->GetNumberOfIds(), ptIds->GetPointer(0), cellIds);
407 }
409 vtkIdType cellId, vtkIdType npts, const vtkIdType* ptIds, vtkIdList* cellIds);
411
421 vtkIdType cellId, unsigned char& cellType, vtkGenericCell* cell) override;
422
424
435 vtkIdType cellId, vtkIdType npts, const vtkIdType* ptIds, vtkIdType& neighborCellId);
436 bool IsCellBoundary(vtkIdType cellId, vtkIdType npts, const vtkIdType* ptIds)
437 {
438 vtkIdType neighborCellId;
439 return this->IsCellBoundary(cellId, npts, ptIds, neighborCellId);
440 }
441
442
444
448 vtkIdType InsertNextLinkedCell(int type, int npts, const vtkIdType pts[]) VTK_SIZEHINT(pts, npts);
451 void ResizeCellList(vtkIdType ptId, int size);
453
455
458 virtual int GetPiece();
459 virtual int GetNumberOfPieces();
461
465 virtual int GetGhostLevel();
466
475 unsigned long GetActualMemorySize() override;
476
478
481 void ShallowCopy(vtkDataObject* src) override;
482 void DeepCopy(vtkDataObject* src) override;
484
490 void GetIdsOfCellsOfType(int type, vtkIdTypeArray* array) override;
491
495 int IsHomogeneous() override;
496
503
505
511
516
518
525
534
543
556 static void DecomposeAPolyhedronCell(vtkCellArray* polyhedronCellArray, vtkIdType& nCellpts,
557 vtkIdType& nCellfaces, vtkCellArray* cellArray, vtkIdTypeArray* faces);
558
559 static void DecomposeAPolyhedronCell(const vtkIdType* polyhedronCellStream, vtkIdType& nCellpts,
560 vtkIdType& nCellfaces, vtkCellArray* cellArray, vtkIdTypeArray* faces);
561
574 static void DecomposeAPolyhedronCell(vtkIdType nCellFaces, const vtkIdType* inFaceStream,
575 vtkIdType& nCellpts, vtkCellArray* cellArray, vtkIdTypeArray* faces);
576
583 static void ConvertFaceStreamPointIds(vtkIdList* faceStream, vtkIdType* idMap);
584
590 static void ConvertFaceStreamPointIds(vtkIdType nfaces, vtkIdType* faceStream, vtkIdType* idMap);
591
598
599protected:
602
604
605 // Points derived from vtkPointSet.
606 // Attribute data (i.e., point and cell data (i.e., scalars, vectors, normals, tcoords)
607 // derived from vtkDataSet.
608
609 // The heart of the data representation. The points are managed by the
610 // superclass vtkPointSet. A cell is defined by its connectivity (i.e., the
611 // point ids that define the cell) and the cell type, represented by the
612 // Connectivity and Types arrays.
613 // Finally, when certain topological information is needed (e.g.,
614 // all the cells that use a point), the cell links array is built.
618
619 // Set of all cell types present in the grid. All entries are unique.
621
622 // The DistinctCellTypes is cached, so we keep track of the last time it was
623 // updated so we can compare it to the modified time of the Types array.
625
634
635 vtkIdType InternalInsertNextCell(int type, vtkIdType npts, const vtkIdType ptIds[]) override;
636 vtkIdType InternalInsertNextCell(int type, vtkIdList* ptIds) override;
638 int type, vtkIdType npts, const vtkIdType ptIds[], vtkIdType nfaces, const vtkIdType faces[]);
640 int type, vtkIdType npts, const vtkIdType pts[], vtkCellArray* faces) override;
641 void InternalReplaceCell(vtkIdType cellId, int npts, const vtkIdType pts[]) override;
642
655 static void DecomposeAPolyhedronCell(const vtkIdType* cellStream, vtkIdType& numCellPts,
656 vtkIdType& nCellFaces, vtkCellArray* cellArray, vtkCellArray* faces);
657
658 static void DecomposeAPolyhedronCell(vtkIdType nCellFaces, const vtkIdType* cellStream,
659 vtkIdType& numCellPts, vtkCellArray* cellArray, vtkCellArray* facesArray);
660
661 static void DecomposeAPolyhedronCell(vtkCellArray* polyhedronCell, vtkIdType& numCellPts,
662 vtkIdType& nCellfaces, vtkCellArray* cellArray, vtkCellArray* faces);
663
664 static void DecomposeAPolyhedronCell(const vtkIdType* cellStream, vtkIdType& numCellPts,
665 vtkIdType& nCellFaces, vtkCellArray* cellArray, vtkCellArray* faces,
666 vtkCellArray* faceLocations);
667
668 static void DecomposeAPolyhedronCell(vtkIdType nCellFaces, const vtkIdType* cellStream,
669 vtkIdType& numCellPts, vtkCellArray* cellArray, vtkCellArray* faces,
670 vtkCellArray* faceLocations);
671
672private:
673 // Hide these from the user and the compiler.
675 void operator=(const vtkUnstructuredGrid&) = delete;
676
677 void Cleanup();
678};
679
680VTK_ABI_NAMESPACE_END
681#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:130
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....
Detect and break reference loops.
provides thread-safe access to cells
list of point or cell ids
Definition vtkIdList.h:135
vtkIdType GetNumberOfIds() const noexcept
Return the number of id's in the list.
Definition vtkIdList.h:185
vtkIdType * GetPointer(vtkIdType i)
Get a pointer to a particular data index.
Definition vtkIdList.h:259
dynamic, self-adjusting array of vtkIdType
a simple class to control print indentation
Definition vtkIndent.h:108
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.
static void DecomposeAPolyhedronCell(const vtkIdType *cellStream, vtkIdType &numCellPts, vtkIdType &nCellFaces, vtkCellArray *cellArray, vtkCellArray *faces, vtkCellArray *faceLocations)
static void DecomposeAPolyhedronCell(vtkIdType nCellFaces, const vtkIdType *cellStream, vtkIdType &numCellPts, vtkCellArray *cellArray, vtkCellArray *facesArray)
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
vtkIdType InternalInsertNextCell(int type, vtkIdType npts, const vtkIdType pts[], vtkCellArray *faces) override
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.
vtkIdType InternalInsertNextCell(int type, vtkIdList *ptIds) override
vtkSmartPointer< vtkCellTypes > DistinctCellTypes
void SetCells(int *types, vtkCellArray *cells)
Provide cell information to define the dataset.
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,...
static void DecomposeAPolyhedronCell(const vtkIdType *cellStream, vtkIdType &numCellPts, vtkIdType &nCellFaces, vtkCellArray *cellArray, vtkCellArray *faces)
A static method for converting an input polyhedron cell stream of format [nFace0Pts,...
void SetCells(vtkDataArray *cellTypes, vtkCellArray *cells)
Provide cell information to define the dataset.
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.
static void DecomposeAPolyhedronCell(vtkIdType nCellFaces, const vtkIdType *cellStream, vtkIdType &numCellPts, vtkCellArray *cellArray, vtkCellArray *faces, vtkCellArray *faceLocations)
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.
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
static void DecomposeAPolyhedronCell(vtkCellArray *polyhedronCell, vtkIdType &numCellPts, vtkIdType &nCellfaces, vtkCellArray *cellArray, vtkCellArray *faces)
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
~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,...
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.
vtkIdType InternalInsertNextCell(int type, vtkIdType npts, const vtkIdType ptIds[], vtkIdType nfaces, const vtkIdType faces[])
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
int vtkIdType
Definition vtkType.h:363
vtkTypeUInt32 vtkMTimeType
Definition vtkType.h:318
@ VTK_UNSTRUCTURED_GRID
Definition vtkType.h:113
#define VTK_SIZEHINT(...)
#define VTK_MARSHALMANUAL