#ifndef __CPM__DATASTRUCTURES__QUADEDGECELL__H__ #define __CPM__DATASTRUCTURES__QUADEDGECELL__H__ #include namespace cpm { namespace DataStructures { /** */ template< class I, class E > class QuadEdgeCell : public I { public: // Base types typedef QuadEdgeCell Self; typedef I Superclass; typedef itk::AutoPointer< Self > SelfAutoPointer; typedef itk::AutoPointer< const Self > ConstSelfAutoPointer; typedef Self* RawPointer; typedef const Self* ConstRawPointer; // QuadEdge objects typedef E TPrimalEdge; typedef typename E::TDual TDualEdge; // Inherited types typedef typename I::PixelType PixelType; typedef typename I::CellType CellType; typedef typename I::CellAutoPointer CellAutoPointer; typedef typename I::CellConstAutoPointer CellConstAutoPointer; typedef typename I::CellRawPointer CellRawPointer; typedef typename I::CellConstRawPointer CellConstRawPointer; typedef typename I::CellTraits CellTraits; typedef typename I::CoordRepType CoordRepType; typedef typename I::InterpolationWeightType InterpolationWeightType; typedef typename I::PointIdentifier PointIdentifier; typedef typename I::PointIdIterator PointIdIterator; typedef typename I::PointIdConstIterator PointIdConstIterator; typedef typename I::CellIdentifier CellIdentifier; typedef typename I::CellFeatureIdentifier CellFeatureIdentifier; typedef typename I::CellFeatureIdentifier CellFeatureCount; typedef typename I::PointType PointType; typedef typename I::VectorType VectorType; typedef typename I::PointsContainer PointsContainer; typedef typename I::UsingCellsContainer UsingCellsContainer; typedef typename I::CellGeometry CellGeometry; typedef typename I::ParametricCoordArrayType ParametricCoordArrayType; typedef typename I::ShapeFunctionsArrayType ShapeFunctionsArrayType; itkStaticConstMacro( PointDimension, unsigned int, I::PointDimension ); itkStaticConstMacro( CellDimension, unsigned int, 2 ); public: itkTypeMacro( QuadEdgeCell, I ); public: QuadEdgeCell( ); QuadEdgeCell( E* entry ); virtual ~QuadEdgeCell( ); /// Implement the standard CellInterface. virtual CellGeometry GetType( ) const; virtual void MakeCopy( CellAutoPointer& other ) const; virtual unsigned int GetDimension( ) const; virtual unsigned int GetNumberOfPoints( ) const; virtual CellFeatureCount GetNumberOfBoundaryFeatures( int dimension ) const; virtual bool GetBoundaryFeature( int dimension, CellFeatureIdentifier fId, CellAutoPointer& ptr ); virtual void SetPointIds( PointIdConstIterator first ); virtual void SetPointIds( PointIdConstIterator first, PointIdConstIterator last ); virtual void AddPointId( PointIdentifier pId ); virtual void RemovePointId( PointIdentifier pId ); virtual void SetPointIds( int dummy, int num, PointIdConstIterator first ); virtual void BuildEdges( ); virtual void ClearPoints( ); virtual void SetPointId( int localId, PointIdentifier pId ); // Visitor methods static int GetTopologyId( ); virtual void Accept( CellIdentifier cellid, typename itk::CellInterface< PixelType, CellTraits >:: MultiVisitor* mv ); // Iterators virtual PointIdIterator PointIdsBegin( ); virtual PointIdConstIterator PointIdsBegin( ) const; virtual PointIdIterator PointIdsEnd( ); virtual PointIdConstIterator PointIdsEnd( ) const; /// QuadEdgeCell-specific interface. virtual E* GetEntryPrimalEdge( ); virtual const E* GetEntryPrimalEdge( ) const; virtual void SetEntryPrimalEdge( E* entry ); private: /// Purposely not implemented. QuadEdgeCell( const Self& ); Self& operator=( const Self& ); protected: E* m_EntryEdge; }; } // ecapseman } // ecapseman #include #endif // __CPM__DATASTRUCTURES__QUADEDGECELL__H__ // eof - $RCSfile$