Main Page | Class Hierarchy | Alphabetical List | Class List | File List | Class Members | File Members | Related Pages

dox/Common/vtkImageData.h

Go to the documentation of this file.
00001 /*=========================================================================
00002 
00003   Program:   Visualization Toolkit
00004   Module:    $RCSfile: vtkImageData.h,v $
00005   Language:  C++
00006 
00007   Copyright (c) 1993-2002 Ken Martin, Will Schroeder, Bill Lorensen 
00008   All rights reserved.
00009   See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
00010 
00011      This software is distributed WITHOUT ANY WARRANTY; without even 
00012      the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR 
00013      PURPOSE.  See the above copyright notice for more information.
00014 
00015 =========================================================================*/
00034 #ifndef __vtkImageData_h
00035 #define __vtkImageData_h
00036 
00037 #include "vtkDataSet.h"
00038 
00039 #include "vtkStructuredData.h" // Needed for inline methods
00040 
00041 class vtkDataArray;
00042 class vtkLine;
00043 class vtkPixel;
00044 class vtkVertex;
00045 class vtkVoxel;
00046 
00047 class VTK_COMMON_EXPORT vtkImageData : public vtkDataSet
00048 {
00049 public:
00050   static vtkImageData *New();
00051 
00052   vtkTypeRevisionMacro(vtkImageData,vtkDataSet);
00053   void PrintSelf(ostream& os, vtkIndent indent);
00054 
00057   void CopyStructure(vtkDataSet *ds);
00058 
00060   int GetDataObjectType() {return VTK_IMAGE_DATA;};
00061 
00064   void UpdateData();
00065   
00067 
00068   vtkIdType GetNumberOfCells();
00069   vtkIdType GetNumberOfPoints();
00070   float *GetPoint(vtkIdType ptId);
00071   void GetPoint(vtkIdType id, float x[3]);
00072   vtkCell *GetCell(vtkIdType cellId);
00073   void GetCell(vtkIdType cellId, vtkGenericCell *cell);
00074   void GetCellBounds(vtkIdType cellId, float bounds[6]);
00075   vtkIdType FindPoint(float x, float y, float z) { return this->vtkDataSet::FindPoint(x, y, z);};
00076   vtkIdType FindPoint(float x[3]);
00077   vtkIdType FindCell(float x[3], vtkCell *cell, vtkIdType cellId, float tol2, 
00078                      int& subId, float pcoords[3], float *weights);
00079   vtkIdType FindCell(float x[3], vtkCell *cell, vtkGenericCell *gencell,
00080                      vtkIdType cellId, float tol2, int& subId, 
00081                      float pcoords[3], float *weights);
00082   vtkCell *FindAndGetCell(float x[3], vtkCell *cell, vtkIdType cellId, 
00083                           float tol2, int& subId, float pcoords[3],
00084                           float *weights);
00085   int GetCellType(vtkIdType cellId);
00086   void GetCellPoints(vtkIdType cellId, vtkIdList *ptIds)
00087     {vtkStructuredData::GetCellPoints(cellId,ptIds,this->DataDescription,
00088                                       this->GetDimensions());}
00089   void GetPointCells(vtkIdType ptId, vtkIdList *cellIds)
00090     {vtkStructuredData::GetPointCells(ptId,cellIds,this->GetDimensions());}
00091   void ComputeBounds();
00092   int GetMaxCellSize() {return 8;}; //voxel is the largest
00094 
00096   void SetDimensions(int i, int j, int k);
00097 
00099   void SetDimensions(int dims[3]);
00100 
00102 
00104   int *GetDimensions();
00105   void GetDimensions(int dims[3]);
00107 
00113   int ComputeStructuredCoordinates(float x[3], int ijk[3], float pcoords[3]);
00114   
00123   void GetVoxelGradient(int i,int j,int k, vtkDataArray *s, vtkDataArray *g);
00124 
00130   void GetPointGradient(int i, int j, int k, vtkDataArray *s, float g[3]);
00131 
00133   int GetDataDimension();
00134 
00136 
00138   vtkIdType ComputePointId(int ijk[3]) {
00139     return vtkStructuredData::ComputePointId(this->GetDimensions(),ijk);};
00141 
00143 
00145   vtkIdType ComputeCellId(int ijk[3]) {
00146     return vtkStructuredData::ComputeCellId(this->GetDimensions(),ijk);};
00148 
00150 
00151   void SetAxisUpdateExtent(int axis, int min, int max);
00152   void GetAxisUpdateExtent(int axis, int &min, int &max);
00154 
00156 
00159   void SetUpdateExtent(int piece, int numPieces, int ghostLevel);
00160   void SetUpdateExtent(int piece, int numPieces)
00161     {this->SetUpdateExtent(piece, numPieces, 0);}
00163   
00165 
00166   void SetUpdateExtent( int x1, int x2, int y1, int y2, int z1, int z2 )
00167     { this->vtkDataSet::SetUpdateExtent( x1, x2, y1, y2, z1, z2 ); };
00168   void SetUpdateExtent( int ext[6] )
00169     { this->vtkDataSet::SetUpdateExtent( ext ); };
00171 
00173 
00176   void SetExtent(int extent[6]);
00177   void SetExtent(int x1, int x2, int y1, int y2, int z1, int z2);
00178   vtkGetVector6Macro(Extent,int);
00180 
00185   virtual unsigned long GetEstimatedMemorySize();
00186 
00188 
00190   double GetScalarTypeMin();
00191   double GetScalarTypeMax();
00193   
00195   int GetScalarSize();
00196 
00198 
00201   int *GetIncrements();
00202   void GetIncrements(int &incX, int &incY, int &incZ);
00203   void GetIncrements(int inc[3]);
00205   
00215   void GetContinuousIncrements(int extent[6], int &incX, int &incY, int &incZ);
00216   
00218 
00219   void *GetScalarPointerForExtent(int extent[6]);
00220   void *GetScalarPointer(int coordinates[3]);
00221   void *GetScalarPointer(int x, int y, int z);
00222   void *GetScalarPointer();
00224 
00226 
00227   float GetScalarComponentAsFloat(int x, int y, int z, int component);
00228   void SetScalarComponentFromFloat(int x, int y, int z, int component, float v);
00230   
00232   void AllocateScalars();
00233   
00235 
00239   void CopyAndCastFrom(vtkImageData *inData, int extent[6]);
00240   void CopyAndCastFrom(vtkImageData *inData, int x0, int x1,
00241                        int y0, int y1, int z0, int z1)
00242     {int e[6]; e[0]=x0; e[1]=x1; e[2]=y0; e[3]=y1; e[4]=z0; e[5]=z1; 
00243     this->CopyAndCastFrom(inData, e);}
00245 
00249   virtual void Crop();
00250 
00256   unsigned long GetActualMemorySize();
00257   
00259 
00261   vtkSetVector3Macro(Spacing,float);
00262   vtkGetVector3Macro(Spacing,float);
00264   
00266 
00268   vtkSetVector3Macro(Origin,float);
00269   vtkGetVector3Macro(Origin,float);
00271   
00273 
00274   void SetScalarTypeToFloat(){this->SetScalarType(VTK_FLOAT);};
00275   void SetScalarTypeToDouble(){this->SetScalarType(VTK_DOUBLE);};
00276   void SetScalarTypeToInt(){this->SetScalarType(VTK_INT);};
00277   void SetScalarTypeToUnsignedInt()
00278     {this->SetScalarType(VTK_UNSIGNED_INT);};
00279   void SetScalarTypeToLong(){this->SetScalarType(VTK_LONG);};
00280   void SetScalarTypeToUnsignedLong()
00281     {this->SetScalarType(VTK_UNSIGNED_LONG);};
00282   void SetScalarTypeToShort(){this->SetScalarType(VTK_SHORT);};
00283   void SetScalarTypeToUnsignedShort()   
00284     {this->SetScalarType(VTK_UNSIGNED_SHORT);};
00285   void SetScalarTypeToUnsignedChar()
00286     {this->SetScalarType(VTK_UNSIGNED_CHAR);};
00287   void SetScalarTypeToChar()
00288     {this->SetScalarType(VTK_CHAR);};
00289   vtkSetMacro(ScalarType, int);
00290   int GetScalarType();
00291   const char* GetScalarTypeAsString() { return vtkImageScalarTypeNameMacro ( this->GetScalarType() ); };
00293 
00295 
00296   void SetNumberOfScalarComponents( int n );
00297   vtkGetMacro(NumberOfScalarComponents,int);
00299 
00300   // Must only be called with vtkImageData (or subclass) as input
00301   void CopyTypeSpecificInformation( vtkDataObject *image );
00302 
00306   virtual void PrepareForNewData();
00307 
00309 
00310   void ShallowCopy(vtkDataObject *src);  
00311   void DeepCopy(vtkDataObject *src);
00313 
00314   //--------------------------------------------------------------------------
00315   // Methods that apply to any array (not just scalars).
00316   // I am starting to experiment with generalizing imaging fitlers
00317   // to operate on more than just scalars.
00318 
00320 
00323   void *GetArrayPointerForExtent(vtkDataArray* array, int extent[6]);
00324   void *GetArrayPointer(vtkDataArray* array, int coordinates[3]);
00326 
00329   void GetArrayIncrements(vtkDataArray *array, int increments[3]);
00330 
00335   void ComputeInternalExtent(int *intExt, int *tgtExt, int *bnds);
00336   
00337 protected:
00338   vtkImageData();
00339   ~vtkImageData();
00340 
00341   // for the GetCell method
00342   vtkVertex *Vertex;
00343   vtkLine *Line;
00344   vtkPixel *Pixel;
00345   vtkVoxel *Voxel;
00346 
00347   // The extent type is a 3D extent
00348   int GetExtentType() { return VTK_3D_EXTENT; };
00349 
00350   // The extent of what is currently in the structured grid.
00351   // Dimensions is just an array to return a value.
00352   // Its contents are out of data until GetDimensions is called.
00353   int Dimensions[3];
00354   int DataDescription;
00355   int Increments[3];
00356 
00357   float Origin[3];
00358   float Spacing[3];
00359   int ScalarType;
00360   int NumberOfScalarComponents;
00361 
00362   void ComputeIncrements();
00363 
00364 private:
00365   void InternalImageDataCopy(vtkImageData *src);
00366 private:
00367   vtkImageData(const vtkImageData&);  // Not implemented.
00368   void operator=(const vtkImageData&);  // Not implemented.
00369 };
00370 
00371 
00372 inline void vtkImageData::GetPoint(vtkIdType id, float x[3])
00373 {
00374   float *p=this->GetPoint(id);
00375   x[0] = p[0]; x[1] = p[1]; x[2] = p[2];
00376 }
00377 
00378 
00379 
00380 inline vtkIdType vtkImageData::GetNumberOfPoints()
00381 {
00382   int *dims = this->GetDimensions();
00383   return dims[0]*dims[1]*dims[2];
00384 }
00385 
00386 inline int vtkImageData::GetDataDimension()
00387 {
00388   return vtkStructuredData::GetDataDimension(this->DataDescription);
00389 }
00390 
00391 #endif
00392 
00393 
00394