00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00045
#ifndef __vtkIterativeClosestPointTransform_h
00046
#define __vtkIterativeClosestPointTransform_h
00047
00048
#include "vtkLinearTransform.h"
00049
00050 #define VTK_ICP_MODE_RMS 0
00051 #define VTK_ICP_MODE_AV 1
00052
00053
class vtkCellLocator;
00054
class vtkLandmarkTransform;
00055
class vtkDataSet;
00056
00057 class VTK_HYBRID_EXPORT vtkIterativeClosestPointTransform :
public vtkLinearTransform
00058 {
00059
public:
00060
static vtkIterativeClosestPointTransform *
New();
00061 vtkTypeRevisionMacro(vtkIterativeClosestPointTransform,
vtkLinearTransform);
00062
void PrintSelf(ostream& os,
vtkIndent indent);
00063
00065
00066
void SetSource(
vtkDataSet *source);
00067
void SetTarget(
vtkDataSet *target);
00068 vtkGetObjectMacro(Source,
vtkDataSet);
00069 vtkGetObjectMacro(Target,
vtkDataSet);
00071
00073
00075
void SetLocator(
vtkCellLocator *locator);
00076 vtkGetObjectMacro(Locator,
vtkCellLocator);
00078
00080
00081 vtkSetMacro(MaximumNumberOfIterations,
int);
00082 vtkGetMacro(MaximumNumberOfIterations,
int);
00084
00086
00087 vtkGetMacro(NumberOfIterations,
int);
00089
00091
00092 vtkSetMacro(CheckMeanDistance,
int);
00093 vtkGetMacro(CheckMeanDistance,
int);
00094 vtkBooleanMacro(CheckMeanDistance,
int);
00096
00098
00103 vtkSetClampMacro(MeanDistanceMode,
int,
00104 VTK_ICP_MODE_RMS,VTK_ICP_MODE_AV);
00105 vtkGetMacro(MeanDistanceMode,
int);
00106 void SetMeanDistanceModeToRMS()
00107 {this->SetMeanDistanceMode(
VTK_ICP_MODE_RMS);}
00108 void SetMeanDistanceModeToAbsoluteValue()
00109 {this->SetMeanDistanceMode(
VTK_ICP_MODE_AV);}
00110
const char *GetMeanDistanceModeAsString();
00112
00114
00116 vtkSetMacro(MaximumMeanDistance,
float);
00117 vtkGetMacro(MaximumMeanDistance,
float);
00119
00121
00122 vtkGetMacro(MeanDistance,
float);
00124
00126
00129 vtkSetMacro(MaximumNumberOfLandmarks,
int);
00130 vtkGetMacro(MaximumNumberOfLandmarks,
int);
00132
00134
00135 vtkSetMacro(StartByMatchingCentroids,
int);
00136 vtkGetMacro(StartByMatchingCentroids,
int);
00137 vtkBooleanMacro(StartByMatchingCentroids,
int);
00139
00141
00144 vtkGetObjectMacro(LandmarkTransform,
vtkLandmarkTransform);
00146
00149
void Inverse();
00150
00152
vtkAbstractTransform *
MakeTransform();
00153
00154
protected:
00155
00157
00158
void ReleaseSource(
void);
00159
void ReleaseTarget(
void);
00161
00163
void ReleaseLocator(
void);
00164
00166
void CreateDefaultLocator(
void);
00167
00169
unsigned long int GetMTime();
00170
00171 vtkIterativeClosestPointTransform();
00172 ~vtkIterativeClosestPointTransform();
00173
00174
void InternalUpdate();
00175
00177
void InternalDeepCopy(
vtkAbstractTransform *transform);
00178
00179 vtkDataSet* Source;
00180 vtkDataSet* Target;
00181 vtkCellLocator *Locator;
00182 int MaximumNumberOfIterations;
00183 int CheckMeanDistance;
00184 int MeanDistanceMode;
00185 float MaximumMeanDistance;
00186 int MaximumNumberOfLandmarks;
00187 int StartByMatchingCentroids;
00188
00189 int NumberOfIterations;
00190 float MeanDistance;
00191 vtkLandmarkTransform *LandmarkTransform;
00192
private:
00193 vtkIterativeClosestPointTransform(
const vtkIterativeClosestPointTransform&);
00194
void operator=(
const vtkIterativeClosestPointTransform&);
00195 };
00196
00197
#endif