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_COMMON_EXPORT vtkImageData :
public vtkDataSet
00044 {
00045
public:
00046
static vtkImageData *
New();
00047
00048 vtkTypeRevisionMacro(vtkImageData,
vtkDataSet);
00049
void PrintSelf(ostream& os,
vtkIndent indent);
00050
00053
void CopyStructure(
vtkDataSet *ds);
00054
00056 int GetDataObjectType() {
return VTK_IMAGE_DATA;};
00057
00060
void UpdateData();
00061
00063
00064
vtkIdType GetNumberOfCells();
00065
vtkIdType GetNumberOfPoints();
00066
double *
GetPoint(
vtkIdType ptId);
00067
void GetPoint(
vtkIdType id,
double x[3]);
00068
vtkCell *
GetCell(
vtkIdType cellId);
00069
void GetCell(
vtkIdType cellId,
vtkGenericCell *cell);
00070
void GetCellBounds(
vtkIdType cellId,
double bounds[6]);
00071 vtkIdType FindPoint(
double x,
double y,
double z) {
return this->
vtkDataSet::FindPoint(x, y, z);};
00072
vtkIdType FindPoint(
double x[3]);
00073
vtkIdType FindCell(
double x[3],
vtkCell *cell,
vtkIdType cellId,
double tol2,
00074
int& subId,
double pcoords[3],
double *weights);
00075
vtkIdType FindCell(
double x[3],
vtkCell *cell,
vtkGenericCell *gencell,
00076
vtkIdType cellId,
double tol2,
int& subId,
00077
double pcoords[3],
double *weights);
00078
vtkCell *
FindAndGetCell(
double x[3],
vtkCell *cell,
vtkIdType cellId,
00079
double tol2,
int& subId,
double pcoords[3],
00080
double *weights);
00081
int GetCellType(
vtkIdType cellId);
00082 void GetCellPoints(
vtkIdType cellId,
vtkIdList *ptIds)
00083 {
vtkStructuredData::GetCellPoints(cellId,ptIds,this->DataDescription,
00084 this->GetDimensions());}
00085 void GetPointCells(
vtkIdType ptId,
vtkIdList *cellIds)
00086 {
vtkStructuredData::GetPointCells(ptId,cellIds,this->GetDimensions());}
00087
void ComputeBounds();
00088 int GetMaxCellSize() {
return 8;};
00090
00092
void SetDimensions(
int i,
int j,
int k);
00093
00095
void SetDimensions(
int dims[3]);
00096
00098
00100
int *GetDimensions();
00101
void GetDimensions(
int dims[3]);
00103
00109
int ComputeStructuredCoordinates(
double x[3],
int ijk[3],
double pcoords[3]);
00110
00119
void GetVoxelGradient(
int i,
int j,
int k,
vtkDataArray *s,
vtkDataArray *g);
00120
00126
void GetPointGradient(
int i,
int j,
int k,
vtkDataArray *s,
double g[3]);
00127
00129
int GetDataDimension();
00130
00132
00134 vtkIdType ComputePointId(
int ijk[3]) {
00135
return vtkStructuredData::ComputePointId(this->GetDimensions(),ijk);};
00137
00139
00141 vtkIdType ComputeCellId(
int ijk[3]) {
00142
return vtkStructuredData::ComputeCellId(this->GetDimensions(),ijk);};
00144
00146
00147
void SetAxisUpdateExtent(
int axis,
int min,
int max);
00148
void GetAxisUpdateExtent(
int axis,
int &min,
int &max);
00150
00152
00155
void SetUpdateExtent(
int piece,
int numPieces,
int ghostLevel);
00156 void SetUpdateExtent(
int piece,
int numPieces)
00157 {this->
SetUpdateExtent(piece, numPieces, 0);}
00159
00161
00162 void SetUpdateExtent(
int x1,
int x2,
int y1,
int y2,
int z1,
int z2 )
00163 { this->
vtkDataSet::SetUpdateExtent( x1, x2, y1, y2, z1, z2 ); };
00164 void SetUpdateExtent(
int ext[6] )
00165 { this->
vtkDataSet::SetUpdateExtent( ext ); };
00167
00169
00172
void SetExtent(
int extent[6]);
00173
void SetExtent(
int x1,
int x2,
int y1,
int y2,
int z1,
int z2);
00174 vtkGetVector6Macro(Extent,
int);
00176
00181
virtual unsigned long GetEstimatedMemorySize();
00182
00184
00186
double GetScalarTypeMin();
00187
double GetScalarTypeMax();
00189
00191
int GetScalarSize();
00192
00194
00197
int *GetIncrements();
00198
void GetIncrements(
int &incX,
int &incY,
int &incZ);
00199
void GetIncrements(
int inc[3]);
00201
00211
void GetContinuousIncrements(
int extent[6],
int &incX,
int &incY,
int &incZ);
00212
00214
00215
void *GetScalarPointerForExtent(
int extent[6]);
00216
void *GetScalarPointer(
int coordinates[3]);
00217
void *GetScalarPointer(
int x,
int y,
int z);
00218
void *GetScalarPointer();
00220
00222
00223
double GetScalarComponentAsDouble(
int x,
int y,
int z,
int component);
00224
void SetScalarComponentFromDouble(
int x,
int y,
int z,
int component,
double v);
00226
00228
void AllocateScalars();
00229
00231
00235
void CopyAndCastFrom(vtkImageData *inData,
int extent[6]);
00236 void CopyAndCastFrom(vtkImageData *inData,
int x0,
int x1,
00237
int y0,
int y1,
int z0,
int z1)
00238 {
int e[6]; e[0]=x0; e[1]=x1; e[2]=y0; e[3]=y1; e[4]=z0; e[5]=z1;
00239 this->CopyAndCastFrom(inData, e);}
00241
00245
virtual void Crop();
00246
00252
unsigned long GetActualMemorySize();
00253
00255
00257 vtkSetVector3Macro(Spacing,
double);
00258 vtkGetVector3Macro(Spacing,
double);
00260
00262
00264 vtkSetVector3Macro(Origin,
double);
00265 vtkGetVector3Macro(Origin,
double);
00267
00269
00270 void SetScalarTypeToFloat(){this->SetScalarType(
VTK_FLOAT);};
00271 void SetScalarTypeToDouble(){this->SetScalarType(
VTK_DOUBLE);};
00272 void SetScalarTypeToInt(){this->SetScalarType(
VTK_INT);};
00273 void SetScalarTypeToUnsignedInt()
00274 {this->SetScalarType(
VTK_UNSIGNED_INT);};
00275 void SetScalarTypeToLong(){this->SetScalarType(
VTK_LONG);};
00276 void SetScalarTypeToUnsignedLong()
00277 {this->SetScalarType(
VTK_UNSIGNED_LONG);};
00278 void SetScalarTypeToShort(){this->SetScalarType(
VTK_SHORT);};
00279 void SetScalarTypeToUnsignedShort()
00280 {this->SetScalarType(
VTK_UNSIGNED_SHORT);};
00281 void SetScalarTypeToUnsignedChar()
00282 {this->SetScalarType(
VTK_UNSIGNED_CHAR);};
00283 void SetScalarTypeToChar()
00284 {this->SetScalarType(
VTK_CHAR);};
00285 vtkSetMacro(ScalarType,
int);
00286
int GetScalarType();
00287 const char* GetScalarTypeAsString() {
return vtkImageScalarTypeNameMacro ( this->GetScalarType() ); };
00289
00291
00292
void SetNumberOfScalarComponents(
int n );
00293 vtkGetMacro(NumberOfScalarComponents,
int);
00295
00296
00297
void CopyTypeSpecificInformation(
vtkDataObject *image );
00298
00302
virtual void PrepareForNewData();
00303
00305
00306
void ShallowCopy(
vtkDataObject *src);
00307
void DeepCopy(
vtkDataObject *src);
00309
00310
00311
00312
00313
00314
00316
00319
void *GetArrayPointerForExtent(
vtkDataArray* array,
int extent[6]);
00320
void *GetArrayPointer(
vtkDataArray* array,
int coordinates[3]);
00322
00325
void GetArrayIncrements(
vtkDataArray *array,
int increments[3]);
00326
00331
void ComputeInternalExtent(
int *intExt,
int *tgtExt,
int *bnds);
00332
00334 int GetExtentType() {
return VTK_3D_EXTENT; };
00335
00336
protected:
00337 vtkImageData();
00338 ~vtkImageData();
00339
00340
00341 vtkVertex *Vertex;
00342 vtkLine *Line;
00343 vtkPixel *Pixel;
00344 vtkVoxel *Voxel;
00345
00346
00347
00348
00349 int Dimensions[3];
00350 int DataDescription;
00351 int Increments[3];
00352
00353 double Origin[3];
00354 double Spacing[3];
00355 int ScalarType;
00356 int NumberOfScalarComponents;
00357
00358
void ComputeIncrements();
00359
00360
private:
00361
void InternalImageDataCopy(vtkImageData *src);
00362
private:
00363 vtkImageData(
const vtkImageData&);
00364
void operator=(
const vtkImageData&);
00365 };
00366
00367
00368 inline void vtkImageData::GetPoint(
vtkIdType id,
double x[3])
00369 {
00370
double *p=this->
GetPoint(
id);
00371 x[0] = p[0]; x[1] = p[1]; x[2] = p[2];
00372 }
00373
00374
00375
00376 inline vtkIdType vtkImageData::GetNumberOfPoints()
00377 {
00378
int *dims = this->
GetDimensions();
00379
return dims[0]*dims[1]*dims[2];
00380 }
00381
00382 inline int vtkImageData::GetDataDimension()
00383 {
00384
return vtkStructuredData::GetDataDimension(this->DataDescription);
00385 }
00386
00387
#endif
00388
00389
00390