00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00038 #ifndef __vtkRectilinearGrid_h
00039 #define __vtkRectilinearGrid_h
00040
00041 #include "vtkDataSet.h"
00042 #include "vtkStructuredData.h"
00043
00044 class vtkVertex;
00045 class vtkLine;
00046 class vtkPixel;
00047 class vtkVoxel;
00048 class vtkDataArray;
00049
00050 class VTK_FILTERING_EXPORT vtkRectilinearGrid : public vtkDataSet
00051 {
00052 public:
00053 static vtkRectilinearGrid *New();
00054
00055 vtkTypeRevisionMacro(vtkRectilinearGrid,vtkDataSet);
00056 void PrintSelf(ostream& os, vtkIndent indent);
00057
00059 int GetDataObjectType() {return VTK_RECTILINEAR_GRID;};
00060
00063 void CopyStructure(vtkDataSet *ds);
00064
00066 void Initialize();
00067
00069
00070 vtkIdType GetNumberOfCells();
00071 vtkIdType GetNumberOfPoints();
00072 double *GetPoint(vtkIdType ptId);
00073 void GetPoint(vtkIdType id, double x[3]);
00074 vtkCell *GetCell(vtkIdType cellId);
00075 void GetCell(vtkIdType cellId, vtkGenericCell *cell);
00076 void GetCellBounds(vtkIdType cellId, double bounds[6]);
00077 vtkIdType FindPoint(double x, double y, double z) { return this->vtkDataSet::FindPoint(x, y, z);};
00078 vtkIdType FindPoint(double x[3]);
00079 vtkIdType FindCell(double x[3], vtkCell *cell, vtkIdType cellId, double tol2,
00080 int& subId, double pcoords[3], double *weights);
00081 vtkIdType FindCell(double x[3], vtkCell *cell, vtkGenericCell *gencell,
00082 vtkIdType cellId, double tol2, int& subId,
00083 double pcoords[3], double *weights);
00084 vtkCell *FindAndGetCell(double x[3], vtkCell *cell, vtkIdType cellId,
00085 double tol2, int& subId, double pcoords[3],
00086 double *weights);
00087 int GetCellType(vtkIdType cellId);
00088 void GetCellPoints(vtkIdType cellId, vtkIdList *ptIds)
00089 {vtkStructuredData::GetCellPoints(cellId,ptIds,this->DataDescription,
00090 this->Dimensions);}
00091 void GetPointCells(vtkIdType ptId, vtkIdList *cellIds)
00092 {vtkStructuredData::GetPointCells(ptId,cellIds,this->Dimensions);}
00093 void ComputeBounds();
00094 int GetMaxCellSize() {return 8;};
00095 void GetCellNeighbors(vtkIdType cellId, vtkIdList *ptIds,
00096 vtkIdList *cellIds);
00098
00100
00102 void SetDimensions(int i, int j, int k);
00103 void SetDimensions(int dim[3]);
00105
00107
00108 vtkGetVectorMacro(Dimensions,int,3);
00110
00112 int GetDataDimension();
00113
00119 int ComputeStructuredCoordinates(double x[3], int ijk[3], double pcoords[3]);
00120
00123 vtkIdType ComputePointId(int ijk[3]);
00124
00127 vtkIdType ComputeCellId(int ijk[3]);
00128
00130
00131 virtual void SetXCoordinates(vtkDataArray*);
00132 vtkGetObjectMacro(XCoordinates,vtkDataArray);
00134
00136
00137 virtual void SetYCoordinates(vtkDataArray*);
00138 vtkGetObjectMacro(YCoordinates,vtkDataArray);
00140
00142
00143 virtual void SetZCoordinates(vtkDataArray*);
00144 vtkGetObjectMacro(ZCoordinates,vtkDataArray);
00146
00148
00151 void SetExtent(int extent[6]);
00152 void SetExtent(int x1, int x2, int y1, int y2, int z1, int z2);
00153 vtkGetVector6Macro(Extent, int);
00155
00161 unsigned long GetActualMemorySize();
00162
00164
00165 void ShallowCopy(vtkDataObject *src);
00166 void DeepCopy(vtkDataObject *src);
00168
00170 int GetExtentType() { return VTK_3D_EXTENT; };
00171
00175 virtual void Crop();
00176
00177
00179
00180 static vtkRectilinearGrid* GetData(vtkInformation* info);
00181 static vtkRectilinearGrid* GetData(vtkInformationVector* v, int i=0);
00182
00184
00185 protected:
00186 vtkRectilinearGrid();
00187 ~vtkRectilinearGrid();
00188
00189
00190 vtkVertex *Vertex;
00191 vtkLine *Line;
00192 vtkPixel *Pixel;
00193 vtkVoxel *Voxel;
00194
00195 int Dimensions[3];
00196 int DataDescription;
00197
00198 int Extent[6];
00199
00200 vtkDataArray *XCoordinates;
00201 vtkDataArray *YCoordinates;
00202 vtkDataArray *ZCoordinates;
00203
00204
00205 double PointReturn[3];
00206
00207 private:
00209 VTK_LEGACY(void GetCellNeighbors(vtkIdType cellId, vtkIdList& ptIds, vtkIdList& cellIds));
00210 private:
00211 vtkRectilinearGrid(const vtkRectilinearGrid&);
00212 void operator=(const vtkRectilinearGrid&);
00213 };
00214
00215
00216 inline vtkIdType vtkRectilinearGrid::GetNumberOfCells()
00217 {
00218 vtkIdType nCells=1;
00219 int i;
00220
00221 for (i=0; i<3; i++)
00222 {
00223 if (this->Dimensions[i] <= 0)
00224 {
00225 return 0;
00226 }
00227 if (this->Dimensions[i] > 1)
00228 {
00229 nCells *= (this->Dimensions[i]-1);
00230 }
00231 }
00232
00233 return nCells;
00234 }
00235
00236
00237 inline vtkIdType vtkRectilinearGrid::GetNumberOfPoints()
00238 {
00239 return this->Dimensions[0]*this->Dimensions[1]*this->Dimensions[2];
00240 }
00241
00242
00243 inline int vtkRectilinearGrid::GetDataDimension()
00244 {
00245 return vtkStructuredData::GetDataDimension(this->DataDescription);
00246 }
00247
00248
00249 inline vtkIdType vtkRectilinearGrid::ComputePointId(int ijk[3])
00250 {
00251 return vtkStructuredData::ComputePointId(this->Dimensions,ijk);
00252 }
00253
00254
00255 inline vtkIdType vtkRectilinearGrid::ComputeCellId(int ijk[3])
00256 {
00257 return vtkStructuredData::ComputeCellId(this->Dimensions,ijk);
00258 }
00259
00260
00261 #ifndef VTK_LEGACY_REMOVE
00262 inline void vtkRectilinearGrid::GetCellNeighbors(vtkIdType cellId,
00263 vtkIdList& ptIds, vtkIdList& cellIds)
00264 {
00265 this->GetCellNeighbors(cellId, &ptIds, &cellIds);
00266 }
00267 #endif
00268
00269 #endif