• Main Page
  • Related Pages
  • Namespaces
  • Classes
  • Files
  • File List
  • File Members

dox/Filtering/vtkImageData.h

Go to the documentation of this file.
00001 /*=========================================================================
00002 
00003   Program:   Visualization Toolkit
00004   Module:    $RCSfile: vtkImageData.h,v $
00005 
00006   Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
00007   All rights reserved.
00008   See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
00009 
00010      This software is distributed WITHOUT ANY WARRANTY; without even
00011      the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
00012      PURPOSE.  See the above copyright notice for more information.
00013 
00014 =========================================================================*/
00027 #ifndef __vtkImageData_h
00028 #define __vtkImageData_h
00029 
00030 #include "vtkDataSet.h"
00031 
00032 #include "vtkStructuredData.h" // Needed for inline methods
00033 
00034 class vtkDataArray;
00035 class vtkLine;
00036 class vtkPixel;
00037 class vtkVertex;
00038 class vtkVoxel;
00039 
00040 class VTK_FILTERING_EXPORT vtkImageData : public vtkDataSet
00041 {
00042 public:
00043   static vtkImageData *New();
00044 
00045   vtkTypeRevisionMacro(vtkImageData,vtkDataSet);
00046   void PrintSelf(ostream& os, vtkIndent indent);
00047 
00050   virtual void CopyStructure(vtkDataSet *ds);
00051 
00053   virtual int GetDataObjectType() {return VTK_IMAGE_DATA;};
00054 
00056 
00057   virtual vtkIdType GetNumberOfCells();
00058   virtual vtkIdType GetNumberOfPoints();
00059   virtual double *GetPoint(vtkIdType ptId);
00060   virtual void GetPoint(vtkIdType id, double x[3]);
00061   virtual vtkCell *GetCell(vtkIdType cellId);
00062   virtual void GetCell(vtkIdType cellId, vtkGenericCell *cell);
00063   virtual void GetCellBounds(vtkIdType cellId, double bounds[6]);
00064   virtual vtkIdType FindPoint(double x, double y, double z)
00065     {
00066     return this->vtkDataSet::FindPoint(x, y, z);
00067     }
00068   virtual vtkIdType FindPoint(double x[3]);
00069   virtual vtkIdType FindCell(
00070     double x[3], vtkCell *cell, vtkIdType cellId, double tol2,
00071     int& subId, double pcoords[3], double *weights);
00072   virtual vtkIdType FindCell(
00073     double x[3], vtkCell *cell, vtkGenericCell *gencell,
00074     vtkIdType cellId, double tol2, int& subId,
00075     double pcoords[3], double *weights);
00076   virtual vtkCell *FindAndGetCell(double x[3], vtkCell *cell, vtkIdType cellId,
00077                                   double tol2, int& subId, double pcoords[3],
00078                                   double *weights);
00079   virtual int GetCellType(vtkIdType cellId);
00080   virtual void GetCellPoints(vtkIdType cellId, vtkIdList *ptIds)
00081     {vtkStructuredData::GetCellPoints(cellId,ptIds,this->DataDescription,
00082                                       this->GetDimensions());}
00083   virtual void GetPointCells(vtkIdType ptId, vtkIdList *cellIds)
00084     {vtkStructuredData::GetPointCells(ptId,cellIds,this->GetDimensions());}
00085   virtual void ComputeBounds();
00086   virtual int GetMaxCellSize() {return 8;}; //voxel is the largest
00088 
00090   virtual void Initialize();
00091 
00093   virtual void SetDimensions(int i, int j, int k);
00094 
00096   virtual void SetDimensions(const int dims[3]);
00097 
00099 
00102   virtual int *GetDimensions();
00103   virtual void GetDimensions(int dims[3]);
00105 
00107 
00112   virtual int ComputeStructuredCoordinates(
00113     double x[3], int ijk[3], double pcoords[3]);
00115 
00117 
00125   virtual void GetVoxelGradient(
00126     int i,int j,int k, vtkDataArray *s, vtkDataArray *g);
00128 
00130 
00135   virtual void GetPointGradient(
00136     int i, int j, int k, vtkDataArray *s, double g[3]);
00138 
00140   virtual int GetDataDimension();
00141 
00143 
00145   virtual vtkIdType ComputePointId(int ijk[3]) {
00146     return vtkStructuredData::ComputePointId(this->GetDimensions(),ijk);};
00148 
00150 
00152   virtual vtkIdType ComputeCellId(int ijk[3]) {
00153     return vtkStructuredData::ComputeCellId(this->GetDimensions(),ijk);};
00155 
00157 
00158   virtual void SetAxisUpdateExtent(int axis, int min, int max);
00159   virtual void GetAxisUpdateExtent(int axis, int &min, int &max);
00161 
00165   virtual void UpdateInformation();
00166 
00168 
00176   virtual void SetExtent(int extent[6]);
00177   virtual 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   virtual double GetScalarTypeMin();
00191   virtual double GetScalarTypeMax();
00193 
00195   virtual int GetScalarSize();
00196 
00198 
00201   virtual vtkIdType *GetIncrements();
00202   virtual void GetIncrements(vtkIdType &incX, vtkIdType &incY, vtkIdType &incZ);
00203   virtual void GetIncrements(vtkIdType inc[3]);
00205 
00207 
00216   virtual void GetContinuousIncrements(
00217     int extent[6], vtkIdType &incX, vtkIdType &incY, vtkIdType &incZ);
00219 
00221 
00222   virtual void *GetScalarPointerForExtent(int extent[6]);
00223   virtual void *GetScalarPointer(int coordinates[3]);
00224   virtual void *GetScalarPointer(int x, int y, int z);
00225   virtual void *GetScalarPointer();
00227 
00229 
00230   virtual float GetScalarComponentAsFloat(int x, int y, int z, int component);
00231   virtual void SetScalarComponentFromFloat(
00232     int x, int y, int z, int component, float v);
00233   virtual double GetScalarComponentAsDouble(int x, int y, int z, int component);
00234   virtual void SetScalarComponentFromDouble(
00235     int x, int y, int z, int component, double v);
00237 
00239   virtual void AllocateScalars();
00240 
00242 
00246   virtual void CopyAndCastFrom(vtkImageData *inData, int extent[6]);
00247   virtual void CopyAndCastFrom(vtkImageData *inData, int x0, int x1,
00248                                int y0, int y1, int z0, int z1)
00249     {int e[6]; e[0]=x0; e[1]=x1; e[2]=y0; e[3]=y1; e[4]=z0; e[5]=z1;
00250     this->CopyAndCastFrom(inData, e);}
00252 
00256   virtual void Crop();
00257 
00263   virtual unsigned long GetActualMemorySize();
00264 
00266 
00268   vtkSetVector3Macro(Spacing,double);
00269   vtkGetVector3Macro(Spacing,double);
00271 
00273 
00279   vtkSetVector3Macro(Origin,double);
00280   vtkGetVector3Macro(Origin,double);
00282 
00284 
00289   void SetScalarTypeToFloat(){this->SetScalarType(VTK_FLOAT);};
00290   void SetScalarTypeToDouble(){this->SetScalarType(VTK_DOUBLE);};
00291   void SetScalarTypeToInt(){this->SetScalarType(VTK_INT);};
00292   void SetScalarTypeToUnsignedInt()
00293     {this->SetScalarType(VTK_UNSIGNED_INT);};
00294   void SetScalarTypeToLong(){this->SetScalarType(VTK_LONG);};
00295   void SetScalarTypeToUnsignedLong()
00296     {this->SetScalarType(VTK_UNSIGNED_LONG);};
00297   void SetScalarTypeToShort(){this->SetScalarType(VTK_SHORT);};
00298   void SetScalarTypeToUnsignedShort()
00299     {this->SetScalarType(VTK_UNSIGNED_SHORT);};
00300   void SetScalarTypeToUnsignedChar()
00301     {this->SetScalarType(VTK_UNSIGNED_CHAR);};
00302   void SetScalarTypeToSignedChar()
00303     {this->SetScalarType(VTK_SIGNED_CHAR);};
00304   void SetScalarTypeToChar()
00305     {this->SetScalarType(VTK_CHAR);};
00306   void SetScalarType(int);
00307   int GetScalarType();
00308   const char* GetScalarTypeAsString()
00309     { return vtkImageScalarTypeNameMacro ( this->GetScalarType() ); };
00311 
00313 
00315   void SetNumberOfScalarComponents( int n );
00316   int GetNumberOfScalarComponents();
00318 
00319   // Must only be called with vtkImageData (or subclass) as input
00320   virtual void CopyTypeSpecificInformation( vtkDataObject *image );
00321 
00323 
00325   virtual void CopyInformationToPipeline(vtkInformation* request,
00326                                          vtkInformation* input,
00327                                          vtkInformation* output,
00328                                          int forceCopy);
00329   virtual void CopyInformationFromPipeline(vtkInformation* request);
00331 
00335   virtual void PrepareForNewData();
00336 
00338 
00339   virtual void ShallowCopy(vtkDataObject *src);
00340   virtual void DeepCopy(vtkDataObject *src);
00342 
00343   //--------------------------------------------------------------------------
00344   // Methods that apply to any array (not just scalars).
00345   // I am starting to experiment with generalizing imaging fitlers
00346   // to operate on more than just scalars.
00347 
00349 
00352   void *GetArrayPointerForExtent(vtkDataArray* array, int extent[6]);
00353   void *GetArrayPointer(vtkDataArray* array, int coordinates[3]);
00355 
00358   void GetArrayIncrements(vtkDataArray *array, vtkIdType increments[3]);
00359 
00364   void ComputeInternalExtent(int *intExt, int *tgtExt, int *bnds);
00365 
00367   virtual int GetExtentType() { return VTK_3D_EXTENT; };
00368 
00369   //BTX
00371 
00372   static vtkImageData* GetData(vtkInformation* info);
00373   static vtkImageData* GetData(vtkInformationVector* v, int i=0);
00374   //ETX
00376 
00377 protected:
00378   vtkImageData();
00379   ~vtkImageData();
00380 
00381   // for the GetCell method
00382   vtkVertex *Vertex;
00383   vtkLine *Line;
00384   vtkPixel *Pixel;
00385   vtkVoxel *Voxel;
00386 
00387   // The extent of what is currently in the structured grid.
00388   // Dimensions is just an array to return a value.
00389   // Its contents are out of data until GetDimensions is called.
00390   int Dimensions[3];
00391   int DataDescription;
00392   vtkIdType Increments[3];
00393 
00394   double Origin[3];
00395   double Spacing[3];
00396 
00397   int Extent[6];
00398 
00399   void ComputeIncrements();
00400   void CopyOriginAndSpacingFromPipeline();
00401 
00402   vtkTimeStamp ExtentComputeTime;
00403 
00404 private:
00405   void InternalImageDataCopy(vtkImageData *src);
00406 private:
00407   vtkImageData(const vtkImageData&);  // Not implemented.
00408   void operator=(const vtkImageData&);  // Not implemented.
00409 };
00410 
00411 
00412 //----------------------------------------------------------------------------
00413 inline void vtkImageData::GetPoint(vtkIdType id, double x[3])
00414 {
00415   const double *p = this->GetPoint(id);
00416   x[0] = p[0]; x[1] = p[1]; x[2] = p[2];
00417 }
00418 
00419 //----------------------------------------------------------------------------
00420 inline vtkIdType vtkImageData::GetNumberOfPoints()
00421 {
00422   const int *extent = this->Extent;
00423   vtkIdType dims[3];
00424   dims[0] = extent[1] - extent[0] + 1;
00425   dims[1] = extent[3] - extent[2] + 1;
00426   dims[2] = extent[5] - extent[4] + 1;
00427 
00428   return dims[0]*dims[1]*dims[2];
00429 }
00430 
00431 //----------------------------------------------------------------------------
00432 inline int vtkImageData::GetDataDimension()
00433 {
00434   return vtkStructuredData::GetDataDimension(this->DataDescription);
00435 }
00436 
00437 #endif
00438 
00439 
00440 

Generated by  doxygen 1.7.1