Main Page   Class Hierarchy   Alphabetical List   Compound List   File List   Compound Members   File Members   Related Pages  

Hybrid/vtkThinPlateSplineTransform.h

Go to the documentation of this file.
00001 /*=========================================================================
00002 
00003   Program:   Visualization Toolkit
00004   Module:    $RCSfile: vtkThinPlateSplineTransform.h,v $
00005   Language:  C++
00006 
00007 Copyright (c) 1993-2001 Ken Martin, Will Schroeder, Bill Lorensen 
00008 All rights reserved.
00009 
00010 Redistribution and use in source and binary forms, with or without
00011 modification, are permitted provided that the following conditions are met:
00012 
00013  * Redistributions of source code must retain the above copyright notice,
00014    this list of conditions and the following disclaimer.
00015 
00016  * Redistributions in binary form must reproduce the above copyright notice,
00017    this list of conditions and the following disclaimer in the documentation
00018    and/or other materials provided with the distribution.
00019 
00020  * Neither name of Ken Martin, Will Schroeder, or Bill Lorensen nor the names
00021    of any contributors may be used to endorse or promote products derived
00022    from this software without specific prior written permission.
00023 
00024  * Modified source versions must be plainly marked as such, and must not be
00025    misrepresented as being the original software.
00026 
00027 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS''
00028 AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
00029 IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
00030 ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE FOR
00031 ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
00032 DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
00033 SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
00034 CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
00035 OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
00036 OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
00037 
00038 =========================================================================*/
00068 #ifndef __vtkThinPlateSplineTransform_h
00069 #define __vtkThinPlateSplineTransform_h
00070 
00071 #include "vtkWarpTransform.h"
00072 
00073 #define VTK_RBF_CUSTOM 0
00074 #define VTK_RBF_R      1
00075 #define VTK_RBF_R2LOGR 2
00076 
00077 class VTK_HYBRID_EXPORT vtkThinPlateSplineTransform : public vtkWarpTransform
00078 {
00079 public:
00080   vtkTypeMacro(vtkThinPlateSplineTransform,vtkWarpTransform);
00081   void PrintSelf(ostream& os, vtkIndent indent);
00082   static vtkThinPlateSplineTransform *New();
00083 
00085 
00086   vtkGetMacro(Sigma,double);
00087   vtkSetMacro(Sigma,double);
00089 
00091 
00093   void SetBasis(int basis);
00094   vtkGetMacro(Basis,int);
00095   void SetBasisToR() { this->SetBasis(VTK_RBF_R); };
00096   void SetBasisToR2LogR() { this->SetBasis(VTK_RBF_R2LOGR); };
00097   const char *GetBasisAsString();
00099 
00100 //BTX
00102   /*! Set the radial basis function to a custom function.  You must supply
00103       both the function and its derivative with respect to r. */
00104   void SetBasisFunction(double (*U)(double r)) {
00105     if (this->BasisFunction == U) { return; }
00106     this->SetBasis(VTK_RBF_CUSTOM);
00107     this->BasisFunction = U; 
00108     this->Modified(); };
00109   void SetBasisDerivative(double (*dUdr)(double r, double &dU)) {
00110     this->BasisDerivative = dUdr; 
00111     this->Modified(); };    
00113 //ETX
00114 
00116 
00119   void SetSourceLandmarks(vtkPoints *source);
00120   vtkGetObjectMacro(SourceLandmarks,vtkPoints);
00122 
00124 
00127   void SetTargetLandmarks(vtkPoints *target);
00128   vtkGetObjectMacro(TargetLandmarks,vtkPoints);
00130 
00132   unsigned long GetMTime();
00133 
00135   vtkAbstractTransform *MakeTransform();
00136 
00137 protected:
00138   vtkThinPlateSplineTransform();
00139   ~vtkThinPlateSplineTransform();
00140 
00142   void InternalUpdate();
00143 
00145   void InternalDeepCopy(vtkAbstractTransform *transform);
00146 
00147   void ForwardTransformPoint(const float in[3], float out[3]);
00148   void ForwardTransformPoint(const double in[3], double out[3]);
00149 
00150   void ForwardTransformDerivative(const float in[3], float out[3],
00151               float derivative[3][3]);
00152   void ForwardTransformDerivative(const double in[3], double out[3],
00153               double derivative[3][3]);
00154 
00155   double Sigma;
00156   vtkPoints *SourceLandmarks;
00157   vtkPoints *TargetLandmarks;
00158 
00159 //BTX
00160   // the radial basis function to use
00161   double (*BasisFunction)(double r);
00162   double (*BasisDerivative)(double r, double& dUdr);
00163 //ETX
00164   int Basis;
00165 
00166   int NumberOfPoints;
00167   double **MatrixW;
00168 private:
00169   vtkThinPlateSplineTransform(const vtkThinPlateSplineTransform&);  // Not implemented.
00170   void operator=(const vtkThinPlateSplineTransform&);  // Not implemented.
00171 };
00172 
00173 #endif
00174 
00175 
00176 
00177 
00178 

Generated on Thu Mar 28 14:19:24 2002 for VTK by doxygen1.2.11.1 written by Dimitri van Heesch, © 1997-2001