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); 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