VTK
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);
00072 
00074 
00082   vtkSetClampMacro(BorderMode, int,
00083     VTK_BSPLINE_EDGE, VTK_BSPLINE_ZERO_AT_BORDER);
00084   void SetBorderModeToEdge() {
00085     this->SetBorderMode(VTK_BSPLINE_EDGE); }
00086   void SetBorderModeToZero() {
00087     this->SetBorderMode(VTK_BSPLINE_ZERO); }
00088   void SetBorderModeToZeroAtBorder() {
00089     this->SetBorderMode(VTK_BSPLINE_ZERO_AT_BORDER); }
00090   vtkGetMacro(BorderMode, int);
00091   const char *GetBorderModeAsString();
00093 
00095   vtkAbstractTransform *MakeTransform();
00096 
00098   unsigned long GetMTime();
00099 
00100 protected:
00101   vtkBSplineTransform();
00102   ~vtkBSplineTransform();
00103 
00105   void InternalUpdate();
00106 
00108   void InternalDeepCopy(vtkAbstractTransform *transform);
00109 
00111 
00112   void ForwardTransformPoint(const float in[3], float out[3]);
00113   void ForwardTransformPoint(const double in[3], double out[3]);
00115 
00116   void ForwardTransformDerivative(const float in[3], float out[3],
00117                                   float derivative[3][3]);
00118   void ForwardTransformDerivative(const double in[3], double out[3],
00119                                   double derivative[3][3]);
00120 
00121   void InverseTransformPoint(const float in[3], float out[3]);
00122   void InverseTransformPoint(const double in[3], double out[3]);
00123 
00124   void InverseTransformDerivative(const float in[3], float out[3],
00125                                   float derivative[3][3]);
00126   void InverseTransformDerivative(const double in[3], double out[3],
00127                                   double derivative[3][3]);
00128 
00129 //BTX
00130   void (*CalculateSpline)(const double point[3], double displacement[3],
00131                           double derivatives[3][3],
00132                           void *gridPtr, int inExt[6], vtkIdType inInc[3],
00133                           int borderMode);
00134 //ETX
00135 
00136   double DisplacementScale;
00137   int BorderMode;
00138 
00139   void *GridPointer;
00140   double GridSpacing[3];
00141   double GridOrigin[3];
00142   int GridExtent[6];
00143   vtkIdType GridIncrements[3];
00144 
00145 private:
00146   vtkBSplineTransform(const vtkBSplineTransform&);  // Not implemented.
00147   void operator=(const vtkBSplineTransform&);  // Not implemented.
00148 
00149   vtkBSplineTransformConnectionHolder* ConnectionHolder;
00150 };
00151 
00152 #endif