VTK  9.3.0
vtkExplicitStructuredGrid.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
54 #ifndef vtkExplicitStructuredGrid_h
55 #define vtkExplicitStructuredGrid_h
56 
57 #include "vtkAbstractCellLinks.h" // For vtkAbstractCellLinks
58 #include "vtkCellArray.h" // For vtkCellArray
59 #include "vtkCommonDataModelModule.h" // For export macro
60 #include "vtkNew.h" // for vtkNew
61 #include "vtkPointSet.h"
62 #include "vtkStructuredData.h" // For static method usage
63 
64 VTK_ABI_NAMESPACE_BEGIN
65 class vtkCellArray;
66 class vtkEmptyCell;
67 class vtkHexahedron;
68 
69 class VTKCOMMONDATAMODEL_EXPORT vtkExplicitStructuredGrid : public vtkPointSet
70 {
71 public:
73 
78  void PrintSelf(ostream& os, vtkIndent indent) override;
80 
85 
87 
90  void Initialize() override;
91  using vtkDataSet::GetCell;
92  vtkCell* GetCell(vtkIdType cellId) override;
93  void GetCell(vtkIdType cellId, vtkGenericCell* cell) override;
94  void GetCellBounds(vtkIdType cellId, double bounds[6]) override;
95  int GetCellType(vtkIdType cellId) override;
96  vtkIdType GetCellSize(vtkIdType cellId) override;
98  void GetCellPoints(vtkIdType cellId, vtkIdList* ptIds) override;
99  void GetPointCells(vtkIdType ptId, vtkIdList* cellIds) override;
100  int GetMaxCellSize() override { return 8; } // hexahedron is the largest
101  void GetCellNeighbors(vtkIdType cellId, vtkIdList* ptIds, vtkIdList* cellIds) override;
103 
107  void CopyStructure(vtkDataSet* ds) override;
108 
110 
113  void ShallowCopy(vtkDataObject* src) override;
114  void DeepCopy(vtkDataObject* src) override;
116 
120  inline int GetDataDimension() { return 3; }
121 
123 
128  void SetDimensions(int i, int j, int k);
129  void SetDimensions(int dim[3]);
130  void GetDimensions(int dim[3]);
132 
138  void GetCellDims(int cellDims[3]);
139 
143  int GetExtentType() override { return VTK_3D_EXTENT; }
144 
146 
153  void SetExtent(int x0, int x1, int y0, int y1, int z0, int z1);
154  void SetExtent(int extent[6]);
155  vtkGetVector6Macro(Extent, int);
157 
159 
165 
170  void BuildLinks();
171 
173 
179 
186 
192  void GetCellPoints(vtkIdType cellId, vtkIdType& npts, vtkIdType*& pts);
193 
203  vtkIdType cellId, vtkIdType& npts, vtkIdType const*& pts, vtkIdList* ptIds) override;
204 
208  void GetCellNeighbors(vtkIdType cellId, vtkIdType neighbors[6], int* wholeExtent = nullptr);
209 
218  void ComputeCellStructuredCoords(
219  vtkIdType cellId, int& i, int& j, int& k, bool adjustForExtent = true);
220 
229  vtkIdType ComputeCellId(int i, int j, int k, bool adjustForExtent = true);
230 
237 
239 
242  vtkSetStringMacro(FacesConnectivityFlagsArrayName);
243  vtkGetStringMacro(FacesConnectivityFlagsArrayName);
245 
247 
253  void BlankCell(vtkIdType cellId);
254  void UnBlankCell(vtkIdType cellId);
256 
260  bool HasAnyBlankCells() override;
261 
267  unsigned char IsCellVisible(vtkIdType cellId);
268 
274  unsigned char IsCellGhost(vtkIdType cellId);
275 
280 
282 
287  void Crop(const int* updateExtent) override;
288  virtual void Crop(
289  vtkExplicitStructuredGrid* input, const int* updateExtent, bool generateOriginalCellIds);
291 
293 
299 
308  unsigned long GetActualMemorySize() override;
309 
321 
323 
329  void GenerateGhostArray(int zeroExt[6], bool cellOnly) override;
331 
332 protected:
335 
337 
342  void ComputeScalarRange() override;
343 
348 
353 
358 
363  int FindConnectedFaces(int foundFaces[3]);
364 
369  static void CheckConnectedFaces(int& nFoundFaces, int foundFaces[3]);
370 
374  static void ComputeSwapFlag(int foundFaces[3], int swap[3]);
375 
379  static void ComputeMirrorFlag(int foundFaces[3], int mirror[3]);
380 
384  void ReorderCellsPoints(const int* ptsMap, const int transformFlag[3]);
385 
386  // Used by GetCell method
389 
392  int Extent[6];
394 
395 private:
397  void operator=(const vtkExplicitStructuredGrid&) = delete;
398 };
399 
400 //----------------------------------------------------------------------------
402 {
404 }
405 
406 //----------------------------------------------------------------------------
407 inline void vtkExplicitStructuredGrid::GetCellDims(int cellDims[3])
408 {
410 }
411 
412 //----------------------------------------------------------------------------
414  vtkIdType cellId, int& i, int& j, int& k, bool adjustForExtent)
415 {
416  int ijk[3];
417  if (adjustForExtent)
418  {
420  }
421  else
422  {
423  int dims[3];
424  this->GetDimensions(dims);
426  }
427  i = ijk[0];
428  j = ijk[1];
429  k = ijk[2];
430 }
431 
432 //----------------------------------------------------------------------------
433 inline vtkIdType vtkExplicitStructuredGrid::ComputeCellId(int i, int j, int k, bool adjustForExtent)
434 {
435  int ijk[] = { i, j, k };
436  if (adjustForExtent)
437  {
439  }
440  else
441  {
442  int dims[3];
443  this->GetDimensions(dims);
444  return vtkStructuredData::ComputeCellId(dims, ijk);
445  }
446 }
447 VTK_ABI_NAMESPACE_END
448 #endif
object to represent cell connectivity
Definition: vtkCellArray.h:185
abstract class to specify cell behavior
Definition: vtkCell.h:59
general representation of visualization data
Definition: vtkDataObject.h:64
abstract class to specify dataset behavior
Definition: vtkDataSet.h:62
virtual vtkCell * GetCell(vtkIdType cellId)=0
Get cell with cellId such that: 0 <= cellId < NumberOfCells.
virtual void GenerateGhostArray(int zeroExt[6])
Normally called by pipeline executives or algorithms only.
Definition: vtkDataSet.h:442
an empty cell used as a place-holder during processing
Definition: vtkEmptyCell.h:22
structured grid with explicit topology and geometry
void DeepCopy(vtkDataObject *src) override
Shallow and Deep copy.
vtkNew< vtkHexahedron > Hexahedron
void InternalCheckAndReorderFaces(bool swap)
Internal method used by CheckAndReorderFaces.
vtkSmartPointer< vtkAbstractCellLinks > Links
void Initialize() override
Standard vtkDataSet API methods.
void GetCellBounds(vtkIdType cellId, double bounds[6]) override
Standard vtkDataSet API methods.
void GetCellNeighbors(vtkIdType cellId, vtkIdList *ptIds, vtkIdList *cellIds) override
Standard vtkDataSet API methods.
void ComputeScalarRange() override
Compute the range of the scalars and cache it into ScalarRange only if the cache became invalid (Scal...
int GetDataObjectType() override
Return what type of dataset this is.
void ReportReferences(vtkGarbageCollector *) override
void Crop(const int *updateExtent) override
Reallocates and copies to set the Extent to the UpdateExtent.
void GetCellDims(int cellDims[3])
Computes the cell dimensions according to internal point dimensions.
void GetCell(vtkIdType cellId, vtkGenericCell *cell) override
Standard vtkDataSet API methods.
void GetCellPoints(vtkIdType cellId, vtkIdList *ptIds) override
Standard vtkDataSet API methods.
vtkGetSmartPointerMacro(Cells, vtkCellArray)
Set/Get the cell array defining hexahedron.
void ReorderCellsPoints(const int *ptsMap, const int transformFlag[3])
Reorder all cells points based on a transformFlag for each axis and a points map.
void ComputeCellStructuredCoords(vtkIdType cellId, int &i, int &j, int &k, bool adjustForExtent=true)
Given a cellId, get the structured coordinates (i-j-k).
int GetDataDimension()
Return the dimensionality of the data.
void CopyStructure(vtkDataSet *ds) override
Copy the geometric and topological structure of an input poly data object.
virtual void InternalCopy(vtkExplicitStructuredGrid *src)
Internal method used by DeepCopy and ShallowCopy.
void SetExtent(int x0, int x1, int y0, int y1, int z0, int z1)
Set/Get the extent of this structured dataset in term of number of points along each direction.
int FindConnectedFaces(int foundFaces[3])
Find a connected face for each axis if any.
virtual void Crop(vtkExplicitStructuredGrid *input, const int *updateExtent, bool generateOriginalCellIds)
Reallocates and copies to set the Extent to the UpdateExtent.
vtkIdType ComputeCellId(int i, int j, int k, bool adjustForExtent=true)
Given a location in structured coordinates (i-j-k), return the cell id.
void GetPointCells(vtkIdType ptId, vtkIdList *cellIds) override
Standard vtkDataSet API methods.
int GetCellType(vtkIdType cellId) override
Standard vtkDataSet API methods.
unsigned char IsCellVisible(vtkIdType cellId)
Return non-zero value if specified cell is visible.
static vtkExplicitStructuredGrid * GetData(vtkInformationVector *v, int i=0)
Retrieve an instance of this class from an information object.
void SetDimensions(int dim[3])
Set/Get the dimensions of this structured dataset in term of number of points along each direction.
unsigned long GetActualMemorySize() override
Return the actual size of the data in kilobytes.
void GetCellNeighbors(vtkIdType cellId, vtkIdType neighbors[6], int *wholeExtent=nullptr)
Get cell neighbors of the cell for every faces.
void PrintSelf(ostream &os, vtkIndent indent) override
Standard methods for instantiation, type information, and printing.
void GetCell(vtkIdType, vtkCell *)
Internal method used by GetCell.
~vtkExplicitStructuredGrid() override
vtkGetSmartPointerMacro(Links, vtkAbstractCellLinks)
Set/Get the links that you created possibly without using BuildLinks.
bool HasAnyGhostCells()
Returns true if one or more cells are ghost, false otherwise.
void GetCellPoints(vtkIdType cellId, vtkIdType &npts, vtkIdType *&pts)
More efficient method to obtain cell points.
void BuildLinks()
Build topological links from points to lists of cells that use each point.
void GetCellPoints(vtkIdType cellId, vtkIdType &npts, vtkIdType const *&pts, vtkIdList *ptIds) override
More efficient method to obtain cell points.
static void CheckConnectedFaces(int &nFoundFaces, int foundFaces[3])
Check a list of connected faces and remove invalid face or extrapolate missing faces.
int GetMaxCellSize() override
Standard vtkDataSet API methods.
static void ComputeSwapFlag(int foundFaces[3], int swap[3])
Compute a swap flag based if a face have been found.
int GetExtentType() override
The extent type is a 3D extent.
vtkSetSmartPointerMacro(Links, vtkAbstractCellLinks)
Set/Get the links that you created possibly without using BuildLinks.
void SetDimensions(int i, int j, int k)
Set/Get the dimensions of this structured dataset in term of number of points along each direction.
void BlankCell(vtkIdType cellId)
Methods for supporting blanking of cells.
vtkSetSmartPointerMacro(Cells, vtkCellArray)
Set/Get the cell array defining hexahedron.
void ShallowCopy(vtkDataObject *src) override
Shallow and Deep copy.
void CheckAndReorderFaces()
Check faces are numbered correctly regarding ijk numbering If not this will reorganize cell points or...
vtkCell * GetCell(vtkIdType cellId) override
Standard vtkDataSet API methods.
void UnBlankCell(vtkIdType cellId)
Methods for supporting blanking of cells.
void GetDimensions(int dim[3])
Set/Get the dimensions of this structured dataset in term of number of points along each direction.
static void ComputeMirrorFlag(int foundFaces[3], int mirror[3])
Compute a mirror flag based if a face have been found.
vtkIdType GetNumberOfCells() override
Standard vtkDataSet API methods.
bool HasAnyBlankCells() override
Returns true if one or more cells are blanked, false otherwise.
vtkIdType GetCellSize(vtkIdType cellId) override
Standard vtkDataSet API methods.
static vtkExplicitStructuredGrid * GetData(vtkInformation *info)
Retrieve an instance of this class from an information object.
static vtkExplicitStructuredGrid * New()
Standard methods for instantiation, type information, and printing.
vtkIdType * GetCellPoints(vtkIdType cellId)
Get direct raw pointer to the 8 points indices of an hexahedra.
unsigned char IsCellGhost(vtkIdType cellId)
Return non-zero value if specified cell is a ghost cell.
void ComputeFacesConnectivityFlagsArray()
Compute the faces connectivity flags array.
void GenerateGhostArray(int zeroExt[6], bool cellOnly) override
Normally called by pipeline executives or algorithms only.
void SetExtent(int extent[6])
Set/Get the extent of this structured dataset in term of number of points along each direction.
vtkSmartPointer< vtkCellArray > Cells
Detect and break reference loops.
provides thread-safe access to cells
a cell that represents a linear 3D hexahedron
Definition: vtkHexahedron.h:43
list of point or cell ids
Definition: vtkIdList.h:32
a simple class to control print indentation
Definition: vtkIndent.h:38
Store zero or more vtkInformation instances.
Store vtkAlgorithm input/output information.
concrete class for storing a set of points
Definition: vtkPointSet.h:68
static void GetCellDimensionsFromExtent(const int ext[6], int celldims[3], int dataDescription=VTK_EMPTY)
Returns the cell dimensions, i.e., the number of cells along the i,j,k for the grid with the given gr...
static void GetDimensionsFromExtent(const int ext[6], int dims[3], int dataDescription=VTK_EMPTY)
Computes the structured grid dimensions based on the given extent.
static void ComputeCellStructuredCoords(vtkIdType cellId, const int dim[3], int ijk[3], int dataDescription=VTK_EMPTY)
Given a cellId and grid dimensions 'dim', get the structured coordinates (i-j-k).
static void ComputeCellStructuredCoordsForExtent(vtkIdType cellIdx, const int ext[6], int ijk[3], int dataDescription=VTK_EMPTY)
Given the global grid extent and the linear index of a cell within the grid extent,...
static vtkIdType ComputeCellIdForExtent(const int extent[6], const int ijk[3], int dataDescription=VTK_EMPTY)
Given a location in structured coordinates (i-j-k), and the extent of the structured dataset,...
static vtkIdType ComputeCellId(const int dim[3], const int ijk[3], int dataDescription=VTK_EMPTY)
Given a location in structured coordinates (i-j-k), and the dimensions of the structured dataset,...
@ info
Definition: vtkX3D.h:376
@ extent
Definition: vtkX3D.h:345
#define VTK_3D_EXTENT
Definition: vtkDataObject.h:60
int vtkIdType
Definition: vtkType.h:315
#define VTK_EXPLICIT_STRUCTURED_GRID
Definition: vtkType.h:105