VTK  9.7.0
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;
140
154
167 void GetCellPoints(vtkIdType cellId, vtkIdType& npts, vtkIdType const*& pts)
168 {
169 this->Connectivity->GetCellAtId(cellId, npts, pts);
170 }
171
188 vtkIdType cellId, vtkIdType& npts, vtkIdType const*& pts, vtkIdList* ptIds) override
189 {
190 this->Connectivity->GetCellAtId(cellId, npts, pts, ptIds);
191 }
192
194
199 void GetPointCells(vtkIdType ptId, vtkIdType& ncells, vtkIdType*& cells)
200 VTK_SIZEHINT(cells, ncells);
202
204
211 vtkDataArray* GetCellTypes() { return this->Types; }
212 VTK_DEPRECATED_IN_9_6_0("Use GetCellTypes() instead")
215
219 void Squeeze() override;
220
224 void Initialize() override;
225
229 int GetMaxCellSize() override;
230
232
239
245
247
250 vtkSetSmartPointerMacro(Links, vtkAbstractCellLinks);
251 vtkGetSmartPointerMacro(Links, vtkAbstractCellLinks);
253
261 void GetFaceStream(vtkIdType cellId, vtkIdList* ptIds);
262
270 void SetCells(int type, vtkCellArray* cells);
271
273
283 void SetCells(int* types, vtkCellArray* cells);
284 void SetCells(vtkDataArray* cellTypes, vtkCellArray* cells);
286 vtkDataArray* cellTypes, vtkCellArray* cells, vtkCellArray* faceLocations, vtkCellArray* faces);
287 VTK_DEPRECATED_IN_9_6_0("This function is deprecated, use SetPolyhedralCells")
288 void SetCells(vtkUnsignedCharArray* cellTypes, vtkCellArray* cells, vtkIdTypeArray* faceLocations,
289 vtkIdTypeArray* faces);
291
295 vtkCellArray* GetCells() { return this->Connectivity; }
296
298
304 void GetCellNeighbors(vtkIdType cellId, vtkIdList* ptIds, vtkIdList* cellIds) override
305 {
306 this->GetCellNeighbors(cellId, ptIds->GetNumberOfIds(), ptIds->GetPointer(0), cellIds);
307 }
309 vtkIdType cellId, vtkIdType npts, const vtkIdType* ptIds, vtkIdList* cellIds);
311
321 vtkIdType cellId, unsigned char& cellType, vtkGenericCell* cell) override;
322
324
335 vtkIdType cellId, vtkIdType npts, const vtkIdType* ptIds, vtkIdType& neighborCellId);
336 bool IsCellBoundary(vtkIdType cellId, vtkIdType npts, const vtkIdType* ptIds)
337 {
338 vtkIdType neighborCellId;
339 return this->IsCellBoundary(cellId, npts, ptIds, neighborCellId);
340 }
342
344
348 vtkIdType InsertNextLinkedCell(int type, int npts, const vtkIdType pts[]) VTK_SIZEHINT(pts, npts);
351 void ResizeCellList(vtkIdType ptId, int size);
353
355
358 virtual int GetPiece();
359 virtual int GetNumberOfPieces();
361
365 virtual int GetGhostLevel();
366
375 unsigned long GetActualMemorySize() override;
376
378
381 void ShallowCopy(vtkDataObject* src) override;
382 void DeepCopy(vtkDataObject* src) override;
384
390 void GetIdsOfCellsOfType(int type, vtkIdTypeArray* array) override;
391
395 int IsHomogeneous() override;
396
403
405
411
416
418
425
434
443
456 static void DecomposeAPolyhedronCell(vtkCellArray* polyhedronCellArray, vtkIdType& nCellpts,
457 vtkIdType& nCellfaces, vtkCellArray* cellArray, vtkIdTypeArray* faces);
458
459 static void DecomposeAPolyhedronCell(const vtkIdType* polyhedronCellStream, vtkIdType& nCellpts,
460 vtkIdType& nCellfaces, vtkCellArray* cellArray, vtkIdTypeArray* faces);
461
474 static void DecomposeAPolyhedronCell(vtkIdType nCellFaces, const vtkIdType* inFaceStream,
475 vtkIdType& nCellpts, vtkCellArray* cellArray, vtkIdTypeArray* faces);
476
483 static void ConvertFaceStreamPointIds(vtkIdList* faceStream, vtkIdType* idMap);
484
490 static void ConvertFaceStreamPointIds(vtkIdType nfaces, vtkIdType* faceStream, vtkIdType* idMap);
491
498
499 //====================== Begin Legacy Methods ================================
500
508 VTK_DEPRECATED_IN_9_6_0("CellLocations is not longer used")
510
512
528 VTK_DEPRECATED_IN_9_6_0("CellLocations is not longer used, use other SetCells methods")
530 vtkUnsignedCharArray* cellTypes, vtkIdTypeArray* cellLocations, vtkCellArray* cells);
531 VTK_DEPRECATED_IN_9_6_0("This function is deprecated, use SetPolyhedralCells")
532 void SetCells(vtkUnsignedCharArray* cellTypes, vtkIdTypeArray* cellLocations, vtkCellArray* cells,
533 vtkIdTypeArray* faceLocations, vtkIdTypeArray* faces);
535
536 //====================== End Legacy Methods ==================================
537
538protected:
541
543
544 // Points derived from vtkPointSet.
545 // Attribute data (i.e., point and cell data (i.e., scalars, vectors, normals, tcoords)
546 // derived from vtkDataSet.
547
548 // The heart of the data representation. The points are managed by the
549 // superclass vtkPointSet. A cell is defined by its connectivity (i.e., the
550 // point ids that define the cell) and the cell type, represented by the
551 // Connectivity and Types arrays.
552 // Finally, when certain topological information is needed (e.g.,
553 // all the cells that use a point), the cell links array is built.
557
558 // Set of all cell types present in the grid. All entries are unique.
560
561 // The DistinctCellTypes is cached, so we keep track of the last time it was
562 // updated so we can compare it to the modified time of the Types array.
564
573
574 // VTK_DEPRECATED_IN_9_6_0()
575 // Legacy support -- stores the old-style cell array locations.
577
578 vtkIdType InternalInsertNextCell(int type, vtkIdType npts, const vtkIdType ptIds[]) override;
579 vtkIdType InternalInsertNextCell(int type, vtkIdList* ptIds) override;
581 int type, vtkIdType npts, const vtkIdType ptIds[], vtkIdType nfaces, const vtkIdType faces[]);
583 int type, vtkIdType npts, const vtkIdType pts[], vtkCellArray* faces) override;
584 void InternalReplaceCell(vtkIdType cellId, int npts, const vtkIdType pts[]) override;
585
598 static void DecomposeAPolyhedronCell(const vtkIdType* cellStream, vtkIdType& numCellPts,
599 vtkIdType& nCellFaces, vtkCellArray* cellArray, vtkCellArray* faces);
600
601 static void DecomposeAPolyhedronCell(vtkIdType nCellFaces, const vtkIdType* cellStream,
602 vtkIdType& numCellPts, vtkCellArray* cellArray, vtkCellArray* facesArray);
603
604 static void DecomposeAPolyhedronCell(vtkCellArray* polyhedronCell, vtkIdType& numCellPts,
605 vtkIdType& nCellfaces, vtkCellArray* cellArray, vtkCellArray* faces);
606
607 static void DecomposeAPolyhedronCell(const vtkIdType* cellStream, vtkIdType& numCellPts,
608 vtkIdType& nCellFaces, vtkCellArray* cellArray, vtkCellArray* faces,
609 vtkCellArray* faceLocations);
610
611 static void DecomposeAPolyhedronCell(vtkIdType nCellFaces, const vtkIdType* cellStream,
612 vtkIdType& numCellPts, vtkCellArray* cellArray, vtkCellArray* faces,
613 vtkCellArray* faceLocations);
614
615private:
616 // Hide these from the user and the compiler.
618 void operator=(const vtkUnstructuredGrid&) = delete;
619
620 void Cleanup();
621};
622
623VTK_ABI_NAMESPACE_END
624#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:51
general representation of visualization data
virtual void GetCellTypes(vtkCellTypes *types)
Get a list of types of cells in a dataset.
Definition vtkDataSet.h:189
virtual vtkCell * GetCell(vtkIdType cellId)=0
Get cell with cellId such that: 0 <= cellId < NumberOfCells.
Detect and break reference loops.
provides thread-safe access to cells
list of point or cell ids
Definition vtkIdList.h:26
vtkIdType GetNumberOfIds() const noexcept
Return the number of id's in the list.
Definition vtkIdList.h:76
vtkIdType * GetPointer(vtkIdType i)
Get a pointer to a particular data index.
Definition vtkIdList.h:150
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.
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