00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00034
#ifndef __vtkGridTransform_h
00035
#define __vtkGridTransform_h
00036
00037
#include "vtkWarpTransform.h"
00038
00039
class vtkImageData;
00040
00041 #define VTK_GRID_NEAREST 0
00042 #define VTK_GRID_LINEAR 1
00043 #define VTK_GRID_CUBIC 3
00044
00045 class VTK_HYBRID_EXPORT vtkGridTransform :
public vtkWarpTransform
00046 {
00047
public:
00048
static vtkGridTransform *
New();
00049 vtkTypeRevisionMacro(vtkGridTransform,
vtkWarpTransform);
00050
virtual void PrintSelf(ostream& os,
vtkIndent indent);
00051
00053
00056
virtual void SetDisplacementGrid(
vtkImageData*);
00057 vtkGetObjectMacro(DisplacementGrid,
vtkImageData);
00059
00061
00063 vtkSetMacro(DisplacementScale,
float);
00064 vtkGetMacro(DisplacementScale,
float);
00066
00068
00070 vtkSetMacro(DisplacementShift,
float);
00071 vtkGetMacro(DisplacementShift,
float);
00073
00075
00077
void SetInterpolationMode(
int mode);
00078 vtkGetMacro(InterpolationMode,
int);
00079 void SetInterpolationModeToNearestNeighbor()
00080 { this->SetInterpolationMode(
VTK_GRID_NEAREST); };
00081 void SetInterpolationModeToLinear()
00082 { this->SetInterpolationMode(
VTK_GRID_LINEAR); };
00083 void SetInterpolationModeToCubic()
00084 { this->SetInterpolationMode(
VTK_GRID_CUBIC); };
00085
const char *GetInterpolationModeAsString();
00087
00089
vtkAbstractTransform *
MakeTransform();
00090
00092
unsigned long GetMTime();
00093
00094
protected:
00095 vtkGridTransform();
00096 ~vtkGridTransform();
00097
00099
void InternalUpdate();
00100
00102
void InternalDeepCopy(
vtkAbstractTransform *transform);
00103
00105
00106
void ForwardTransformPoint(
const float in[3],
float out[3]);
00107
void ForwardTransformPoint(
const double in[3],
double out[3]);
00109
00110
void ForwardTransformDerivative(
const float in[3],
float out[3],
00111
float derivative[3][3]);
00112
void ForwardTransformDerivative(
const double in[3],
double out[3],
00113
double derivative[3][3]);
00114
00115
void InverseTransformPoint(
const float in[3],
float out[3]);
00116
void InverseTransformPoint(
const double in[3],
double out[3]);
00117
00118
void InverseTransformDerivative(
const float in[3],
float out[3],
00119
float derivative[3][3]);
00120
void InverseTransformDerivative(
const double in[3],
double out[3],
00121
double derivative[3][3]);
00122
00123
00124 void (*InterpolationFunction)(
float point[3],
float displacement[3],
00125
float derivatives[3][3],
00126
void *gridPtr,
int gridType,
00127
int inExt[6],
int inInc[3]);
00128
00129 int InterpolationMode;
00130 vtkImageData *DisplacementGrid;
00131 float DisplacementScale;
00132 float DisplacementShift;
00133
private:
00134 vtkGridTransform(
const vtkGridTransform&);
00135
void operator=(
const vtkGridTransform&);
00136 };
00137
00138
00139
00140
00141 inline const char *
vtkGridTransform::GetInterpolationModeAsString()
00142 {
00143
switch (this->
InterpolationMode)
00144 {
00145
case VTK_GRID_NEAREST:
00146
return "NearestNeighbor";
00147
case VTK_GRID_LINEAR:
00148
return "Linear";
00149
case VTK_GRID_CUBIC:
00150
return "Cubic";
00151
default:
00152
return "";
00153 }
00154 }
00155
00156
00157
#endif
00158
00159
00160
00161
00162