File: itkQuadEdgeMeshBorderTransform.h

package info (click to toggle)
insighttoolkit 3.20.1%2Bgit20120521-3
  • links: PTS, VCS
  • area: main
  • in suites: wheezy
  • size: 80,652 kB
  • sloc: cpp: 458,133; ansic: 196,223; fortran: 28,000; python: 3,839; tcl: 1,811; sh: 1,184; java: 583; makefile: 430; csh: 220; perl: 193; xml: 20
file content (150 lines) | stat: -rw-r--r-- 6,258 bytes parent folder | download | duplicates (2)
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