VTK
dox/Hybrid/vtkIterativeClosestPointTransform.h
Go to the documentation of this file.
00001 /*=========================================================================
00002 
00003   Program:   Visualization Toolkit
00004   Module:    vtkIterativeClosestPointTransform.h
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 =========================================================================*/
00015 
00041 #ifndef __vtkIterativeClosestPointTransform_h
00042 #define __vtkIterativeClosestPointTransform_h
00043 
00044 #include "vtkLinearTransform.h"
00045 
00046 #define VTK_ICP_MODE_RMS 0
00047 #define VTK_ICP_MODE_AV 1
00048 
00049 class vtkCellLocator;
00050 class vtkLandmarkTransform;
00051 class vtkDataSet;
00052 
00053 class VTK_HYBRID_EXPORT vtkIterativeClosestPointTransform : public vtkLinearTransform
00054 {
00055 public:
00056   static vtkIterativeClosestPointTransform *New();
00057   vtkTypeMacro(vtkIterativeClosestPointTransform,vtkLinearTransform);
00058   void PrintSelf(ostream& os, vtkIndent indent);
00059 
00061 
00062   void SetSource(vtkDataSet *source);
00063   void SetTarget(vtkDataSet *target);
00064   vtkGetObjectMacro(Source, vtkDataSet);
00065   vtkGetObjectMacro(Target, vtkDataSet);
00067 
00069 
00071   void SetLocator(vtkCellLocator *locator);
00072   vtkGetObjectMacro(Locator,vtkCellLocator);
00074 
00076 
00077   vtkSetMacro(MaximumNumberOfIterations, int);
00078   vtkGetMacro(MaximumNumberOfIterations, int);
00080 
00082 
00083   vtkGetMacro(NumberOfIterations, int);
00085 
00087 
00089   vtkSetMacro(CheckMeanDistance, int);
00090   vtkGetMacro(CheckMeanDistance, int);
00091   vtkBooleanMacro(CheckMeanDistance, int);
00093 
00095 
00100   vtkSetClampMacro(MeanDistanceMode,int,
00101                    VTK_ICP_MODE_RMS,VTK_ICP_MODE_AV);
00102   vtkGetMacro(MeanDistanceMode,int);
00103   void SetMeanDistanceModeToRMS()
00104     {this->SetMeanDistanceMode(VTK_ICP_MODE_RMS);}
00105   void SetMeanDistanceModeToAbsoluteValue()
00106     {this->SetMeanDistanceMode(VTK_ICP_MODE_AV);}
00107   const char *GetMeanDistanceModeAsString();
00109 
00111 
00114   vtkSetMacro(MaximumMeanDistance, double);
00115   vtkGetMacro(MaximumMeanDistance, double);
00117   
00119 
00120   vtkGetMacro(MeanDistance, double);
00122   
00124 
00127   vtkSetMacro(MaximumNumberOfLandmarks, int);
00128   vtkGetMacro(MaximumNumberOfLandmarks, int);
00130 
00132 
00134   vtkSetMacro(StartByMatchingCentroids, int);
00135   vtkGetMacro(StartByMatchingCentroids, int);
00136   vtkBooleanMacro(StartByMatchingCentroids, int);
00138 
00140 
00143   vtkGetObjectMacro(LandmarkTransform,vtkLandmarkTransform);
00145   
00148   void Inverse();
00149 
00151   vtkAbstractTransform *MakeTransform();
00152 
00153 protected:
00154 
00156 
00157   void ReleaseSource(void);
00158   void ReleaseTarget(void);
00160 
00162   void ReleaseLocator(void);
00163 
00165   void CreateDefaultLocator(void);
00166 
00168   unsigned long int GetMTime();
00169 
00170   vtkIterativeClosestPointTransform();
00171   ~vtkIterativeClosestPointTransform();
00172 
00173   void InternalUpdate();
00174 
00176   void InternalDeepCopy(vtkAbstractTransform *transform);
00177 
00178   vtkDataSet* Source;
00179   vtkDataSet* Target;
00180   vtkCellLocator *Locator;
00181   int MaximumNumberOfIterations;
00182   int CheckMeanDistance;
00183   int MeanDistanceMode;
00184   double MaximumMeanDistance;
00185   int MaximumNumberOfLandmarks;
00186   int StartByMatchingCentroids;
00187 
00188   int NumberOfIterations;
00189   double MeanDistance;
00190   vtkLandmarkTransform *LandmarkTransform;
00191 private:
00192   vtkIterativeClosestPointTransform(const vtkIterativeClosestPointTransform&);  // Not implemented.
00193   void operator=(const vtkIterativeClosestPointTransform&);  // Not implemented.
00194 };
00195 
00196 #endif