00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00029 #ifndef __vtkAMRBox_h
00030 #define __vtkAMRBox_h
00031
00032 #include "vtkObject.h"
00033
00034 class VTK_FILTERING_EXPORT vtkAMRBox
00035 {
00036 public:
00037
00038 int LoCorner[3];
00039 int HiCorner[3];
00040
00041 vtkAMRBox()
00042 {
00043 for(int i=0; i<3; i++)
00044 {
00045 this->LoCorner[i] = this->HiCorner[i] = 0;
00046 }
00047 }
00048
00049 vtkAMRBox(int dimensionality, int* loCorner, int* hiCorner)
00050 {
00051 this->LoCorner[2] = this->HiCorner[2] = 0;
00052 memcpy(this->LoCorner, loCorner, dimensionality*sizeof(int));
00053 memcpy(this->HiCorner, hiCorner, dimensionality*sizeof(int));
00054 }
00055
00057
00059 vtkIdType GetNumberOfCells()
00060 {
00061 vtkIdType numCells=1;
00062 for(int i=0; i<3; i++)
00063 {
00064 numCells *= HiCorner[i] - LoCorner[i] + 1;
00065 }
00066 return numCells;
00067 }
00069
00071
00073 void Coarsen(int refinement)
00074 {
00075 for (int i=0; i<3; i++)
00076 {
00077 this->LoCorner[i] =
00078 ( this->LoCorner[i] < 0 ?
00079 -abs(this->LoCorner[i]+1)/refinement - 1 :
00080 this->LoCorner[i]/refinement );
00081 this->HiCorner[i] =
00082 ( this->HiCorner[i] < 0 ?
00083 -abs(this->HiCorner[i]+1)/refinement - 1 :
00084 this->HiCorner[i]/refinement );
00085 }
00086 }
00088
00090
00092 void Refine(int refinement)
00093 {
00094 for (int i=0; i<3; i++)
00095 {
00096 this->LoCorner[i] = this->LoCorner[i]*refinement;
00097 this->HiCorner[i] = this->HiCorner[i]*refinement;
00098 }
00099 }
00101
00103
00104 int DoesContainCell(int i, int j, int k)
00105 {
00106 return
00107 i >= this->LoCorner[0] && i <= this->HiCorner[0] &&
00108 j >= this->LoCorner[1] && j <= this->HiCorner[1] &&
00109 k >= this->LoCorner[2] && k <= this->HiCorner[2];
00110 }
00112
00113 };
00114
00115 #endif
00116
00117
00118
00119
00120
00121