00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00054
#ifndef __vtkImageReslice_h
00055
#define __vtkImageReslice_h
00056
00057
00058
#include "vtkImageToImageFilter.h"
00059
00060
00061 #define VTK_RESLICE_NEAREST 0
00062 #define VTK_RESLICE_LINEAR 1
00063 #define VTK_RESLICE_CUBIC 3
00064
00065
class vtkImageData;
00066
class vtkAbstractTransform;
00067
class vtkMatrix4x4;
00068
class vtkImageStencilData;
00069
00070 class VTK_IMAGING_EXPORT vtkImageReslice :
public vtkImageToImageFilter
00071 {
00072
public:
00073
static vtkImageReslice *
New();
00074 vtkTypeRevisionMacro(vtkImageReslice,
vtkImageToImageFilter);
00075
00076
virtual void PrintSelf(ostream& os,
vtkIndent indent);
00077
00079
00091
virtual void SetResliceAxes(
vtkMatrix4x4*);
00092 vtkGetObjectMacro(ResliceAxes,
vtkMatrix4x4);
00094
00096
00100
void SetResliceAxesDirectionCosines(
double x0,
double x1,
double x2,
00101
double y0,
double y1,
double y2,
00102
double z0,
double z1,
double z2);
00103 void SetResliceAxesDirectionCosines(
const double x[3],
00104
const double y[3],
00105
const double z[3]) {
00106 this->SetResliceAxesDirectionCosines(x[0], x[1], x[2],
00107 y[0], y[1], y[2],
00108 z[0], z[1], z[2]); };
00109 void SetResliceAxesDirectionCosines(
const double xyz[9]) {
00110 this->SetResliceAxesDirectionCosines(xyz[0], xyz[1], xyz[2],
00111 xyz[3], xyz[4], xyz[5],
00112 xyz[6], xyz[7], xyz[8]); };
00113
void GetResliceAxesDirectionCosines(
double x[3],
double y[3],
double z[3]);
00114 void GetResliceAxesDirectionCosines(
double xyz[9]) {
00115 this->GetResliceAxesDirectionCosines(&xyz[0], &xyz[3], &xyz[6]); };
00116 double *GetResliceAxesDirectionCosines() {
00117 this->GetResliceAxesDirectionCosines(this->ResliceAxesDirectionCosines);
00118
return this->ResliceAxesDirectionCosines; };
00120
00122
00125
void SetResliceAxesOrigin(
double x,
double y,
double z);
00126 void SetResliceAxesOrigin(
const double xyz[3]) {
00127 this->SetResliceAxesOrigin(xyz[0], xyz[1], xyz[2]); };
00128
void GetResliceAxesOrigin(
double xyz[3]);
00129 double *GetResliceAxesOrigin() {
00130 this->GetResliceAxesOrigin(this->ResliceAxesOrigin);
00131
return this->ResliceAxesOrigin; };
00133
00135
00142
virtual void SetResliceTransform(
vtkAbstractTransform*);
00143 vtkGetObjectMacro(ResliceTransform,
vtkAbstractTransform);
00145
00147
00153
virtual void SetInformationInput(
vtkImageData*);
00154 vtkGetObjectMacro(InformationInput,
vtkImageData);
00156
00158
00162 vtkSetMacro(TransformInputSampling,
int);
00163 vtkBooleanMacro(TransformInputSampling,
int);
00164 vtkGetMacro(TransformInputSampling,
int);
00166
00168
00170 vtkSetMacro(AutoCropOutput,
int);
00171 vtkBooleanMacro(AutoCropOutput,
int);
00172 vtkGetMacro(AutoCropOutput,
int);
00174
00176
00177 vtkSetMacro(Wrap,
int);
00178 vtkGetMacro(Wrap,
int);
00179 vtkBooleanMacro(Wrap,
int);
00181
00183
00185 vtkSetMacro(Mirror,
int);
00186 vtkGetMacro(Mirror,
int);
00187 vtkBooleanMacro(Mirror,
int);
00189
00191
00192 vtkSetMacro(InterpolationMode,
int);
00193 vtkGetMacro(InterpolationMode,
int);
00194 void SetInterpolationModeToNearestNeighbor() {
00195 this->SetInterpolationMode(
VTK_RESLICE_NEAREST); };
00196 void SetInterpolationModeToLinear() {
00197 this->SetInterpolationMode(
VTK_RESLICE_LINEAR); };
00198 void SetInterpolationModeToCubic() {
00199 this->SetInterpolationMode(
VTK_RESLICE_CUBIC); };
00200
const char *GetInterpolationModeAsString();
00202
00204
00206 vtkSetMacro(Optimization,
int);
00207 vtkGetMacro(Optimization,
int);
00208 vtkBooleanMacro(Optimization,
int);
00210
00212
00213 vtkSetVector4Macro(BackgroundColor,
double);
00214 vtkGetVector4Macro(BackgroundColor,
double);
00216
00218
00219 void SetBackgroundLevel(
double v) { this->SetBackgroundColor(v,v,v,v); };
00220 double GetBackgroundLevel() {
return this->GetBackgroundColor()[0]; };
00222
00224
00226 vtkSetVector3Macro(OutputSpacing,
double);
00227 vtkGetVector3Macro(OutputSpacing,
double);
00228 void SetOutputSpacingToDefault() {
00229 this->SetOutputSpacing(
VTK_DOUBLE_MAX,
VTK_DOUBLE_MAX,
VTK_DOUBLE_MAX); };
00231
00233
00235 vtkSetVector3Macro(OutputOrigin,
double);
00236 vtkGetVector3Macro(OutputOrigin,
double);
00237 void SetOutputOriginToDefault() {
00238 this->SetOutputOrigin(
VTK_DOUBLE_MAX,
VTK_DOUBLE_MAX,
VTK_DOUBLE_MAX); };
00240
00242
00244 vtkSetVector6Macro(OutputExtent,
int);
00245 vtkGetVector6Macro(OutputExtent,
int);
00246 void SetOutputExtentToDefault() {
00247 this->SetOutputExtent(
VTK_INT_MIN,
VTK_INT_MAX,
00248
VTK_INT_MIN,
VTK_INT_MAX,
00249
VTK_INT_MIN,
VTK_INT_MAX); };
00251
00253
00259 vtkSetMacro(OutputDimensionality,
int);
00260 vtkGetMacro(OutputDimensionality,
int);
00262
00265
unsigned long int GetMTime();
00266
00268
00273 void SetInterpolate(
int t) {
00274
if (t && !this->GetInterpolate()) {
00275 this->SetInterpolationModeToLinear(); }
00276
else if (!t && this->GetInterpolate()) {
00277 this->SetInterpolationModeToNearestNeighbor(); } };
00278 void InterpolateOn() {
00279 this->SetInterpolate(1); };
00280 void InterpolateOff() {
00281 this->SetInterpolate(0); };
00282 int GetInterpolate() {
00283
return (this->GetInterpolationMode() !=
VTK_RESLICE_NEAREST); };
00285
00287
00290
void SetStencil(
vtkImageStencilData *stencil);
00291
vtkImageStencilData *GetStencil();
00293
00294
protected:
00295 vtkImageReslice();
00296 ~vtkImageReslice();
00297
00298 vtkMatrix4x4 *ResliceAxes;
00299 double ResliceAxesDirectionCosines[9];
00300 double ResliceAxesOrigin[3];
00301 vtkAbstractTransform *ResliceTransform;
00302 vtkImageData *InformationInput;
00303 int Wrap;
00304 int Mirror;
00305 int InterpolationMode;
00306 int Optimization;
00307 double BackgroundColor[4];
00308 double OutputOrigin[3];
00309 double OutputSpacing[3];
00310 int OutputExtent[6];
00311 int OutputDimensionality;
00312 int TransformInputSampling;
00313 int AutoCropOutput;
00314
00315 vtkMatrix4x4 *IndexMatrix;
00316 vtkAbstractTransform *OptimizedTransform;
00317
00318
void GetAutoCroppedOutputBounds(
vtkImageData *input,
double bounds[6]);
00319
void ExecuteInformation(
vtkImageData *input,
vtkImageData *output);
00320
void ExecuteInformation();
00321
void ComputeInputUpdateExtents(
vtkDataObject *output);
00322
void ComputeInputUpdateExtent(
int inExt[6],
int outExt[6]);
00323
void ThreadedExecute(
vtkImageData *inData,
vtkImageData *outData,
00324
int ext[6],
int id);
00325
00326
vtkMatrix4x4 *GetIndexMatrix();
00327 vtkAbstractTransform *GetOptimizedTransform() {
00328
return this->OptimizedTransform; };
00329
void OptimizedComputeInputUpdateExtent(
int inExt[6],
int outExt[6]);
00330
void OptimizedThreadedExecute(
vtkImageData *inData,
vtkImageData *outData,
00331
int ext[6],
int id);
00332
private:
00333 vtkImageReslice(
const vtkImageReslice&);
00334
void operator=(
const vtkImageReslice&);
00335 };
00336
00337
00338 inline const char *
vtkImageReslice::GetInterpolationModeAsString()
00339 {
00340
switch (this->
InterpolationMode)
00341 {
00342
case VTK_RESLICE_NEAREST:
00343
return "NearestNeighbor";
00344
case VTK_RESLICE_LINEAR:
00345
return "Linear";
00346
case VTK_RESLICE_CUBIC:
00347
return "Cubic";
00348
default:
00349
return "";
00350 }
00351 }
00352
00353
#endif
00354
00355
00356
00357
00358