VTK
|
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