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
39class 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
78
79 virtual ~vtkAMRBox(){}
80
82
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
360template <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(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
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: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.
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.
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.
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.
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)
const int * GetLoCorner() const
Get the low corner index.
Definition: vtkAMRBox.h:151
const int * GetHiCorner() const
Definition: vtkAMRBox.h:152
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