00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00030 #ifndef __vtkImageData_h
00031 #define __vtkImageData_h
00032
00033 #include "vtkDataSet.h"
00034
00035 #include "vtkStructuredData.h"
00036
00037 class vtkDataArray;
00038 class vtkLine;
00039 class vtkPixel;
00040 class vtkVertex;
00041 class vtkVoxel;
00042
00043 class VTK_FILTERING_EXPORT vtkImageData : public vtkDataSet
00044 {
00045 public:
00046 static vtkImageData *New();
00047
00048 vtkTypeMacro(vtkImageData,vtkDataSet);
00049 void PrintSelf(ostream& os, vtkIndent indent);
00050
00053 virtual void CopyStructure(vtkDataSet *ds);
00054
00056 virtual int GetDataObjectType() {return VTK_IMAGE_DATA;};
00057
00059
00060 virtual vtkIdType GetNumberOfCells();
00061 virtual vtkIdType GetNumberOfPoints();
00062 virtual double *GetPoint(vtkIdType ptId);
00063 virtual void GetPoint(vtkIdType id, double x[3]);
00064 virtual vtkCell *GetCell(vtkIdType cellId);
00065 virtual void GetCell(vtkIdType cellId, vtkGenericCell *cell);
00066 virtual void GetCellBounds(vtkIdType cellId, double bounds[6]);
00067 virtual vtkIdType FindPoint(double x, double y, double z)
00068 {
00069 return this->vtkDataSet::FindPoint(x, y, z);
00070 }
00071 virtual vtkIdType FindPoint(double x[3]);
00072 virtual vtkIdType FindCell(
00073 double x[3], vtkCell *cell, vtkIdType cellId, double tol2,
00074 int& subId, double pcoords[3], double *weights);
00075 virtual vtkIdType FindCell(
00076 double x[3], vtkCell *cell, vtkGenericCell *gencell,
00077 vtkIdType cellId, double tol2, int& subId,
00078 double pcoords[3], double *weights);
00079 virtual vtkCell *FindAndGetCell(double x[3], vtkCell *cell, vtkIdType cellId,
00080 double tol2, int& subId, double pcoords[3],
00081 double *weights);
00082 virtual int GetCellType(vtkIdType cellId);
00083 virtual void GetCellPoints(vtkIdType cellId, vtkIdList *ptIds)
00084 {vtkStructuredData::GetCellPoints(cellId,ptIds,this->DataDescription,
00085 this->GetDimensions());}
00086 virtual void GetPointCells(vtkIdType ptId, vtkIdList *cellIds)
00087 {vtkStructuredData::GetPointCells(ptId,cellIds,this->GetDimensions());}
00088 virtual void ComputeBounds();
00089 virtual int GetMaxCellSize() {return 8;};
00091
00093 virtual void Initialize();
00094
00097 virtual void SetDimensions(int i, int j, int k);
00098
00102 virtual void SetDimensions(const int dims[3]);
00103
00105
00108 virtual int *GetDimensions();
00109 virtual void GetDimensions(int dims[3]);
00111
00113
00118 virtual int ComputeStructuredCoordinates(
00119 double x[3], int ijk[3], double pcoords[3]);
00121
00123
00131 virtual void GetVoxelGradient(
00132 int i,int j,int k, vtkDataArray *s, vtkDataArray *g);
00134
00136
00141 virtual void GetPointGradient(
00142 int i, int j, int k, vtkDataArray *s, double g[3]);
00144
00146 virtual int GetDataDimension();
00147
00149
00151 virtual vtkIdType ComputePointId(int ijk[3]) {
00152 return vtkStructuredData::ComputePointIdForExtent(this->Extent,ijk);};
00154
00156
00158 virtual vtkIdType ComputeCellId(int ijk[3]) {
00159 return vtkStructuredData::ComputeCellIdForExtent(this->Extent,ijk);};
00161
00163
00164 virtual void SetAxisUpdateExtent(int axis, int min, int max);
00165 virtual void GetAxisUpdateExtent(int axis, int &min, int &max);
00167
00171 virtual void UpdateInformation();
00172
00174
00182 virtual void SetExtent(int extent[6]);
00183 virtual void SetExtent(int x1, int x2, int y1, int y2, int z1, int z2);
00184 vtkGetVector6Macro(Extent, int);
00186
00191 virtual unsigned long GetEstimatedMemorySize();
00192
00194
00196 virtual double GetScalarTypeMin();
00197 virtual double GetScalarTypeMax();
00199
00201 virtual int GetScalarSize();
00202
00204
00207 virtual vtkIdType *GetIncrements();
00208 virtual void GetIncrements(vtkIdType &incX, vtkIdType &incY, vtkIdType &incZ);
00209 virtual void GetIncrements(vtkIdType inc[3]);
00211
00213
00222 virtual void GetContinuousIncrements(
00223 int extent[6], vtkIdType &incX, vtkIdType &incY, vtkIdType &incZ);
00225
00227
00228 virtual void *GetScalarPointerForExtent(int extent[6]);
00229 virtual void *GetScalarPointer(int coordinates[3]);
00230 virtual void *GetScalarPointer(int x, int y, int z);
00231 virtual void *GetScalarPointer();
00233
00235
00236 virtual float GetScalarComponentAsFloat(int x, int y, int z, int component);
00237 virtual void SetScalarComponentFromFloat(
00238 int x, int y, int z, int component, float v);
00239 virtual double GetScalarComponentAsDouble(int x, int y, int z, int component);
00240 virtual void SetScalarComponentFromDouble(
00241 int x, int y, int z, int component, double v);
00243
00245 virtual void AllocateScalars();
00246
00248
00252 virtual void CopyAndCastFrom(vtkImageData *inData, int extent[6]);
00253 virtual void CopyAndCastFrom(vtkImageData *inData, int x0, int x1,
00254 int y0, int y1, int z0, int z1)
00255 {int e[6]; e[0]=x0; e[1]=x1; e[2]=y0; e[3]=y1; e[4]=z0; e[5]=z1;
00256 this->CopyAndCastFrom(inData, e);}
00258
00262 virtual void Crop();
00263
00269 virtual unsigned long GetActualMemorySize();
00270
00272
00274 vtkSetVector3Macro(Spacing,double);
00275 vtkGetVector3Macro(Spacing,double);
00277
00279
00285 vtkSetVector3Macro(Origin,double);
00286 vtkGetVector3Macro(Origin,double);
00288
00290
00295 void SetScalarTypeToFloat(){this->SetScalarType(VTK_FLOAT);};
00296 void SetScalarTypeToDouble(){this->SetScalarType(VTK_DOUBLE);};
00297 void SetScalarTypeToInt(){this->SetScalarType(VTK_INT);};
00298 void SetScalarTypeToUnsignedInt()
00299 {this->SetScalarType(VTK_UNSIGNED_INT);};
00300 void SetScalarTypeToLong(){this->SetScalarType(VTK_LONG);};
00301 void SetScalarTypeToUnsignedLong()
00302 {this->SetScalarType(VTK_UNSIGNED_LONG);};
00303 void SetScalarTypeToShort(){this->SetScalarType(VTK_SHORT);};
00304 void SetScalarTypeToUnsignedShort()
00305 {this->SetScalarType(VTK_UNSIGNED_SHORT);};
00306 void SetScalarTypeToUnsignedChar()
00307 {this->SetScalarType(VTK_UNSIGNED_CHAR);};
00308 void SetScalarTypeToSignedChar()
00309 {this->SetScalarType(VTK_SIGNED_CHAR);};
00310 void SetScalarTypeToChar()
00311 {this->SetScalarType(VTK_CHAR);};
00312 void SetScalarType(int);
00313 int GetScalarType();
00314 const char* GetScalarTypeAsString()
00315 { return vtkImageScalarTypeNameMacro ( this->GetScalarType() ); };
00317
00319
00321 void SetNumberOfScalarComponents( int n );
00322 int GetNumberOfScalarComponents();
00324
00325
00326 virtual void CopyTypeSpecificInformation( vtkDataObject *image );
00327
00329
00331 virtual void CopyInformationToPipeline(vtkInformation* request,
00332 vtkInformation* input,
00333 vtkInformation* output,
00334 int forceCopy);
00335 virtual void CopyInformationFromPipeline(vtkInformation* request);
00337
00341 virtual void PrepareForNewData();
00342
00344
00345 virtual void ShallowCopy(vtkDataObject *src);
00346 virtual void DeepCopy(vtkDataObject *src);
00348
00349
00350
00351
00352
00353
00355
00358 void *GetArrayPointerForExtent(vtkDataArray* array, int extent[6]);
00359 void *GetArrayPointer(vtkDataArray* array, int coordinates[3]);
00361
00364 void GetArrayIncrements(vtkDataArray *array, vtkIdType increments[3]);
00365
00370 void ComputeInternalExtent(int *intExt, int *tgtExt, int *bnds);
00371
00373 virtual int GetExtentType() { return VTK_3D_EXTENT; };
00374
00375
00377
00378 static vtkImageData* GetData(vtkInformation* info);
00379 static vtkImageData* GetData(vtkInformationVector* v, int i=0);
00380
00382
00383 protected:
00384 vtkImageData();
00385 ~vtkImageData();
00386
00387
00388
00389
00390 int Dimensions[3];
00391 vtkIdType Increments[3];
00392
00393 double Origin[3];
00394 double Spacing[3];
00395
00396 int Extent[6];
00397
00398 void ComputeIncrements();
00399 void ComputeIncrements(vtkIdType inc[3]);
00400 void CopyOriginAndSpacingFromPipeline();
00401
00402 vtkTimeStamp ExtentComputeTime;
00403
00404 void SetDataDescription(int desc);
00405 int GetDataDescription() { return this->DataDescription; }
00406
00407 private:
00408 void InternalImageDataCopy(vtkImageData *src);
00409 private:
00410
00411
00412 friend class vtkUniformGrid;
00413
00414
00415
00416 vtkVertex *Vertex;
00417 vtkLine *Line;
00418 vtkPixel *Pixel;
00419 vtkVoxel *Voxel;
00420
00421 int DataDescription;
00422
00423 vtkImageData(const vtkImageData&);
00424 void operator=(const vtkImageData&);
00425 };
00426
00427
00428
00429 inline void vtkImageData::ComputeIncrements()
00430 {
00431 this->ComputeIncrements(this->Increments);
00432 }
00433
00434
00435 inline void vtkImageData::GetPoint(vtkIdType id, double x[3])
00436 {
00437 const double *p = this->GetPoint(id);
00438 x[0] = p[0]; x[1] = p[1]; x[2] = p[2];
00439 }
00440
00441
00442 inline vtkIdType vtkImageData::GetNumberOfPoints()
00443 {
00444 const int *extent = this->Extent;
00445 vtkIdType dims[3];
00446 dims[0] = extent[1] - extent[0] + 1;
00447 dims[1] = extent[3] - extent[2] + 1;
00448 dims[2] = extent[5] - extent[4] + 1;
00449
00450 return dims[0]*dims[1]*dims[2];
00451 }
00452
00453
00454 inline int vtkImageData::GetDataDimension()
00455 {
00456 return vtkStructuredData::GetDataDimension(this->DataDescription);
00457 }
00458
00459 #endif