VTK  9.2.6
vtkAMRBox.h
Go to the documentation of this file.
1/*=========================================================================
2
3 Program: Visualization Toolkit
4 Module: vtkAMRBox.h
5
6 Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
7 All rights reserved.
8 See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
9
10 This software is distributed WITHOUT ANY WARRANTY; without even
11 the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
12 PURPOSE. See the above copyright notice for more information.
13
14=========================================================================*/
41#ifndef vtkAMRBox_h
42#define vtkAMRBox_h
43
44#include "vtkCommonDataModelModule.h" // For export macro
45#include "vtkObject.h"
46#include "vtkStructuredData.h" // For VTK_XYZ_GRID definition
47
48class VTKCOMMONDATAMODEL_EXPORT vtkAMRBox
49{
50public:
55
59 vtkAMRBox(const vtkAMRBox& other);
60
64 vtkAMRBox(int ilo, int jlo, int klo, int ihi, int jhi, int khi);
65
70 vtkAMRBox(const double* origin, const int* dimensions, const double* spacing,
71 const double* globalOrigin, int gridDescription = VTK_XYZ_GRID);
72
76 vtkAMRBox(const int lo[3], const int hi[3]);
77
78 vtkAMRBox(const int dims[6]);
79
84
85 virtual ~vtkAMRBox() = default;
86
88
92 {
93 this->LoCorner[0] = this->LoCorner[1] = this->LoCorner[2] = 0;
94 this->HiCorner[0] = this->HiCorner[1] = this->HiCorner[2] = -2;
95 }
97
101 bool EmptyDimension(int i) const { return HiCorner[i] <= LoCorner[i] - 1; }
102
106 void SetDimensions(int ilo, int jlo, int klo, int ihi, int jhi, int khi, int desc = VTK_XYZ_GRID);
107
111 void SetDimensions(const int lo[3], const int hi[3], int desc = VTK_XYZ_GRID);
112
116 void SetDimensions(const int dims[6], int desc = VTK_XYZ_GRID);
117
121 void GetDimensions(int lo[3], int hi[3]) const;
122
126 void GetDimensions(int dims[6]) const;
127
129
133 void GetNumberOfCells(int num[3]) const;
135
137
141 void GetNumberOfNodes(int ext[3]) const;
144
150 int ComputeDimension() const;
151
155 const int* GetLoCorner() const { return this->LoCorner; }
156 const int* GetHiCorner() const { return this->HiCorner; }
157
163 void GetValidHiCorner(int hi[3]) const;
164
165 bool Empty() const { return this->IsInvalid(); }
166
170 bool IsInvalid() const
171 {
172 return ((this->HiCorner[0] < this->LoCorner[0] - 1) ||
173 (this->HiCorner[1] < this->LoCorner[1] - 1) || (this->HiCorner[2] < this->LoCorner[2] - 1));
174 }
175
181 bool operator==(const vtkAMRBox& other) const;
182
188 bool operator!=(const vtkAMRBox& other) const { return (!(*this == other)); }
189
193 ostream& Print(ostream& os) const;
194
196
207 void Serialize(unsigned char*& buffer, vtkIdType& bytesize);
208 void Serialize(int* buffer) const;
210
217 void Deserialize(unsigned char* buffer, const vtkIdType& bytesize);
218
225 bool DoesBoxIntersectAlongDimension(const vtkAMRBox& other, const int q) const;
226
227 bool DoesIntersect(const vtkAMRBox& other) const;
228
232 void Coarsen(int r);
233
237 void Refine(int r);
238
240
243 void Grow(int byN);
244 void Shrink(int byN);
246
248
251 void Shift(int i, int j, int k);
252 void Shift(const int I[3]);
254
260 bool Intersect(const vtkAMRBox& other);
261
263
266 bool Contains(int i, int j, int k) const;
267 bool Contains(const int I[3]) const;
269
273 bool Contains(const vtkAMRBox&) const;
274
280 void GetGhostVector(int r, int nghost[6]) const;
281
286 void RemoveGhosts(int r);
287
288public:
294 static vtkIdType GetBytesize() { return 6 * sizeof(int); }
295
300 const vtkAMRBox& box, const int i, const int j, const int k, int imageDimension[3]);
301
305 static void GetBounds(
306 const vtkAMRBox& box, const double origin[3], const double spacing[3], double bounds[6]);
307
312 static void GetBoxOrigin(
313 const vtkAMRBox& box, const double X0[3], const double spacing[3], double x0[3]);
314
319 static bool HasPoint(const vtkAMRBox& box, const double origin[3], const double spacing[3],
320 double x, double y, double z);
321
325 static int ComputeStructuredCoordinates(const vtkAMRBox& box, const double dataOrigin[3],
326 const double h[3], const double x[3], int ijk[3], double pcoords[3]);
327
328protected:
333
340 bool IntersectBoxAlongDimension(const vtkAMRBox& other, const int q);
341
342private:
343 int LoCorner[3]; // lo corner cell id.
344 int HiCorner[3]; // hi corner cell id.
345
347
352 void BuildAMRBox(
353 const int ilo, const int jlo, const int klo, const int ihi, const int jhi, const int khi);
355};
356
357//*****************************************************************************
359
363template <typename T>
364void FillRegion(T* pArray, const vtkAMRBox& arrayRegion, const vtkAMRBox& destRegion, T fillValue)
365{
366 // Convert regions to array index space. VTK arrays
367 // always start with 0,0,0.
368 int ofs[3];
369 ofs[0] = -arrayRegion.GetLoCorner()[0];
370 ofs[1] = -arrayRegion.GetLoCorner()[1];
371 ofs[2] = -arrayRegion.GetLoCorner()[2];
372 vtkAMRBox arrayDims(arrayRegion);
373 arrayDims.Shift(ofs);
374 vtkAMRBox destDims(destRegion);
375 destDims.Shift(ofs);
376 // Quick sanity check.
377 if (!arrayRegion.Contains(destRegion))
378 {
379 vtkGenericWarningMacro(<< "ERROR: Array must enclose the destination region. "
380 << "Aborting the fill.");
381 }
382 // Get the bounds of the indices we fill.
383 const int* destLo = destDims.GetLoCorner();
384 int destHi[3];
385 destDims.GetValidHiCorner(destHi);
386 // Get the array dimensions.
387 int arrayHi[3];
388 arrayDims.GetNumberOfCells(arrayHi);
389 // Fill.
390 for (int k = destLo[2]; k <= destHi[2]; ++k)
391 {
392 vtkIdType kOfs = k * arrayHi[0] * arrayHi[1];
393 for (int j = destLo[1]; j <= destHi[1]; ++j)
394 {
395 vtkIdType idx = kOfs + j * arrayHi[0] + destLo[0];
396 for (int i = destLo[0]; i <= destHi[0]; ++i)
397 {
398 pArray[idx] = fillValue;
399 ++idx;
400 }
401 }
402 }
404}
405
406#endif
407// VTK-HeaderTest-Exclude: vtkAMRBox.h
Encloses a rectangular region of voxel like cells.
Definition vtkAMRBox.h:49
bool Contains(const vtkAMRBox &) const
Test to see if a given box is inside this box.
bool IntersectBoxAlongDimension(const vtkAMRBox &other, const int q)
Intersects this instance of vtkAMRbox with box passed through the argument list along the given dimen...
vtkAMRBox(const int dims[6])
vtkAMRBox(const vtkAMRBox &other)
Copy construct this box from another.
void Invalidate()
Set the box to be invalid;.
Definition vtkAMRBox.h:91
void Serialize(int *buffer) const
Serializes this object instance into a byte-stream.
void Grow(int byN)
Grows the box in all directions.
int ComputeDimension() const
Determines the dimension of the AMR box given the box indices.
void Shift(const int I[3])
Shifts the box in index space.
void Refine(int r)
Refine the box.
bool Contains(const int I[3]) const
Test to see if a given cell index is inside this box.
ostream & Print(ostream &os) const
Send the box to a stream.
static vtkIdType GetBytesize()
Returns the number of bytes allocated by this instance.
Definition vtkAMRBox.h:294
static int GetCellLinearIndex(const vtkAMRBox &box, const int i, const int j, const int k, int imageDimension[3])
Returns the linear index of the given cell structured coordinates.
bool operator==(const vtkAMRBox &other) const
Test if this box is equal with the box instance on the rhs.
void GetValidHiCorner(int hi[3]) const
Return a high corner.
void Serialize(unsigned char *&buffer, vtkIdType &bytesize)
Serializes this object instance into a byte-stream.
void SetDimensions(const int lo[3], const int hi[3], int desc=VTK_XYZ_GRID)
Set the dimensions of the box.
bool EmptyDimension(int i) const
Whether dimension i is empty, e.g.
Definition vtkAMRBox.h:101
static void GetBounds(const vtkAMRBox &box, const double origin[3], const double spacing[3], double bounds[6])
Get the bounds of this box.
vtkAMRBox(int ilo, int jlo, int klo, int ihi, int jhi, int khi)
Construct a specific 3D box.
vtkAMRBox & operator=(const vtkAMRBox &other)
Copy the other box to this box.
bool DoesIntersect(const vtkAMRBox &other) const
void Shift(int i, int j, int k)
Shifts the box in index space.
void GetDimensions(int lo[3], int hi[3]) const
Get the dimensions of this box.
bool Empty() const
Definition vtkAMRBox.h:165
bool Contains(int i, int j, int k) const
Test to see if a given cell index is inside this box.
void Deserialize(unsigned char *buffer, const vtkIdType &bytesize)
Deserializes this object instance from the given byte-stream.
static bool HasPoint(const vtkAMRBox &box, const double origin[3], const double spacing[3], double x, double y, double z)
Checks if the point is inside this AMRBox instance.
void Coarsen(int r)
Coarsen the box.
void Initialize()
Initializes this box instance.
vtkAMRBox(const int lo[3], const int hi[3])
Construct a specific box.
bool Intersect(const vtkAMRBox &other)
Intersect this box with another box in place.
vtkAMRBox()
Construct the empty box.
void RemoveGhosts(int r)
Given an AMR box and the refinement ratio, r, this shrinks the AMRBox.
void GetNumberOfNodes(int ext[3]) const
Gets the number of nodes required to construct a physical representation of the box.
static int ComputeStructuredCoordinates(const vtkAMRBox &box, const double dataOrigin[3], const double h[3], const double x[3], int ijk[3], double pcoords[3])
Compute structured coordinates.
void GetDimensions(int dims[6]) const
Get the dimensions of this box.
bool operator!=(const vtkAMRBox &other) const
Test if this box is NOT equal with the box instance on the rhs.
Definition vtkAMRBox.h:188
static void GetBoxOrigin(const vtkAMRBox &box, const double X0[3], const double spacing[3], double x0[3])
Get the world space origin of this box.
vtkIdType GetNumberOfNodes() const
Gets the number of nodes required to construct a physical representation of the box.
void SetDimensions(int ilo, int jlo, int klo, int ihi, int jhi, int khi, int desc=VTK_XYZ_GRID)
Set the dimensions of the box.
void SetDimensions(const int dims[6], int desc=VTK_XYZ_GRID)
Set the dimensions of the box.
void GetNumberOfCells(int num[3]) const
Gets the number of cells enclosed by the box.
vtkIdType GetNumberOfCells() const
Gets the number of cells enclosed by the box.
bool DoesBoxIntersectAlongDimension(const vtkAMRBox &other, const int q) const
Checks if this instance of vtkAMRBox intersects with the box passed through the argument list along t...
vtkAMRBox(const double *origin, const int *dimensions, const double *spacing, const double *globalOrigin, int gridDescription=VTK_XYZ_GRID)
Construct an AMR box from the description a vtkUniformGrid Note that the dimensions specify the node ...
bool IsInvalid() const
Check to see if the AMR box instance is invalid.
Definition vtkAMRBox.h:170
void Shrink(int byN)
Grows the box in all directions.
const int * GetLoCorner() const
Get the low corner index.
Definition vtkAMRBox.h:155
const int * GetHiCorner() const
Definition vtkAMRBox.h:156
void GetGhostVector(int r, int nghost[6]) const
Given an AMR box and the refinement ratio, r, this method computes the number of ghost layers in each...
virtual ~vtkAMRBox()=default
Computes the portion of a dataset which is inside a selection.
void FillRegion(T *pArray, const vtkAMRBox &arrayRegion, const vtkAMRBox &destRegion, T fillValue)
Fill the region of "pArray" enclosed by "destRegion" with "fillValue" "pArray" is defined on "arrayRe...
Definition vtkAMRBox.h:364
#define VTK_XYZ_GRID
int vtkIdType
Definition vtkType.h:332