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