Cloned library of VTK-5.0.0 with extra build files for internal package management.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

164 lines
5.1 KiB

/*=========================================================================
Program: Visualization Toolkit
Module: $RCSfile: vtkGridTransform.h,v $
Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
All rights reserved.
See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
This software is distributed WITHOUT ANY WARRANTY; without even
the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
PURPOSE. See the above copyright notice for more information.
=========================================================================*/
// .NAME vtkGridTransform - a nonlinear warp transformation
// .SECTION Description
// vtkGridTransform describes a nonlinear warp transformation as a set
// of displacement vectors sampled along a uniform 3D grid.
// .SECTION Caveats
// The inverse grid transform is calculated using an iterative method,
// and is several times more expensive than the forward transform.
// .SECTION see also
// vtkThinPlateSplineTransform vtkGeneralTransform vtkTransformToGrid
#ifndef __vtkGridTransform_h
#define __vtkGridTransform_h
#include "vtkWarpTransform.h"
class vtkImageData;
#define VTK_GRID_NEAREST 0
#define VTK_GRID_LINEAR 1
#define VTK_GRID_CUBIC 3
class VTK_HYBRID_EXPORT vtkGridTransform : public vtkWarpTransform
{
public:
static vtkGridTransform *New();
vtkTypeRevisionMacro(vtkGridTransform,vtkWarpTransform);
virtual void PrintSelf(ostream& os, vtkIndent indent);
// Description:
// Set/Get the grid transform (the grid transform must have three
// components for displacement in x, y, and z respectively).
// The vtkGridTransform class will never modify the data.
virtual void SetDisplacementGrid(vtkImageData*);
vtkGetObjectMacro(DisplacementGrid,vtkImageData);
// Description:
// Set scale factor to be applied to the displacements.
// This is used primarily for grids which contain integer
// data types. Default: 1
vtkSetMacro(DisplacementScale,double);
vtkGetMacro(DisplacementScale,double);
// Description:
// Set a shift to be applied to the displacements. The shift
// is applied after the scale, i.e. x = scale*y + shift.
// Default: 0
vtkSetMacro(DisplacementShift,double);
vtkGetMacro(DisplacementShift,double);
// Description:
// Set interpolation mode for sampling the grid. Higher-order
// interpolation allows you to use a sparser grid.
// Default: Linear.
void SetInterpolationMode(int mode);
vtkGetMacro(InterpolationMode,int);
void SetInterpolationModeToNearestNeighbor()
{ this->SetInterpolationMode(VTK_GRID_NEAREST); };
void SetInterpolationModeToLinear()
{ this->SetInterpolationMode(VTK_GRID_LINEAR); };
void SetInterpolationModeToCubic()
{ this->SetInterpolationMode(VTK_GRID_CUBIC); };
const char *GetInterpolationModeAsString();
// Description:
// Make another transform of the same type.
vtkAbstractTransform *MakeTransform();
// Description:
// Get the MTime.
unsigned long GetMTime();
protected:
vtkGridTransform();
~vtkGridTransform();
// Description:
// Update the displacement grid.
void InternalUpdate();
// Description:
// Copy this transform from another of the same type.
void InternalDeepCopy(vtkAbstractTransform *transform);
// Description:
// Internal functions for calculating the transformation.
void ForwardTransformPoint(const float in[3], float out[3]);
void ForwardTransformPoint(const double in[3], double out[3]);
void ForwardTransformDerivative(const float in[3], float out[3],
float derivative[3][3]);
void ForwardTransformDerivative(const double in[3], double out[3],
double derivative[3][3]);
void InverseTransformPoint(const float in[3], float out[3]);
void InverseTransformPoint(const double in[3], double out[3]);
void InverseTransformDerivative(const float in[3], float out[3],
float derivative[3][3]);
void InverseTransformDerivative(const double in[3], double out[3],
double derivative[3][3]);
//BTX
void (*InterpolationFunction)(double point[3], double displacement[3],
double derivatives[3][3],
void *gridPtr, int gridType,
int inExt[6], vtkIdType inInc[3]);
//ETX
int InterpolationMode;
vtkImageData *DisplacementGrid;
double DisplacementScale;
double DisplacementShift;
void *GridPointer;
int GridScalarType;
double GridSpacing[3];
double GridOrigin[3];
int GridExtent[6];
vtkIdType GridIncrements[3];
private:
vtkGridTransform(const vtkGridTransform&); // Not implemented.
void operator=(const vtkGridTransform&); // Not implemented.
};
//BTX
//----------------------------------------------------------------------------
inline const char *vtkGridTransform::GetInterpolationModeAsString()
{
switch (this->InterpolationMode)
{
case VTK_GRID_NEAREST:
return "NearestNeighbor";
case VTK_GRID_LINEAR:
return "Linear";
case VTK_GRID_CUBIC:
return "Cubic";
default:
return "";
}
}
//ETX
#endif