VTK
dox/Hybrid/vtkBSplineTransform.h
Go to the documentation of this file.
00001 /*=========================================================================
00002 
00003   Program:   Visualization Toolkit
00004   Module:    $RCSfile: vtkBSplineTransform.h,v $
00005 
00006   Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
00007   All rights reserved.
00008   See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
00009 
00010      This software is distributed WITHOUT ANY WARRANTY; without even
00011      the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
00012      PURPOSE.  See the above copyright notice for more information.
00013 
00014 =========================================================================*/
00037 #ifndef __vtkBSplineTransform_h
00038 #define __vtkBSplineTransform_h
00039 
00040 #include "vtkWarpTransform.h"
00041 
00042 class vtkImageData;
00043 
00044 #define VTK_BSPLINE_EDGE 0
00045 #define VTK_BSPLINE_ZERO 1
00046 #define VTK_BSPLINE_ZERO_AT_BORDER 2
00047 
00048 class VTK_HYBRID_EXPORT vtkBSplineTransform : public vtkWarpTransform
00049 {
00050 public:
00051   static vtkBSplineTransform *New();
00052   vtkTypeMacro(vtkBSplineTransform,vtkWarpTransform);
00053   virtual void PrintSelf(ostream& os, vtkIndent indent);
00054 
00056 
00058   virtual void SetCoefficients(vtkImageData*);
00059   vtkGetObjectMacro(Coefficients,vtkImageData);
00061 
00063 
00064   vtkSetMacro(DisplacementScale,double);
00066 
00068 
00076   vtkSetClampMacro(BorderMode, int,
00077     VTK_BSPLINE_EDGE, VTK_BSPLINE_ZERO_AT_BORDER);
00078   void SetBorderModeToEdge() {
00079     this->SetBorderMode(VTK_BSPLINE_EDGE); }
00080   void SetBorderModeToZero() {
00081     this->SetBorderMode(VTK_BSPLINE_ZERO); }
00082   void SetBorderModeToZeroAtBorder() {
00083     this->SetBorderMode(VTK_BSPLINE_ZERO_AT_BORDER); }
00084   vtkGetMacro(BorderMode, int);
00085   const char *GetBorderModeAsString();
00087 
00089   vtkAbstractTransform *MakeTransform();
00090 
00092   unsigned long GetMTime();
00093 
00094 protected:
00095   vtkBSplineTransform();
00096   ~vtkBSplineTransform();
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 //BTX
00124   void (*CalculateSpline)(const double point[3], double displacement[3],
00125                           double derivatives[3][3],
00126                           void *gridPtr, int inExt[6], vtkIdType inInc[3],
00127                           int borderMode);
00128 //ETX
00129 
00130   vtkImageData *Coefficients;
00131   double DisplacementScale;
00132   int BorderMode;
00133 
00134   void *GridPointer;
00135   double GridSpacing[3];
00136   double GridOrigin[3];
00137   int GridExtent[6];
00138   vtkIdType GridIncrements[3];
00139 
00140 private:
00141   vtkBSplineTransform(const vtkBSplineTransform&);  // Not implemented.
00142   void operator=(const vtkBSplineTransform&);  // Not implemented.
00143 };
00144 
00145 #endif