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