VTK  9.6.20260626
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;
249
263
276 void GetCellPoints(vtkIdType cellId, vtkIdType& npts, vtkIdType const*& pts)
277 {
278 this->Connectivity->GetCellAtId(cellId, npts, pts);
279 }
280
297 vtkIdType cellId, vtkIdType& npts, vtkIdType const*& pts, vtkIdList* ptIds) override
298 {
299 this->Connectivity->GetCellAtId(cellId, npts, pts, ptIds);
300 }
301
303
308 void GetPointCells(vtkIdType ptId, vtkIdType& ncells, vtkIdType*& cells)
309 VTK_SIZEHINT(cells, ncells);
311
313
320 vtkDataArray* GetCellTypes() { return this->Types; }
321 VTK_DEPRECATED_IN_9_6_0("Use GetCellTypes() instead")
324
328 void Squeeze() override;
329
333 void Initialize() override;
334
338 int GetMaxCellSize() override;
339
341
348
354
356
359 vtkSetSmartPointerMacro(Links, vtkAbstractCellLinks);
360 vtkGetSmartPointerMacro(Links, vtkAbstractCellLinks);
362
370 void GetFaceStream(vtkIdType cellId, vtkIdList* ptIds);
371
379 void SetCells(int type, vtkCellArray* cells);
380
382
392 void SetCells(int* types, vtkCellArray* cells);
393 void SetCells(vtkDataArray* cellTypes, vtkCellArray* cells);
395 vtkDataArray* cellTypes, vtkCellArray* cells, vtkCellArray* faceLocations, vtkCellArray* faces);
396 VTK_DEPRECATED_IN_9_6_0("This function is deprecated, use SetPolyhedralCells")
397 void SetCells(vtkUnsignedCharArray* cellTypes, vtkCellArray* cells, vtkIdTypeArray* faceLocations,
398 vtkIdTypeArray* faces);
400
404 vtkCellArray* GetCells() { return this->Connectivity; }
405
407
413 void GetCellNeighbors(vtkIdType cellId, vtkIdList* ptIds, vtkIdList* cellIds) override
414 {
415 this->GetCellNeighbors(cellId, ptIds->GetNumberOfIds(), ptIds->GetPointer(0), cellIds);
416 }
418 vtkIdType cellId, vtkIdType npts, const vtkIdType* ptIds, vtkIdList* cellIds);
420
430 vtkIdType cellId, unsigned char& cellType, vtkGenericCell* cell) override;
431
433
444 vtkIdType cellId, vtkIdType npts, const vtkIdType* ptIds, vtkIdType& neighborCellId);
445 bool IsCellBoundary(vtkIdType cellId, vtkIdType npts, const vtkIdType* ptIds)
446 {
447 vtkIdType neighborCellId;
448 return this->IsCellBoundary(cellId, npts, ptIds, neighborCellId);
449 }
450
451
453
457 vtkIdType InsertNextLinkedCell(int type, int npts, const vtkIdType pts[]) VTK_SIZEHINT(pts, npts);
460 void ResizeCellList(vtkIdType ptId, int size);
462
464
467 virtual int GetPiece();
468 virtual int GetNumberOfPieces();
470
474 virtual int GetGhostLevel();
475
484 unsigned long GetActualMemorySize() override;
485
487
490 void ShallowCopy(vtkDataObject* src) override;
491 void DeepCopy(vtkDataObject* src) override;
493
499 void GetIdsOfCellsOfType(int type, vtkIdTypeArray* array) override;
500
504 int IsHomogeneous() override;
505
512
514
520
525
527
534
543
552
565 static void DecomposeAPolyhedronCell(vtkCellArray* polyhedronCellArray, vtkIdType& nCellpts,
566 vtkIdType& nCellfaces, vtkCellArray* cellArray, vtkIdTypeArray* faces);
567
568 static void DecomposeAPolyhedronCell(const vtkIdType* polyhedronCellStream, vtkIdType& nCellpts,
569 vtkIdType& nCellfaces, vtkCellArray* cellArray, vtkIdTypeArray* faces);
570
583 static void DecomposeAPolyhedronCell(vtkIdType nCellFaces, const vtkIdType* inFaceStream,
584 vtkIdType& nCellpts, vtkCellArray* cellArray, vtkIdTypeArray* faces);
585
592 static void ConvertFaceStreamPointIds(vtkIdList* faceStream, vtkIdType* idMap);
593
599 static void ConvertFaceStreamPointIds(vtkIdType nfaces, vtkIdType* faceStream, vtkIdType* idMap);
600
607
608 //====================== Begin Legacy Methods ================================
609
617 VTK_DEPRECATED_IN_9_6_0("CellLocations is not longer used")
619
621
637 VTK_DEPRECATED_IN_9_6_0("CellLocations is not longer used, use other SetCells methods")
639 vtkUnsignedCharArray* cellTypes, vtkIdTypeArray* cellLocations, vtkCellArray* cells);
640 VTK_DEPRECATED_IN_9_6_0("This function is deprecated, use SetPolyhedralCells")
641 void SetCells(vtkUnsignedCharArray* cellTypes, vtkIdTypeArray* cellLocations, vtkCellArray* cells,
642 vtkIdTypeArray* faceLocations, vtkIdTypeArray* faces);
644
645 //====================== End Legacy Methods ==================================
646
647protected:
650
652
653 // Points derived from vtkPointSet.
654 // Attribute data (i.e., point and cell data (i.e., scalars, vectors, normals, tcoords)
655 // derived from vtkDataSet.
656
657 // The heart of the data representation. The points are managed by the
658 // superclass vtkPointSet. A cell is defined by its connectivity (i.e., the
659 // point ids that define the cell) and the cell type, represented by the
660 // Connectivity and Types arrays.
661 // Finally, when certain topological information is needed (e.g.,
662 // all the cells that use a point), the cell links array is built.
666
667 // Set of all cell types present in the grid. All entries are unique.
669
670 // The DistinctCellTypes is cached, so we keep track of the last time it was
671 // updated so we can compare it to the modified time of the Types array.
673
682
683 // VTK_DEPRECATED_IN_9_6_0()
684 // Legacy support -- stores the old-style cell array locations.
686
687 vtkIdType InternalInsertNextCell(int type, vtkIdType npts, const vtkIdType ptIds[]) override;
688 vtkIdType InternalInsertNextCell(int type, vtkIdList* ptIds) override;
690 int type, vtkIdType npts, const vtkIdType ptIds[], vtkIdType nfaces, const vtkIdType faces[]);
692 int type, vtkIdType npts, const vtkIdType pts[], vtkCellArray* faces) override;
693 void InternalReplaceCell(vtkIdType cellId, int npts, const vtkIdType pts[]) override;
694
707 static void DecomposeAPolyhedronCell(const vtkIdType* cellStream, vtkIdType& numCellPts,
708 vtkIdType& nCellFaces, vtkCellArray* cellArray, vtkCellArray* faces);
709
710 static void DecomposeAPolyhedronCell(vtkIdType nCellFaces, const vtkIdType* cellStream,
711 vtkIdType& numCellPts, vtkCellArray* cellArray, vtkCellArray* facesArray);
712
713 static void DecomposeAPolyhedronCell(vtkCellArray* polyhedronCell, vtkIdType& numCellPts,
714 vtkIdType& nCellfaces, vtkCellArray* cellArray, vtkCellArray* faces);
715
716 static void DecomposeAPolyhedronCell(const vtkIdType* cellStream, vtkIdType& numCellPts,
717 vtkIdType& nCellFaces, vtkCellArray* cellArray, vtkCellArray* faces,
718 vtkCellArray* faceLocations);
719
720 static void DecomposeAPolyhedronCell(vtkIdType nCellFaces, const vtkIdType* cellStream,
721 vtkIdType& numCellPts, vtkCellArray* cellArray, vtkCellArray* faces,
722 vtkCellArray* faceLocations);
723
724private:
725 // Hide these from the user and the compiler.
727 void operator=(const vtkUnstructuredGrid&) = delete;
728
729 void Cleanup();
730};
731
732VTK_ABI_NAMESPACE_END
733#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 void GetCellTypes(vtkCellTypes *types)
Get a list of types of cells in a dataset.
Definition vtkDataSet.h:298
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.
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:363
vtkTypeUInt32 vtkMTimeType
Definition vtkType.h:318
@ VTK_UNSTRUCTURED_GRID
Definition vtkType.h:113
#define VTK_SIZEHINT(...)
#define VTK_MARSHALMANUAL