00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
#ifndef __itkPolygonCell_h
00021
#define __itkPolygonCell_h
00022
00023
#include "itkCellInterface.h"
00024
#include "itkLineCell.h"
00025
#include "itkPoint.h"
00026
#include <vector>
00027
#include <queue>
00028
00029
00030
namespace itk
00031 {
00032
00047
template <
typename TCellInterface >
00048 class ITK_EXPORT PolygonCell:
public TCellInterface
00049 {
00050
public:
00052
itkCellCommonTypedefs(PolygonCell);
00053
itkCellInheritedTypedefs(TCellInterface);
00054
00056
itkTypeMacro(PolygonCell,
CellInterface);
00057
00059
itkStaticConstMacro(CellDimension,
unsigned int, 2);
00060
00062
typedef VertexCell< TCellInterface > VertexType;
00063 typedef typename VertexType::SelfAutoPointer
VertexAutoPointer;
00064
00066
typedef LineCell< TCellInterface > EdgeType;
00067 typedef typename EdgeType::SelfAutoPointer
EdgeAutoPointer;
00068
00069
typedef FixedArray<int,2> EdgeInfo;
00070 typedef std::deque<EdgeInfo>
EdgeInfoDQ;
00071
00073
itkCellVisitMacro(POLYGON_CELL);
00074
00076
virtual CellGeometry GetType(
void)
const
00077 {
return Superclass::POLYGON_CELL;}
00078
virtual void MakeCopy( CellAutoPointer & ) const;
00079 virtual
unsigned int GetDimension(
void) const;
00080 virtual
unsigned int GetNumberOfPoints(
void) const;
00081 virtual CellFeatureCount GetNumberOfBoundaryFeatures(
int dimension) const;
00082 virtual
bool GetBoundaryFeature(
int dimension, CellFeatureIdentifier,CellAutoPointer &);
00083
00084 virtual
void SetPointIds(PointIdConstIterator first);
00085 virtual
void SetPointIds(PointIdConstIterator first,
00086 PointIdConstIterator last);
00087
00088
void AddPointId(PointIdentifier);
00089
void SetPointIds(
int dummy,
int num, PointIdConstIterator first);
00090
void BuildEdges(
void);
00091
void ClearPoints(
void);
00092
00093 virtual
void SetPointId(
int localId, PointIdentifier);
00094 virtual PointIdIterator PointIdsBegin(
void);
00095 virtual PointIdConstIterator PointIdsBegin(
void) const;
00096 virtual PointIdIterator PointIdsEnd(
void);
00097 virtual PointIdConstIterator PointIdsEnd(
void) const;
00098
00100 virtual CellFeatureCount GetNumberOfVertices(
void) const;
00101 virtual CellFeatureCount GetNumberOfEdges(
void) const;
00102 virtual
bool GetVertex(CellFeatureIdentifier, VertexAutoPointer &);
00103 virtual
bool GetEdge(CellFeatureIdentifier, EdgeAutoPointer &);
00104
00105
00107 PolygonCell() {}
00108 ~PolygonCell() {}
00109
00110 protected:
00111 std::vector<EdgeInfo> m_Edges;
00112 std::vector<PointIdentifier> m_PointIds;
00113
00114
private:
00115 PolygonCell(
const Self&);
00116 void operator=(
const Self&);
00117
00118 };
00119
00120 }
00121
00122
#ifndef ITK_MANUAL_INSTANTIATION
00123
#include "itkPolygonCell.txx"
00124
#endif
00125
00126
#endif
00127
00128