00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
#ifndef __itkScaleSkewVersor3DTransform_h
00019
#define __itkScaleSkewVersor3DTransform_h
00020
00021
#include <iostream>
00022
#include "itkVersorRigid3DTransform.h"
00023
00024
namespace itk
00025 {
00026
00033
template <
class TScalarType=
double >
00034 class ITK_EXPORT ScaleSkewVersor3DTransform :
00035
public VersorRigid3DTransform< TScalarType >
00036 {
00037
public:
00039 typedef ScaleSkewVersor3DTransform
Self;
00040 typedef VersorRigid3DTransform< TScalarType > Superclass;
00041 typedef SmartPointer<Self> Pointer;
00042 typedef SmartPointer<const Self> ConstPointer;
00043
00045
itkNewMacro(
Self );
00046
00048
itkTypeMacro( ScaleSkewVersor3DTransform,
VersorRigid3DTransform );
00049
00051
itkStaticConstMacro(SpaceDimension,
unsigned int, 3);
00052
itkStaticConstMacro(ParametersDimension,
unsigned int, 18);
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 Vector<TScalarType, itkGetStaticConstMacro(SpaceDimension)> ScaleVectorType;
00071 typedef Vector<TScalarType, 6 > SkewVectorType;
00072
00074
typedef typename Superclass::VersorType
VersorType;
00075 typedef typename VersorType::VectorType
AxisType;
00076 typedef typename VersorType::ValueType
AngleType;
00077
00079
typedef typename Superclass::OffsetType
OffsetType;
00080
00082
typedef typename Superclass::InputPointType
InputPointType;
00083 typedef typename Superclass::OutputPointType
OutputPointType;
00084
00086
typedef typename Superclass::InputVectorType
InputVectorType;
00087 typedef typename Superclass::OutputVectorType
OutputVectorType;
00088
00090
typedef typename Superclass::InputCovariantVectorType
InputCovariantVectorType;
00091 typedef typename Superclass::OutputCovariantVectorType
OutputCovariantVectorType;
00092
00094
typedef typename Superclass::InputVnlVectorType
InputVnlVectorType;
00095 typedef typename Superclass::OutputVnlVectorType
OutputVnlVectorType;
00096
00106
void SetParameters(
const ParametersType & parameters );
00107
virtual const ParametersType& GetParameters(
void) const;
00108
00109
void SetScale( const
ScaleVectorType & scale );
00110 itkGetConstReferenceMacro( Scale,
ScaleVectorType );
00111
00112
void SetSkew( const
SkewVectorType & skew );
00113 itkGetConstReferenceMacro( Skew,
SkewVectorType );
00114
00115
void SetIdentity();
00116
00117 protected:
00118 ScaleSkewVersor3DTransform();
00119 ~ScaleSkewVersor3DTransform(){};
00120
void PrintSelf(std::ostream &os,
Indent indent)
const;
00121
00122 ScaleSkewVersor3DTransform(
unsigned int outputSpaceDimension,
unsigned int parametersDimension);
00123
00125
void ComputeMatrixAndOffset(
void);
00126
00127
private:
00128 ScaleSkewVersor3DTransform(
const Self&);
00129
void operator=(
const Self&);
00130
00132
ScaleVectorType m_Scale;
00133
00135
SkewVectorType m_Skew;
00136
00137 };
00138
00139
00140 }
00141
00142
00143
#ifndef ITK_MANUAL_INSTANTIATION
00144
#include "itkScaleSkewVersor3DTransform.txx"
00145
#endif
00146
00147
#endif