VTK
/Users/kitware/Dashboards/MyTests/VTK_BLD_Release_docs/Utilities/Doxygen/dox/Filters/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 "vtkFiltersHybridModule.h" // For export macro
00041 #include "vtkWarpTransform.h"
00042 
00043 class vtkAlgorithmOutput;
00044 class vtkBSplineTransformConnectionHolder;
00045 class vtkImageData;
00046 
00047 #define VTK_BSPLINE_EDGE 0
00048 #define VTK_BSPLINE_ZERO 1
00049 #define VTK_BSPLINE_ZERO_AT_BORDER 2
00050 
00051 class VTKFILTERSHYBRID_EXPORT vtkBSplineTransform : public vtkWarpTransform
00052 {
00053 public:
00054   static vtkBSplineTransform *New();
00055   vtkTypeMacro(vtkBSplineTransform,vtkWarpTransform);
00056   virtual void PrintSelf(ostream& os, vtkIndent indent);
00057 
00059 
00063   virtual void SetCoefficientConnection(vtkAlgorithmOutput*);
00064   virtual void SetCoefficientData(vtkImageData*);
00065   virtual vtkImageData* GetCoefficientData();
00067 
00069 
00070   vtkSetMacro(DisplacementScale, double);
00071   vtkGetMacro(DisplacementScale, double);
00073 
00075 
00083   vtkSetClampMacro(BorderMode, int,
00084     VTK_BSPLINE_EDGE, VTK_BSPLINE_ZERO_AT_BORDER);
00085   void SetBorderModeToEdge() {
00086     this->SetBorderMode(VTK_BSPLINE_EDGE); }
00087   void SetBorderModeToZero() {
00088     this->SetBorderMode(VTK_BSPLINE_ZERO); }
00089   void SetBorderModeToZeroAtBorder() {
00090     this->SetBorderMode(VTK_BSPLINE_ZERO_AT_BORDER); }
00091   vtkGetMacro(BorderMode, int);
00092   const char *GetBorderModeAsString();
00094 
00096   vtkAbstractTransform *MakeTransform();
00097 
00099   unsigned long GetMTime();
00100 
00101 protected:
00102   vtkBSplineTransform();
00103   ~vtkBSplineTransform();
00104 
00106   void InternalUpdate();
00107 
00109   void InternalDeepCopy(vtkAbstractTransform *transform);
00110 
00112 
00113   void ForwardTransformPoint(const float in[3], float out[3]);
00114   void ForwardTransformPoint(const double in[3], double out[3]);
00116 
00117   void ForwardTransformDerivative(const float in[3], float out[3],
00118                                   float derivative[3][3]);
00119   void ForwardTransformDerivative(const double in[3], double out[3],
00120                                   double derivative[3][3]);
00121 
00122   void InverseTransformPoint(const float in[3], float out[3]);
00123   void InverseTransformPoint(const double in[3], double out[3]);
00124 
00125   void InverseTransformDerivative(const float in[3], float out[3],
00126                                   float derivative[3][3]);
00127   void InverseTransformDerivative(const double in[3], double out[3],
00128                                   double derivative[3][3]);
00129 
00130 //BTX
00131   void (*CalculateSpline)(const double point[3], double displacement[3],
00132                           double derivatives[3][3],
00133                           void *gridPtr, int inExt[6], vtkIdType inInc[3],
00134                           int borderMode);
00135 //ETX
00136 
00137   double DisplacementScale;
00138   int BorderMode;
00139 
00140   void *GridPointer;
00141   double GridSpacing[3];
00142   double GridOrigin[3];
00143   int GridExtent[6];
00144   vtkIdType GridIncrements[3];
00145 
00146 private:
00147   vtkBSplineTransform(const vtkBSplineTransform&);  // Not implemented.
00148   void operator=(const vtkBSplineTransform&);  // Not implemented.
00149 
00150   vtkBSplineTransformConnectionHolder* ConnectionHolder;
00151 };
00152 
00153 #endif