00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 #ifndef __itkQuadraticTriangleCell_h
00018 #define __itkQuadraticTriangleCell_h
00019
00020 #include "itkCellInterface.h"
00021 #include "itkCellBoundary.h"
00022 #include "itkQuadraticEdgeCell.h"
00023 #include "itkQuadraticTriangleCellTopology.h"
00024
00025 namespace itk
00026 {
00027
00045 template < typename TCellInterface >
00046 class QuadraticTriangleCell: public TCellInterface, private QuadraticTriangleCellTopology
00047 {
00048 public:
00050 itkCellCommonTypedefs(QuadraticTriangleCell);
00051 itkCellInheritedTypedefs(TCellInterface);
00052
00054 itkTypeMacro(QuadraticTriangleCell, CellInterface);
00055
00057 typedef VertexBoundary< TCellInterface > VertexType;
00058 typedef typename VertexType::SelfAutoPointer VertexAutoPointer;
00059
00061 typedef QuadraticEdgeBoundary< TCellInterface > EdgeType;
00062 typedef typename EdgeType::SelfAutoPointer EdgeAutoPointer;
00063
00065 itkStaticConstMacro(NumberOfPoints, unsigned int, 6);
00066 itkStaticConstMacro(NumberOfVertices, unsigned int, 3);
00067 itkStaticConstMacro(NumberOfEdges, unsigned int, 3);
00068 itkStaticConstMacro(CellDimension, unsigned int, 2);
00069
00071 virtual CellGeometry GetType(void) const
00072 {return Superclass::QUADRATIC_TRIANGLE_CELL;}
00073 virtual void MakeCopy( CellAutoPointer & ) const;
00074 virtual unsigned int GetDimension(void) const;
00075 virtual unsigned int GetNumberOfPoints(void) const;
00076 virtual CellFeatureCount GetNumberOfBoundaryFeatures(int dimension) const;
00077 virtual bool GetBoundaryFeature(int dimension, CellFeatureIdentifier, CellAutoPointer &);
00078 virtual void SetPointIds(PointIdConstIterator first);
00079 virtual void SetPointIds(PointIdConstIterator first,
00080 PointIdConstIterator last);
00081 virtual void SetPointId(int localId, PointIdentifier);
00082 virtual PointIdIterator PointIdsBegin(void);
00083 virtual PointIdConstIterator PointIdsBegin(void) const;
00084 virtual PointIdIterator PointIdsEnd(void);
00085 virtual PointIdConstIterator PointIdsEnd(void) const;
00086
00088 virtual CellFeatureCount GetNumberOfVertices(void) const;
00089 virtual CellFeatureCount GetNumberOfEdges(void) const;
00090 virtual bool GetVertex(CellFeatureIdentifier, VertexAutoPointer &);
00091 virtual bool GetEdge(CellFeatureIdentifier, EdgeAutoPointer &);
00092
00094 itkCellVisitMacro(QUADRATIC_TRIANGLE_CELL);
00095
00096
00100 virtual void EvaluateShapeFunctions(
00101 const ParametricCoordArrayType & parametricCoordinates,
00102 ShapeFunctionsArrayType & weights) const;
00103
00104
00105
00106 public:
00107 QuadraticTriangleCell() {}
00108 ~QuadraticTriangleCell() {}
00109
00110 protected:
00112 PointIdentifier m_PointIds[NumberOfPoints];
00113
00114 private:
00115 QuadraticTriangleCell(const Self&);
00116 void operator=(const Self&);
00117 };
00118
00119
00123 template <typename TCellInterface>
00124 class QuadraticTriangleBoundary:
00125 public CellBoundary< QuadraticTriangleCell< TCellInterface > >
00126 {
00127 public:
00129 itkCellCommonTypedefs(QuadraticTriangleBoundary);
00130
00132 itkTypeMacro(QuadraticTriangleBoundary, CellBoundary);
00133
00135 QuadraticTriangleBoundary() {};
00136 ~QuadraticTriangleBoundary() {};
00137
00138 };
00139
00140 }
00141
00142 #ifndef ITK_MANUAL_INSTANTIATION
00143 #include "itkQuadraticTriangleCell.txx"
00144 #endif
00145
00146 #endif