VTK  9.3.20240418
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
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 "vtkIdTypeArray.h" // inline GetCellPoints()
138 #include "vtkUnstructuredGridBase.h"
139 #include "vtkWrappingHints.h" // For VTK_MARSHALMANUAL
140 
141 #include "vtkSmartPointer.h" // for smart pointer
142 
143 VTK_ABI_NAMESPACE_BEGIN
144 class vtkCellArray;
145 class vtkIdList;
146 class vtkIdTypeArray;
148 class vtkIdTypeArray;
149 
150 class VTKCOMMONDATAMODEL_EXPORT VTK_MARSHALMANUAL vtkUnstructuredGrid
151  : public vtkUnstructuredGridBase
152 {
153 public:
159 
161 
165  void PrintSelf(ostream& os, vtkIndent indent) override;
167 
171  int GetDataObjectType() override { return VTK_UNSTRUCTURED_GRID; }
172 
182  bool AllocateEstimate(vtkIdType numCells, vtkIdType maxCellSize)
183  {
184  return this->AllocateExact(numCells, numCells * maxCellSize);
185  }
186 
196  bool AllocateExact(vtkIdType numCells, vtkIdType connectivitySize);
197 
207  void Allocate(vtkIdType numCells = 1000, int vtkNotUsed(extSize) = 1000) override
208  {
209  this->AllocateExact(numCells, numCells);
210  }
211 
213 
216  void Reset();
217  void CopyStructure(vtkDataSet* ds) override;
219  using vtkDataSet::GetCell;
220  vtkCell* GetCell(vtkIdType cellId) override;
221  void GetCell(vtkIdType cellId, vtkGenericCell* cell) override;
222  void GetCellBounds(vtkIdType cellId, double bounds[6]) override;
223  void GetCellPoints(vtkIdType cellId, vtkIdList* ptIds) override;
224  void GetPointCells(vtkIdType ptId, vtkIdList* cellIds) override;
227 
231  int GetCellType(vtkIdType cellId) override;
232 
236  vtkIdType GetCellSize(vtkIdType cellId) override;
237 
249  void GetCellTypes(vtkCellTypes* types) override;
250 
264 
277  void GetCellPoints(vtkIdType cellId, vtkIdType& npts, vtkIdType const*& pts)
278  {
279  this->Connectivity->GetCellAtId(cellId, npts, pts);
280  }
281 
298  vtkIdType cellId, vtkIdType& npts, vtkIdType const*& pts, vtkIdList* ptIds) override
299  {
300  this->Connectivity->GetCellAtId(cellId, npts, pts, ptIds);
301  }
302 
304 
309  void GetPointCells(vtkIdType ptId, vtkIdType& ncells, vtkIdType*& cells)
310  VTK_SIZEHINT(cells, ncells);
312 
320 
324  void Squeeze() override;
325 
329  void Initialize() override;
330 
334  int GetMaxCellSize() override;
335 
340  int GetMaxSpatialDimension() override;
341 
346  void BuildLinks();
347 
349 
355 
363  VTK_DEPRECATED_IN_9_3_0("Use GetLinks() instead.")
364  vtkAbstractCellLinks* GetCellLinks();
365 
373  void GetFaceStream(vtkIdType cellId, vtkIdList* ptIds);
374 
384  VTK_DEPRECATED_IN_9_4_0("Use the threadsafe GetFaceStream or GetPolyhedronFaces.")
385  void GetFaceStream(vtkIdType cellId, vtkIdType& nfaces, vtkIdType const*& ptIds);
386 
388 
398  void SetCells(int type, vtkCellArray* cells);
399  void SetCells(int* types, vtkCellArray* cells);
400  void SetCells(vtkUnsignedCharArray* cellTypes, vtkCellArray* cells);
402  vtkCellArray* faceLocations, vtkCellArray* faces);
403  VTK_DEPRECATED_IN_9_4_0("This function is deprecated, use SetPolyhedralCells")
404  void SetCells(vtkUnsignedCharArray* cellTypes, vtkCellArray* cells, vtkIdTypeArray* faceLocations,
405  vtkIdTypeArray* faces);
407 
411  vtkCellArray* GetCells() { return this->Connectivity; }
412 
414 
420  void GetCellNeighbors(vtkIdType cellId, vtkIdList* ptIds, vtkIdList* cellIds) override
421  {
422  this->GetCellNeighbors(cellId, ptIds->GetNumberOfIds(), ptIds->GetPointer(0), cellIds);
423  }
425  vtkIdType cellId, vtkIdType npts, const vtkIdType* ptIds, vtkIdList* cellIds);
427 
429 
440  vtkIdType cellId, vtkIdType npts, const vtkIdType* ptIds, vtkIdType& neighborCellId);
441  bool IsCellBoundary(vtkIdType cellId, vtkIdType npts, const vtkIdType* ptIds)
442  {
443  vtkIdType neighborCellId;
444  return this->IsCellBoundary(cellId, npts, ptIds, neighborCellId);
445  }
446  VTK_DEPRECATED_IN_9_3_0("Use the overload that doesn't take a vtkIdList instead.")
447  bool IsCellBoundary(
448  vtkIdType cellId, vtkIdType npts, const vtkIdType* ptIds, vtkIdList* vtkNotUsed(cellIds))
449  {
450  return this->IsCellBoundary(cellId, npts, ptIds);
451  }
453 
455 
459  vtkIdType InsertNextLinkedCell(int type, int npts, const vtkIdType pts[]) VTK_SIZEHINT(pts, npts);
462  void ResizeCellList(vtkIdType ptId, int size);
464 
466 
469  virtual int GetPiece();
470  virtual int GetNumberOfPieces();
472 
476  virtual int GetGhostLevel();
477 
486  unsigned long GetActualMemorySize() override;
487 
489 
492  void ShallowCopy(vtkDataObject* src) override;
493  void DeepCopy(vtkDataObject* src) override;
495 
501  void GetIdsOfCellsOfType(int type, vtkIdTypeArray* array) override;
502 
506  int IsHomogeneous() override;
507 
514 
516 
522 
526  VTK_DEPRECATED_IN_9_4_0("Use GetPolyhedronFaces instead.")
527  vtkIdType* GetFaces(vtkIdType cellId);
528 
532  void GetPolyhedronFaces(vtkIdType cellId, vtkCellArray* faces);
533 
535 
539  VTK_DEPRECATED_IN_9_4_0("Use GetPolyhedronFaces instead.")
540  vtkIdTypeArray* GetFaces();
541  VTK_DEPRECATED_IN_9_4_0("Use GetPolyhedronFaceLocations instead.")
542  vtkIdTypeArray* GetFaceLocations();
547  vtkCellArray* GetPolyhedronFaces();
548  vtkCellArray* GetPolyhedronFaceLocations();
550 
558  int InitializeFacesRepresentation(vtkIdType numPrevCells);
559 
567  virtual vtkMTimeType GetMeshMTime();
568 
581  static void DecomposeAPolyhedronCell(vtkCellArray* polyhedronCellArray, vtkIdType& nCellpts,
582  vtkIdType& nCellfaces, vtkCellArray* cellArray, vtkIdTypeArray* faces);
583 
584  static void DecomposeAPolyhedronCell(const vtkIdType* polyhedronCellStream, vtkIdType& nCellpts,
585  vtkIdType& nCellfaces, vtkCellArray* cellArray, vtkIdTypeArray* faces);
586 
599  static void DecomposeAPolyhedronCell(vtkIdType nCellFaces, const vtkIdType* inFaceStream,
600  vtkIdType& nCellpts, vtkCellArray* cellArray, vtkIdTypeArray* faces);
601 
608  static void ConvertFaceStreamPointIds(vtkIdList* faceStream, vtkIdType* idMap);
609 
615  static void ConvertFaceStreamPointIds(vtkIdType nfaces, vtkIdType* faceStream, vtkIdType* idMap);
616 
622  static void ConvertFaceStreamPointIds(vtkCellArray* faces, vtkIdType* idMap);
623 
624  //====================== Begin Legacy Methods ================================
625 
633  vtkIdTypeArray* GetCellLocationsArray();
634 
636 
652  void SetCells(
653  vtkUnsignedCharArray* cellTypes, vtkIdTypeArray* cellLocations, vtkCellArray* cells);
654  void SetCells(vtkUnsignedCharArray* cellTypes, vtkIdTypeArray* cellLocations, vtkCellArray* cells,
655  vtkIdTypeArray* faceLocations, vtkIdTypeArray* faces);
657 
658  //====================== End Legacy Methods ==================================
659 
660 protected:
662  ~vtkUnstructuredGrid() override;
663 
664  void ReportReferences(vtkGarbageCollector*) override;
665 
666  // Points derived from vtkPointSet.
667  // Attribute data (i.e., point and cell data (i.e., scalars, vectors, normals, tcoords)
668  // derived from vtkDataSet.
669 
670  // The heart of the data representation. The points are managed by the
671  // superclass vtkPointSet. A cell is defined by its connectivity (i.e., the
672  // point ids that define the cell) and the cell type, represented by the
673  // Connectivity and Types arrays.
674  // Finally, when certain topological information is needed (e.g.,
675  // all the cells that use a point), the cell links array is built.
679 
680  // Set of all cell types present in the grid. All entries are unique.
681  vtkSmartPointer<vtkCellTypes> DistinctCellTypes;
682 
683  // The DistinctCellTypes is cached, so we keep track of the last time it was
684  // updated so we can compare it to the modified time of the Types array.
685  vtkMTimeType DistinctCellTypesUpdateMTime;
686 
695 
696  // Legacy support -- stores the old-style cell array locations.
698 
699  vtkIdType InternalInsertNextCell(int type, vtkIdType npts, const vtkIdType ptIds[]) override;
700  vtkIdType InternalInsertNextCell(int type, vtkIdList* ptIds) override;
701  vtkIdType InternalInsertNextCell(
702  int type, vtkIdType npts, const vtkIdType ptIds[], vtkIdType nfaces, const vtkIdType faces[]);
703  vtkIdType InternalInsertNextCell(
704  int type, vtkIdType npts, const vtkIdType pts[], vtkCellArray* faces) override;
705  void InternalReplaceCell(vtkIdType cellId, int npts, const vtkIdType pts[]) override;
706 
720  vtkSmartPointer<vtkIdTypeArray> LegacyFaceLocations;
721 
726  VTK_DEPRECATED_IN_9_4_0("This member is deprecated.")
727  vtkSmartPointer<vtkIdList> LegacyPointIdsBuffer;
728 
741  static void DecomposeAPolyhedronCell(const vtkIdType* cellStream, vtkIdType& numCellPts,
742  vtkIdType& nCellFaces, vtkCellArray* cellArray, vtkCellArray* faces);
743 
744  static void DecomposeAPolyhedronCell(vtkIdType nCellFaces, const vtkIdType* cellStream,
745  vtkIdType& numCellPts, vtkCellArray* cellArray, vtkCellArray* facesArray);
746 
747  static void DecomposeAPolyhedronCell(vtkCellArray* polyhedronCell, vtkIdType& numCellPts,
748  vtkIdType& nCellfaces, vtkCellArray* cellArray, vtkCellArray* faces);
749 
750  static void DecomposeAPolyhedronCell(const vtkIdType* cellStream, vtkIdType& numCellPts,
751  vtkIdType& nCellFaces, vtkCellArray* cellArray, vtkCellArray* faces,
752  vtkCellArray* faceLocations);
753 
754  static void DecomposeAPolyhedronCell(vtkIdType nCellFaces, const vtkIdType* cellStream,
755  vtkIdType& numCellPts, vtkCellArray* cellArray, vtkCellArray* faces,
756  vtkCellArray* faceLocations);
757 
761  static int CopyPolyhedronToFaceStream(vtkCellArray* faceArray, vtkCellArray* faceLocationArray,
762  vtkIdTypeArray* faceStream, vtkIdTypeArray* faceLocation);
763 
764 private:
765  // Hide these from the user and the compiler.
766  vtkUnstructuredGrid(const vtkUnstructuredGrid&) = delete;
767  void operator=(const vtkUnstructuredGrid&) = delete;
768 
769  void Cleanup();
770 };
771 
772 VTK_ABI_NAMESPACE_END
773 #endif
object to represent cell connectivity
Definition: vtkCellArray.h:286
Efficient cell iterator for vtkDataSet topologies.
object provides direct access to cells in vtkCellArray and type information
Definition: vtkCellTypes.h:134
abstract class to specify cell behavior
Definition: vtkCell.h:130
general representation of visualization data
abstract class to specify dataset behavior
Definition: vtkDataSet.h:166
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
dataset represents arbitrary combinations of all possible cell types.
dataset represents arbitrary combinations of all possible cell types
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.
vtkCell * GetCell(vtkIdType cellId) override
Standard vtkDataSet methods; see vtkDataSet.h for documentation.
void GetCell(vtkIdType cellId, vtkGenericCell *cell) override
Standard vtkDataSet methods; see vtkDataSet.h for documentation.
static vtkUnstructuredGrid * GetData(vtkInformation *info)
Retrieve an instance of this class from an information object.
void GetCellPoints(vtkIdType cellId, vtkIdType &npts, vtkIdType const *&pts)
A higher-performing variant of the virtual vtkDataSet::GetCellPoints() for unstructured grids.
void GetCellPoints(vtkIdType cellId, vtkIdList *ptIds) override
Standard vtkDataSet methods; see vtkDataSet.h for documentation.
int GetMaxSpatialDimension() override
Get the maximum spatial dimensionality of the data which is the maximum dimension of all cells.
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 vtkUnstructuredGrid * GetData(vtkInformationVector *v, int i=0)
Retrieve an instance of this class from an information object.
int IsHomogeneous() override
Returns whether cells are all of the same type.
vtkUnsignedCharArray * GetCellTypesArray()
Get the array of all cell types in the grid.
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 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.
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.
vtkGetSmartPointerMacro(Links, vtkAbstractCellLinks)
Set/Get the links that you created possibly without using BuildLinks.
vtkSetSmartPointerMacro(Links, vtkAbstractCellLinks)
Set/Get the links that you created possibly without using BuildLinks.
bool IsCellBoundary(vtkIdType cellId, vtkIdType npts, const vtkIdType *ptIds)
A topological inquiry to determine whether a topological entity (e.g., point, edge,...
vtkIdType InsertNextLinkedCell(int type, int npts, const vtkIdType pts[])
Use these methods only if the dataset has been specified as Editable.
vtkIdType GetNumberOfCells() override
Standard vtkDataSet methods; see vtkDataSet.h for documentation.
void Allocate(vtkIdType numCells=1000, int vtkNotUsed(extSize)=1000) override
Method allocates initial storage for the cell connectivity.
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.
void GetPointCells(vtkIdType ptId, vtkIdType &ncells, vtkIdType *&cells)
Special (efficient) operation to return the list of cells using the specified point ptId.
vtkUnsignedCharArray * GetDistinctCellTypesArray()
Get a list of types of cells in a dataset.
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 * ExtendedNew()
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.
vtkCellIterator * NewCellIterator() override
Standard vtkDataSet methods; see vtkDataSet.h for documentation.
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.
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 * New()
Standard instantiation method.
void GetCellPoints(vtkIdType cellId, vtkIdType &npts, vtkIdType const *&pts, vtkIdList *ptIds) override
A higher-performing variant of the virtual vtkDataSet::GetCellPoints() for unstructured grids.
void ShallowCopy(vtkDataObject *src) override
Shallow and Deep copy.
void DeepCopy(vtkDataObject *src) override
Shallow and Deep copy.
int GetDataObjectType() override
Standard vtkDataSet API methods.
VTKIOCATALYSTCONDUIT_EXPORT void SetPolyhedralCells(vtkUnstructuredGrid *grid, vtkCellArray *elements, vtkCellArray *subelements)
Create polyhedron in grid from elements and subelements.
@ info
Definition: vtkX3D.h:376
@ function
Definition: vtkX3D.h:249
@ type
Definition: vtkX3D.h:516
@ size
Definition: vtkX3D.h:253
#define VTK_DEPRECATED_IN_9_3_0(reason)
#define VTK_DEPRECATED_IN_9_4_0(reason)
int vtkIdType
Definition: vtkType.h:315
#define VTK_UNSTRUCTURED_GRID
Definition: vtkType.h:69
vtkTypeUInt32 vtkMTimeType
Definition: vtkType.h:270
#define VTK_SIZEHINT(...)
#define VTK_MARSHALMANUAL