00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
#ifndef __itkVersorRigid3DTransform_h
00019
#define __itkVersorRigid3DTransform_h
00020
00021
#include <iostream>
00022
#include "itkRigid3DTransform.h"
00023
00024
namespace itk
00025 {
00026
00033
template <
class TScalarType=
double >
00034 class ITK_EXPORT VersorRigid3DTransform :
00035
public Rigid3DTransform< TScalarType >
00036 {
00037
public:
00039 typedef VersorRigid3DTransform
Self;
00040 typedef Rigid3DTransform< TScalarType > Superclass;
00041 typedef SmartPointer<Self> Pointer;
00042 typedef SmartPointer<const Self> ConstPointer;
00043
00045
itkNewMacro(
Self );
00046
00048
itkTypeMacro( VersorRigid3DTransform,
Rigid3DTransform );
00049
00051
itkStaticConstMacro(SpaceDimension,
unsigned int, 3);
00052
itkStaticConstMacro(ParametersDimension,
unsigned int, 6);
00053
00055
typedef typename Superclass::ScalarType
ScalarType;
00056
00058
typedef typename Superclass::ParametersType
ParametersType;
00059
00061
typedef typename Superclass::MatrixType
MatrixType;
00062
00064
typedef typename Superclass::JacobianType
JacobianType;
00065
00067
typedef typename Superclass::VnlQuaternionType
VnlQuaternionType;
00068
00070
typedef typename Superclass::VersorType
VersorType;
00071 typedef typename VersorType::VectorType
AxisType;
00072 typedef typename VersorType::ValueType
AngleType;
00073
00075
typedef typename Superclass::OffsetType
OffsetType;
00076
00078
typedef typename Superclass::InputPointType
InputPointType;
00079 typedef typename Superclass::OutputPointType
OutputPointType;
00080
00082
typedef typename Superclass::InputVectorType
InputVectorType;
00083 typedef typename Superclass::OutputVectorType
OutputVectorType;
00084
00086
typedef typename Superclass::InputCovariantVectorType
InputCovariantVectorType;
00087 typedef typename Superclass::OutputCovariantVectorType
OutputCovariantVectorType;
00088
00090
typedef typename Superclass::InputVnlVectorType
InputVnlVectorType;
00091 typedef typename Superclass::OutputVnlVectorType
OutputVnlVectorType;
00092
00097
void SetParameters(
const ParametersType & parameters );
00098
virtual const ParametersType& GetParameters(
void) const;
00099
00101
void SetRotation( const
VersorType & versor );
00102
void SetRotation( const
AxisType & axis,
AngleType angle );
00103 itkGetConstReferenceMacro(
Versor,
VersorType);
00104
00106
void SetCenter( const
InputPointType & center );
00107 itkGetConstReferenceMacro( Center,
InputPointType );
00108
00110
void SetTranslation( const
OutputVectorType & translation );
00111 itkGetConstReferenceMacro( Translation,
OutputVectorType );
00112
00117 const
JacobianType & GetJacobian(const InputPointType &point ) const;
00118
00119 protected:
00120 VersorRigid3DTransform();
00121 ~VersorRigid3DTransform(){};
00122
void PrintSelf(std::ostream &os,
Indent indent)
const;
00123
00124 VersorRigid3DTransform(
unsigned int outputSpaceDimension,
unsigned int parametersDimension);
00125
00127
void ComputeMatrixAndOffset(
void);
00128
00129
private:
00130 VersorRigid3DTransform(
const Self&);
00131
void operator=(
const Self&);
00132
00134 VersorType m_Versor;
00135
00137 InputPointType m_Center;
00138
00140 OutputVectorType m_Translation;
00141
00142
00143 };
00144
00145
00146 }
00147
00148
00149
#ifndef ITK_MANUAL_INSTANTIATION
00150
#include "itkVersorRigid3DTransform.txx"
00151
#endif
00152
00153
#endif