00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012 
00013 
00014 
00015 
00016 
00017 
00018 
00019 
00020 
00021 
00022 
00023 
00024 
00025 
00026 
00027 
00028 
00029 
00030 
00031 
00032 
00033 
00034 
00035 
00036 
00037 
00038 
00052 #ifndef __vtkWarpTransform_h
00053 #define __vtkWarpTransform_h
00054 
00055 #include "vtkAbstractTransform.h"
00056 
00057 class VTK_EXPORT vtkWarpTransform : public vtkAbstractTransform
00058 {
00059 public:
00060 
00061   vtkTypeMacro(vtkWarpTransform,vtkAbstractTransform);
00062   void PrintSelf(ostream& os, vtkIndent indent);
00063 
00068   void Inverse();
00069 
00071   vtkSetMacro(InverseTolerance,double);
00072   vtkGetMacro(InverseTolerance,double);
00073 
00078   vtkSetMacro(InverseIterations,int);
00079   vtkGetMacro(InverseIterations,int);
00080 
00083   void InternalTransformPoint(const float in[3], float out[3]);
00084   void InternalTransformPoint(const double in[3], double out[3]);
00085 
00088   void InternalTransformDerivative(const float in[3], float out[3],
00089                float derivative[3][3]);
00090   void InternalTransformDerivative(const double in[3], double out[3],
00091                double derivative[3][3]);
00092 
00093   
00098   void TemplateTransformPoint(const float in[3], float out[3]) {
00099     this->ForwardTransformPoint(in,out); }; 
00100   void TemplateTransformPoint(const double in[3], double out[3]) {
00101     this->ForwardTransformPoint(in,out); }; 
00102   void TemplateTransformPoint(const float in[3], float out[3],
00103                float derivative[3][3]) {
00104     this->ForwardTransformDerivative(in,out,derivative); }; 
00105   void TemplateTransformPoint(const double in[3], double out[3],
00106                double derivative[3][3]) {
00107     this->ForwardTransformDerivative(in,out,derivative); }; 
00108   void TemplateTransformInverse(const float in[3], float out[3]) {
00109     this->InverseTransformPoint(in,out); }; 
00110   void TemplateTransformInverse(const double in[3], double out[3]) {
00111     this->InverseTransformPoint(in,out); }; 
00112   void TemplateTransformInverse(const float in[3], float out[3],
00113             float derivative[3][3]) {
00114     this->InverseTransformDerivative(in,out,derivative); }; 
00115   void TemplateTransformInverse(const double in[3], double out[3],
00116             double derivative[3][3]) {
00117     this->InverseTransformDerivative(in,out,derivative); }; 
00118   
00119 
00120 protected:
00121   vtkWarpTransform();
00122   ~vtkWarpTransform();
00123   vtkWarpTransform(const vtkWarpTransform&) {};
00124   void operator=(const vtkWarpTransform&) {};
00125 
00128   virtual void ForwardTransformPoint(const float in[3], float out[3]) = 0;
00129   virtual void ForwardTransformPoint(const double in[3], double out[3]) = 0;
00130 
00132   virtual void ForwardTransformDerivative(const float in[3], float out[3],
00133                  float derivative[3][3]) = 0;
00134   virtual void ForwardTransformDerivative(const double in[3], double out[3],
00135                  double derivative[3][3]) = 0;
00136 
00140   virtual void InverseTransformPoint(const float in[3], float out[3]);
00141   virtual void InverseTransformPoint(const double in[3], double out[3]);
00142 
00146   virtual void InverseTransformDerivative(const float in[3], float out[3],
00147                  float derivative[3][3]);
00148   virtual void InverseTransformDerivative(const double in[3], double out[3],
00149                  double derivative[3][3]);
00150 
00151   int InverseFlag;
00152   int InverseIterations;
00153   double InverseTolerance;
00154 };
00155 
00156 #endif
00157 
00158 
00159 
00160 
00161