1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150
|
/*=========================================================================
Program: Insight Segmentation & Registration Toolkit
Module: itkQuadEdgeMeshBorderTransform.h
Language: C++
Date: $Date$
Version: $Revision$
Copyright (c) Insight Software Consortium. All rights reserved.
See ITKCopyright.txt or http://www.itk.org/HTML/Copyright.htm for details.
This software is distributed WITHOUT ANY WARRANTY; without even
the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
PURPOSE. See the above copyright notices for more information.
=========================================================================*/
#ifndef __itkQuadEdgeMeshBorderTransform_h
#define __itkQuadEdgeMeshBorderTransform_h
#include <itkQuadEdgeMesh.h>
#include <itkQuadEdgeMeshToQuadEdgeMeshFilter.h>
#include <itkQuadEdgeMeshBoundaryEdgesMeshFunction.h>
namespace itk
{
/**
* \class QuadEdgeMeshBorderTransform
* \brief Transform the mandatoryly unique border of an \ref itkQE::Mesh
* into either a circle (conformal) or a square (arclenght-wise).
*
* To Write.
*/
template< class TInputMesh, class TOutputMesh >
class QuadEdgeMeshBorderTransform :
public QuadEdgeMeshToQuadEdgeMeshFilter< TInputMesh, TOutputMesh >
{
public:
/** Basic types. */
typedef QuadEdgeMeshBorderTransform Self;
typedef QuadEdgeMeshToQuadEdgeMeshFilter< TInputMesh,
TOutputMesh > Superclass;
typedef SmartPointer< Self > Pointer;
typedef SmartPointer< const Self > ConstPointer;
typedef TInputMesh InputMeshType;
typedef typename InputMeshType::ConstPointer InputMeshConstPointer;
typedef typename InputMeshType::CoordRepType InputCoordRepType;
typedef typename InputMeshType::PointType InputPointType;
typedef typename InputMeshType::Traits InputTraits;
typedef typename InputMeshType::PointIdentifier InputPointIdentifier;
typedef typename InputMeshType::QEType InputQEType;
typedef typename InputQEType::IteratorGeom InputIteratorGeom;
typedef typename InputMeshType::VectorType InputVectorType;
typedef typename InputMeshType::EdgeListType InputEdgeListType;
typedef typename InputMeshType::EdgeListPointerType InputEdgeListPointerType;
typedef typename InputEdgeListType::iterator InputEdgeListIterator;
typedef typename InputMeshType::EdgeCellType InputEdgeCellType;
typedef typename InputMeshType::PolygonCellType InputPolygonCellType;
typedef typename InputMeshType::PointIdList InputPointIdList;
typedef typename InputMeshType::PointsContainer InputPointsContainer;
typedef typename InputMeshType::PointsContainerConstIterator
InputPointsContainerConstIterator;
typedef typename InputMeshType::CellsContainerConstIterator
InputCellsContainerConstIterator;
typedef TOutputMesh OutputMeshType;
typedef typename OutputMeshType::Pointer OutputMeshPointer;
typedef typename OutputMeshType::CoordRepType OutputCoordRepType;
typedef typename OutputMeshType::PointType OutputPointType;
typedef typename OutputMeshType::Traits OutputTraits;
typedef typename OutputMeshType::PointIdentifier OutputPointIdentifier;
typedef typename OutputMeshType::QEType OutputQEType;
typedef typename OutputMeshType::VectorType OutputVectorType;
typedef typename OutputMeshType::EdgeListType OutputEdgeListType;
typedef typename OutputMeshType::EdgeCellType OutputEdgeCellType;
typedef typename OutputMeshType::PolygonCellType OutputPolygonCellType;
typedef typename OutputMeshType::PointIdList OutputPointIdList;
typedef typename OutputMeshType::PointsContainer OutputPointsContainer;
typedef typename OutputMeshType::PointsContainerConstIterator
OutputPointsContainerConstIterator;
typedef typename OutputMeshType::CellsContainerConstIterator
OutputCellsContainerConstIterator;
itkNewMacro( Self );
itkTypeMacro( QuadEdgeMeshBorderTransform, QuadEdgeMeshToQuadEdgeMeshFilter );
itkStaticConstMacro( PointDimension, unsigned int,
InputTraits::PointDimension );
typedef std::vector< InputPointType > InputVectorPointType;
typedef std::map< InputPointIdentifier, OutputPointIdentifier > MapPointIdentifier;
typedef typename MapPointIdentifier::iterator MapPointIdentifierIterator;
typedef QuadEdgeMeshBoundaryEdgesMeshFunction< InputMeshType > BoundaryRepresentativeEdgesType;
typedef typename BoundaryRepresentativeEdgesType::Pointer BoundaryRepresentativeEdgesPointer;
public:
enum BorderTransformType
{
SQUARE_BORDER_TRANSFORM = 0,
DISK_BORDER_TRANSFORM
};
itkSetMacro( TransformType, BorderTransformType );
itkGetConstMacro( TransformType, BorderTransformType );
itkSetMacro( Radius, InputCoordRepType );
itkGetConstMacro( Radius, InputCoordRepType );
void ComputeTransform( );
MapPointIdentifier GetBoundaryPtMap( );
InputVectorPointType GetBorder( );
protected:
QuadEdgeMeshBorderTransform( );
~QuadEdgeMeshBorderTransform( ) {};
BorderTransformType m_TransformType;
InputCoordRepType m_Radius;
InputVectorPointType m_Border;
MapPointIdentifier m_BoundaryPtMap;
void GenerateData( );
void ComputeBoundary( );
InputEdgeListIterator ComputeLongestBorder( );
InputEdgeListIterator ComputeLargestBorder( );
void DiskTransform( );
InputPointType GetMeshBarycentre( );
InputCoordRepType RadiusMaxSquare( );
void ArcLengthSquareTransform( );
private:
/** Not implemented */
QuadEdgeMeshBorderTransform( const Self& );
/** Not implemented */
void operator = ( const Self& );
};
}
#include "itkQuadEdgeMeshBorderTransform.txx"
#endif
|