VTK
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 =========================================================================*/
32 #ifndef vtkAMRBox_h
33 #define vtkAMRBox_h
34 
35 #include "vtkCommonDataModelModule.h" // For export macro
36 #include "vtkObject.h"
37 #include "vtkStructuredData.h" // For VTK_XYZ_GRID definition
38 
39 class VTKCOMMONDATAMODEL_EXPORT vtkAMRBox
40 {
41  public:
46 
50  vtkAMRBox(const vtkAMRBox &other);
51 
56  int ilo,int jlo,int klo,
57  int ihi,int jhi,int khi);
58 
63  vtkAMRBox(const double* origin, const int* dimensions, const double* spacing,
64  const double* globalOrigin, int gridDescription=VTK_XYZ_GRID);
65 
69  vtkAMRBox(const int lo[3], const int hi[3]);
70 
71  vtkAMRBox(const int dims[6]);
72 
73 
77  vtkAMRBox &operator=(const vtkAMRBox &other);
78 
79  virtual ~vtkAMRBox(){}
80 
82 
85  void Invalidate()
86  {
87  this->LoCorner[0]=this->LoCorner[1]=this->LoCorner[2]=0;
88  this->HiCorner[0]=this->HiCorner[1]=this->HiCorner[2]=-2;
89  }
91 
95  bool EmptyDimension(int i) const{ return HiCorner[i]<=LoCorner[i]-1;}
96 
101  int ilo, int jlo, int klo,
102  int ihi, int jhi, int khi, int desc=VTK_XYZ_GRID);
103 
107  void SetDimensions(const int lo[3], const int hi[3], int desc=VTK_XYZ_GRID);
108 
112  void SetDimensions(const int dims[6], int desc = VTK_XYZ_GRID);
113 
117  void GetDimensions(int lo[3], int hi[3]) const;
118 
122  void GetDimensions(int dims[6]) const;
123 
125 
129  void GetNumberOfCells(int num[3]) const;
131 
133 
137  void GetNumberOfNodes(int ext[3]) const;
140 
146  int ComputeDimension() const;
147 
151  const int *GetLoCorner() const { return this->LoCorner; }
152  const int *GetHiCorner() const { return this->HiCorner; }
153 
159  void GetValidHiCorner(int hi[3]) const;
160 
161  bool Empty() const
162  {return this->IsInvalid();}
163 
167  bool IsInvalid() const
168  {
169  return ((this->HiCorner[0] < this->LoCorner[0]-1) ||
170  (this->HiCorner[1] < this->LoCorner[1]-1) ||
171  (this->HiCorner[2] < this->LoCorner[2]-1));
172  }
173 
179  bool operator==(const vtkAMRBox &other) const;
180 
186  bool operator!=(const vtkAMRBox &other) const
187  { return( !(*this == other) ); }
188 
192  ostream &Print(ostream &os) const;
193 
195 
206  void Serialize( unsigned char*& buffer, vtkIdType &bytesize );
207  void Serialize(int* buffer) const;
209 
216  void Deserialize( unsigned char* buffer, const vtkIdType &bytesize );
217 
224  bool DoesBoxIntersectAlongDimension(const vtkAMRBox &other, const int q) const;
225 
226  bool DoesIntersect(const vtkAMRBox &other) const;
227 
231  void Coarsen(int r);
232 
236  void Refine(int r);
237 
239 
242  void Grow(int byN);
243  void Shrink(int byN);
245 
247 
250  void Shift(int i, int j, int k);
251  void Shift(const int I[3]);
253 
259  bool Intersect(const vtkAMRBox &other);
260 
262 
265  bool Contains(int i,int j,int k) const;
266  bool Contains(const int I[3]) const;
268 
272  bool Contains(const vtkAMRBox&) const;
273 
279  void GetGhostVector(int r, int nghost[6]) const;
280 
285  void RemoveGhosts(int r);
286 
287  public:
293  static vtkIdType GetBytesize(){return 6*sizeof(int); };
294 
298  static int GetCellLinearIndex(const vtkAMRBox& box, const int i, const int j, const int k, int imageDimension[3] );
299 
303  static void GetBounds(const vtkAMRBox& box, const double origin[3], const double spacing[3],double bounds[6]) ;
304 
309  static void GetBoxOrigin(const vtkAMRBox& box, const double X0[3], const double spacing[3],double x0[3]);
310 
315  static bool HasPoint(const vtkAMRBox& box, const double origin[3], const double spacing[3], double x, double y, double z );
316 
320  static int ComputeStructuredCoordinates(const vtkAMRBox& box, const double dataOrigin[3],
321  const double h[3], const double x[3], int ijk[3], double pcoords[3]);
322 
323  protected:
327  void Initialize( );
328 
335  bool IntersectBoxAlongDimension(const vtkAMRBox &other, const int q);
336 
337  private:
338  int LoCorner[3]; // lo corner cell id.
339  int HiCorner[3]; // hi corner cell id.
340 
342 
347  void BuildAMRBox(
348  const int ilo, const int jlo, const int klo,
349  const int ihi, const int jhi, const int khi );
350 };
352 
353 
354 //*****************************************************************************
356 
360 template <typename T>
362  T *pArray,
363  const vtkAMRBox &arrayRegion,
364  const vtkAMRBox &destRegion,
365  T fillValue)
366 {
367  // Convert regions to array index space. VTK arrays
368  // always start with 0,0,0.
369  int ofs[3];
370  ofs[0]=-arrayRegion.GetLoCorner()[0];
371  ofs[1]=-arrayRegion.GetLoCorner()[1];
372  ofs[2]=-arrayRegion.GetLoCorner()[2];
373  vtkAMRBox arrayDims(arrayRegion);
374  arrayDims.Shift(ofs);
375  vtkAMRBox destDims(destRegion);
376  destDims.Shift(ofs);
377  // Quick sanity check.
378  if (!arrayRegion.Contains(destRegion))
379  {
380  vtkGenericWarningMacro(
381  << "ERROR: Array must enclose the destination region. "
382  << "Aborting the fill.");
383  }
384  // Get the bounds of the indices we fill.
385  const int* destLo = destDims.GetLoCorner();
386  int destHi[3];
387  destDims.GetValidHiCorner(destHi);
388  // Get the array dimensions.
389  int arrayHi[3];
390  arrayDims.GetNumberOfCells(arrayHi);
391  // Fill.
392  for (int k=destLo[2]; k<=destHi[2]; ++k)
393  {
394  vtkIdType kOfs=k*arrayHi[0]*arrayHi[1];
395  for (int j=destLo[1]; j<=destHi[1]; ++j)
396  {
397  vtkIdType idx=kOfs+j*arrayHi[0]+destLo[0];
398  for (int i=destLo[0]; i<=destHi[0]; ++i)
399  {
400  pArray[idx]=fillValue;
401  ++idx;
402  }
403  }
404  }
406 
407 }
408 
409 #endif
410 // VTK-HeaderTest-Exclude: vtkAMRBox.h
Encloses a rectangular region of voxel like cells.
Definition: vtkAMRBox.h:40
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 & operator=(const vtkAMRBox &other)
Copy the other box to this box.
vtkAMRBox(const vtkAMRBox &other)
Copy construct this box from another.
void Invalidate()
Set the box to be invalid;.
Definition: vtkAMRBox.h:85
void Serialize(int *buffer) const
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])
void Refine(int r)
Refine the box.
bool Contains(const int I[3]) const
static vtkIdType GetBytesize()
Returns the number of bytes allocated by this instance.
Definition: vtkAMRBox.h:293
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.
ostream & Print(ostream &os) const
Send the box to a stream.
const int * GetLoCorner() const
Get the low corner index.
Definition: vtkAMRBox.h:151
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:95
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.
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.
virtual ~vtkAMRBox()
Definition: vtkAMRBox.h:79
bool Empty() const
Definition: vtkAMRBox.h:161
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:186
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
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
vtkIdType GetNumberOfCells() const
Gets the number of cells enclosed by the box.
const int * GetHiCorner() const
Definition: vtkAMRBox.h:152
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:167
void Shrink(int byN)
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...
@ spacing
Definition: vtkX3D.h:481
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:361
#define VTK_XYZ_GRID
int vtkIdType
Definition: vtkType.h:287