VTK  9.6.20260116
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 "vtkDeprecation.h" // VTK_DEPRECATED_IN_9_6_0()
138#include "vtkSmartPointer.h" // for smart pointer
140#include "vtkWrappingHints.h" // For VTK_MARSHALMANUAL
141
142VTK_ABI_NAMESPACE_BEGIN
143class vtkIdList;
144class vtkIdTypeArray;
146
147class VTKCOMMONDATAMODEL_EXPORT VTK_MARSHALMANUAL vtkUnstructuredGrid
149{
150public:
156
158
162 void PrintSelf(ostream& os, vtkIndent indent) override;
164
168 int GetDataObjectType() VTK_FUTURE_CONST override { return VTK_UNSTRUCTURED_GRID; }
169
179 bool AllocateEstimate(vtkIdType numCells, vtkIdType maxCellSize)
180 {
181 return this->AllocateExact(numCells, numCells * maxCellSize);
182 }
183
193 bool AllocateExact(vtkIdType numCells, vtkIdType connectivitySize);
194
204 void Allocate(vtkIdType numCells = 1000, int vtkNotUsed(extSize) = 1000) override
205 {
206 this->AllocateExact(numCells, numCells);
207 }
208
210
213 void Reset();
214 void CopyStructure(vtkDataSet* ds) override;
217 vtkCell* GetCell(vtkIdType cellId) override;
218 void GetCell(vtkIdType cellId, vtkGenericCell* cell) override;
219 void GetCellBounds(vtkIdType cellId, double bounds[6]) override;
220 void GetCellPoints(vtkIdType cellId, vtkIdList* ptIds) override;
221 void GetPointCells(vtkIdType ptId, vtkIdList* cellIds) override;
224
228 int GetCellType(vtkIdType cellId) override;
229
234
236
247 void GetDistinctCellTypes(vtkCellTypes* types) override;
248 VTK_DEPRECATED_IN_9_6_0("Use GetDistinctCellTypes(vtkCellTypes* types) instead.")
249 void GetCellTypes(vtkCellTypes* types) override { this->GetDistinctCellTypes(types); }
251
265
278 void GetCellPoints(vtkIdType cellId, vtkIdType& npts, vtkIdType const*& pts)
279 {
280 this->Connectivity->GetCellAtId(cellId, npts, pts);
281 }
282
299 vtkIdType cellId, vtkIdType& npts, vtkIdType const*& pts, vtkIdList* ptIds) override
300 {
301 this->Connectivity->GetCellAtId(cellId, npts, pts, ptIds);
302 }
303
305
310 void GetPointCells(vtkIdType ptId, vtkIdType& ncells, vtkIdType*& cells)
311 VTK_SIZEHINT(cells, ncells);
313
315
321 vtkDataArray* GetCellTypes() { return this->Types; }
322 VTK_DEPRECATED_IN_9_6_0("Use GetCellTypes() instead")
325
329 void Squeeze() override;
330
334 void Initialize() override;
335
339 int GetMaxCellSize() override;
340
342
349
355
357
360 vtkSetSmartPointerMacro(Links, vtkAbstractCellLinks);
361 vtkGetSmartPointerMacro(Links, vtkAbstractCellLinks);
363
371 void GetFaceStream(vtkIdType cellId, vtkIdList* ptIds);
372
380 void SetCells(int type, vtkCellArray* cells);
381
383
393 void SetCells(int* types, vtkCellArray* cells);
394 void SetCells(vtkDataArray* cellTypes, vtkCellArray* cells);
396 vtkDataArray* cellTypes, vtkCellArray* cells, vtkCellArray* faceLocations, vtkCellArray* faces);
397 VTK_DEPRECATED_IN_9_6_0("This function is deprecated, use SetPolyhedralCells")
398 void SetCells(vtkUnsignedCharArray* cellTypes, vtkCellArray* cells, vtkIdTypeArray* faceLocations,
399 vtkIdTypeArray* faces);
401
405 vtkCellArray* GetCells() { return this->Connectivity; }
406
408
414 void GetCellNeighbors(vtkIdType cellId, vtkIdList* ptIds, vtkIdList* cellIds) override
415 {
416 this->GetCellNeighbors(cellId, ptIds->GetNumberOfIds(), ptIds->GetPointer(0), cellIds);
417 }
419 vtkIdType cellId, vtkIdType npts, const vtkIdType* ptIds, vtkIdList* cellIds);
421
431 vtkIdType cellId, unsigned char& cellType, vtkGenericCell* cell) override;
432
434
445 vtkIdType cellId, vtkIdType npts, const vtkIdType* ptIds, vtkIdType& neighborCellId);
446 bool IsCellBoundary(vtkIdType cellId, vtkIdType npts, const vtkIdType* ptIds)
447 {
448 vtkIdType neighborCellId;
449 return this->IsCellBoundary(cellId, npts, ptIds, neighborCellId);
450 }
451
452
454
458 vtkIdType InsertNextLinkedCell(int type, int npts, const vtkIdType pts[]) VTK_SIZEHINT(pts, npts);
461 void ResizeCellList(vtkIdType ptId, int size);
463
465
468 virtual int GetPiece();
469 virtual int GetNumberOfPieces();
471
475 virtual int GetGhostLevel();
476
485 unsigned long GetActualMemorySize() override;
486
488
491 void ShallowCopy(vtkDataObject* src) override;
492 void DeepCopy(vtkDataObject* src) override;
494
500 void GetIdsOfCellsOfType(int type, vtkIdTypeArray* array) override;
501
505 int IsHomogeneous() override;
506
513
515
521
526
528
535
544
553
566 static void DecomposeAPolyhedronCell(vtkCellArray* polyhedronCellArray, vtkIdType& nCellpts,
567 vtkIdType& nCellfaces, vtkCellArray* cellArray, vtkIdTypeArray* faces);
568
569 static void DecomposeAPolyhedronCell(const vtkIdType* polyhedronCellStream, vtkIdType& nCellpts,
570 vtkIdType& nCellfaces, vtkCellArray* cellArray, vtkIdTypeArray* faces);
571
584 static void DecomposeAPolyhedronCell(vtkIdType nCellFaces, const vtkIdType* inFaceStream,
585 vtkIdType& nCellpts, vtkCellArray* cellArray, vtkIdTypeArray* faces);
586
593 static void ConvertFaceStreamPointIds(vtkIdList* faceStream, vtkIdType* idMap);
594
600 static void ConvertFaceStreamPointIds(vtkIdType nfaces, vtkIdType* faceStream, vtkIdType* idMap);
601
608
609 //====================== Begin Legacy Methods ================================
610
618 VTK_DEPRECATED_IN_9_6_0("CellLocations is not longer used")
620
622
638 VTK_DEPRECATED_IN_9_6_0("CellLocations is not longer used, use other SetCells methods")
640 vtkUnsignedCharArray* cellTypes, vtkIdTypeArray* cellLocations, vtkCellArray* cells);
641 VTK_DEPRECATED_IN_9_6_0("This function is deprecated, use SetPolyhedralCells")
642 void SetCells(vtkUnsignedCharArray* cellTypes, vtkIdTypeArray* cellLocations, vtkCellArray* cells,
643 vtkIdTypeArray* faceLocations, vtkIdTypeArray* faces);
645
646 //====================== End Legacy Methods ==================================
647
648protected:
651
653
654 // Points derived from vtkPointSet.
655 // Attribute data (i.e., point and cell data (i.e., scalars, vectors, normals, tcoords)
656 // derived from vtkDataSet.
657
658 // The heart of the data representation. The points are managed by the
659 // superclass vtkPointSet. A cell is defined by its connectivity (i.e., the
660 // point ids that define the cell) and the cell type, represented by the
661 // Connectivity and Types arrays.
662 // Finally, when certain topological information is needed (e.g.,
663 // all the cells that use a point), the cell links array is built.
667
668 // Set of all cell types present in the grid. All entries are unique.
670
671 // The DistinctCellTypes is cached, so we keep track of the last time it was
672 // updated so we can compare it to the modified time of the Types array.
674
683
684 // VTK_DEPRECATED_IN_9_6_0()
685 // Legacy support -- stores the old-style cell array locations.
687
688 vtkIdType InternalInsertNextCell(int type, vtkIdType npts, const vtkIdType ptIds[]) override;
689 vtkIdType InternalInsertNextCell(int type, vtkIdList* ptIds) override;
691 int type, vtkIdType npts, const vtkIdType ptIds[], vtkIdType nfaces, const vtkIdType faces[]);
693 int type, vtkIdType npts, const vtkIdType pts[], vtkCellArray* faces) override;
694 void InternalReplaceCell(vtkIdType cellId, int npts, const vtkIdType pts[]) override;
695
708 static void DecomposeAPolyhedronCell(const vtkIdType* cellStream, vtkIdType& numCellPts,
709 vtkIdType& nCellFaces, vtkCellArray* cellArray, vtkCellArray* faces);
710
711 static void DecomposeAPolyhedronCell(vtkIdType nCellFaces, const vtkIdType* cellStream,
712 vtkIdType& numCellPts, vtkCellArray* cellArray, vtkCellArray* facesArray);
713
714 static void DecomposeAPolyhedronCell(vtkCellArray* polyhedronCell, vtkIdType& numCellPts,
715 vtkIdType& nCellfaces, vtkCellArray* cellArray, vtkCellArray* faces);
716
717 static void DecomposeAPolyhedronCell(const vtkIdType* cellStream, vtkIdType& numCellPts,
718 vtkIdType& nCellFaces, vtkCellArray* cellArray, vtkCellArray* faces,
719 vtkCellArray* faceLocations);
720
721 static void DecomposeAPolyhedronCell(vtkIdType nCellFaces, const vtkIdType* cellStream,
722 vtkIdType& numCellPts, vtkCellArray* cellArray, vtkCellArray* faces,
723 vtkCellArray* faceLocations);
724
725private:
726 // Hide these from the user and the compiler.
728 void operator=(const vtkUnstructuredGrid&) = delete;
729
730 void Cleanup();
731};
732
733VTK_ABI_NAMESPACE_END
734#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:129
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:133
vtkIdType GetNumberOfIds() const noexcept
Return the number of id's in the list.
Definition vtkIdList.h:159
vtkIdType * GetPointer(vtkIdType i)
Get a pointer to a particular data index.
Definition vtkIdList.h:225
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.
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)
int vtkIdType
Definition vtkType.h:354
vtkTypeUInt32 vtkMTimeType
Definition vtkType.h:309
@ VTK_UNSTRUCTURED_GRID
Definition vtkType.h:104
#define VTK_SIZEHINT(...)
#define VTK_MARSHALMANUAL