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

Hybrid/vtkIterativeClosestPointTransform.h

Go to the documentation of this file.
00001 /*=========================================================================
00002 
00003   Program:   Visualization Toolkit
00004   Module:    $RCSfile: vtkIterativeClosestPointTransform.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 =========================================================================*/
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   vtkTypeRevisionMacro(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 
00088   vtkSetMacro(CheckMeanDistance, int);
00089   vtkGetMacro(CheckMeanDistance, int);
00090   vtkBooleanMacro(CheckMeanDistance, int);
00092 
00094 
00099   vtkSetClampMacro(MeanDistanceMode,int,
00100                    VTK_ICP_MODE_RMS,VTK_ICP_MODE_AV);
00101   vtkGetMacro(MeanDistanceMode,int);
00102   void SetMeanDistanceModeToRMS()
00103     {this->SetMeanDistanceMode(VTK_ICP_MODE_RMS);}
00104   void SetMeanDistanceModeToAbsoluteValue()
00105     {this->SetMeanDistanceMode(VTK_ICP_MODE_AV);}
00106   const char *GetMeanDistanceModeAsString();
00108 
00110 
00112   vtkSetMacro(MaximumMeanDistance, double);
00113   vtkGetMacro(MaximumMeanDistance, double);
00115   
00117 
00118   vtkGetMacro(MeanDistance, double);
00120   
00122 
00125   vtkSetMacro(MaximumNumberOfLandmarks, int);
00126   vtkGetMacro(MaximumNumberOfLandmarks, int);
00128 
00130 
00131   vtkSetMacro(StartByMatchingCentroids, int);
00132   vtkGetMacro(StartByMatchingCentroids, int);
00133   vtkBooleanMacro(StartByMatchingCentroids, int);
00135 
00137 
00140   vtkGetObjectMacro(LandmarkTransform,vtkLandmarkTransform);
00142   
00145   void Inverse();
00146 
00148   vtkAbstractTransform *MakeTransform();
00149 
00150 protected:
00151 
00153 
00154   void ReleaseSource(void);
00155   void ReleaseTarget(void);
00157 
00159   void ReleaseLocator(void);
00160 
00162   void CreateDefaultLocator(void);
00163 
00165   unsigned long int GetMTime();
00166 
00167   vtkIterativeClosestPointTransform();
00168   ~vtkIterativeClosestPointTransform();
00169 
00170   void InternalUpdate();
00171 
00173   void InternalDeepCopy(vtkAbstractTransform *transform);
00174 
00175   vtkDataSet* Source;
00176   vtkDataSet* Target;
00177   vtkCellLocator *Locator;
00178   int MaximumNumberOfIterations;
00179   int CheckMeanDistance;
00180   int MeanDistanceMode;
00181   double MaximumMeanDistance;
00182   int MaximumNumberOfLandmarks;
00183   int StartByMatchingCentroids;
00184 
00185   int NumberOfIterations;
00186   double MeanDistance;
00187   vtkLandmarkTransform *LandmarkTransform;
00188 private:
00189   vtkIterativeClosestPointTransform(const vtkIterativeClosestPointTransform&);  // Not implemented.
00190   void operator=(const vtkIterativeClosestPointTransform&);  // Not implemented.
00191 };
00192 
00193 #endif