00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 #ifndef __itkTetrahedronCell_h
00018 #define __itkTetrahedronCell_h
00019
00020 #include "itkCellInterface.h"
00021 #include "itkTriangleCell.h"
00022 #include "itkTetrahedronCellTopology.h"
00023
00024 namespace itk
00025 {
00026
00040 template < typename TCellInterface >
00041 class ITK_EXPORT TetrahedronCell: public TCellInterface, private TetrahedronCellTopology
00042 {
00043 public:
00045 itkCellCommonTypedefs(TetrahedronCell);
00046 itkCellInheritedTypedefs(TCellInterface);
00047
00049 itkTypeMacro(TetrahedronCell, CellInterface);
00050
00052 typedef VertexCell< TCellInterface > VertexType;
00053 typedef typename VertexType::SelfAutoPointer VertexAutoPointer;
00054
00056 typedef LineCell< TCellInterface > EdgeType;
00057 typedef typename EdgeType::SelfAutoPointer EdgeAutoPointer;
00058
00060 typedef TriangleCell< TCellInterface > FaceType;
00061 typedef typename FaceType::SelfAutoPointer FaceAutoPointer;
00062
00064 itkStaticConstMacro(NumberOfPoints, unsigned int, 4);
00065 itkStaticConstMacro(NumberOfVertices, unsigned int, 4);
00066 itkStaticConstMacro(NumberOfEdges, unsigned int, 6);
00067 itkStaticConstMacro(NumberOfFaces, unsigned int, 4);
00068 itkStaticConstMacro(CellDimension, unsigned int, 3);
00069
00071 virtual CellGeometry GetType(void) const
00072 {return Superclass::TETRAHEDRON_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,
00078 CellAutoPointer &);
00079 virtual void SetPointIds(PointIdConstIterator first);
00080 virtual void SetPointIds(PointIdConstIterator first,
00081 PointIdConstIterator last);
00082 virtual void SetPointId(int localId, PointIdentifier);
00083 virtual PointIdIterator PointIdsBegin(void);
00084 virtual PointIdConstIterator PointIdsBegin(void) const;
00085 virtual PointIdIterator PointIdsEnd(void);
00086 virtual PointIdConstIterator PointIdsEnd(void) const;
00087
00089 virtual CellFeatureCount GetNumberOfVertices(void) const;
00090 virtual CellFeatureCount GetNumberOfEdges(void) const;
00091 virtual CellFeatureCount GetNumberOfFaces(void) const;
00092 virtual bool GetVertex(CellFeatureIdentifier, VertexAutoPointer &);
00093 virtual bool GetEdge(CellFeatureIdentifier, EdgeAutoPointer &);
00094 virtual bool GetFace(CellFeatureIdentifier, FaceAutoPointer &);
00095
00097 itkCellVisitMacro(Superclass::TETRAHEDRON_CELL);
00098
00099 virtual bool EvaluatePosition(CoordRepType* ,
00100 PointsContainer* ,
00101 CoordRepType* ,
00102 CoordRepType [],
00103 double *,
00104 InterpolationWeightType*);
00105
00106 public:
00107 TetrahedronCell() {}
00108 ~TetrahedronCell() {}
00109
00110 protected:
00112 PointIdentifier m_PointIds[NumberOfPoints];
00113
00114 private:
00115 TetrahedronCell(const Self&);
00116 void operator=(const Self&);
00117
00118 };
00119
00120 }
00121
00122 #ifndef ITK_MANUAL_INSTANTIATION
00123 #include "itkTetrahedronCell.txx"
00124 #endif
00125
00126 #endif