00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 #ifndef __itkCellInterfaceVisitor_h
00018 #define __itkCellInterfaceVisitor_h
00019
00020 #include "itkLightObject.h"
00021 #include "itkObjectFactory.h"
00022
00023 namespace itk
00024 {
00025
00026 template <
00027 typename TPixelType,
00028 typename TCellTraits
00029 >
00030 class CellInterface;
00031
00041 template <
00042 typename TPixelType,
00043 typename TCellTraits
00044 >
00045 class CellInterfaceVisitor : public LightObject
00046 {
00047 public:
00049 typedef CellInterfaceVisitor Self;
00050 typedef LightObject Superclass;
00051 typedef SmartPointer<Self> Pointer;
00052 typedef SmartPointer<const Self> ConstPointer;
00053
00055 itkTypeMacro(CellInterfaceVisitor,LightObject);
00056
00058 virtual void VisitFromCell(unsigned long cellId, CellInterface<TPixelType, TCellTraits>*) = 0;
00059
00061 virtual int GetCellTopologyId() = 0;
00062
00063 protected:
00064 CellInterfaceVisitor() {};
00065 ~CellInterfaceVisitor() {};
00066
00067 private:
00068 CellInterfaceVisitor(const Self&);
00069 void operator=(const Self&);
00070 };
00071
00072
00096 template<
00097 typename TPixelType,
00098 typename TCellTraits,
00099 class CellTopology,
00100 class UserVisitor
00101 >
00102 class CellInterfaceVisitorImplementation :
00103 public CellInterfaceVisitor<TPixelType, TCellTraits>, public UserVisitor
00104 {
00105 public:
00107 typedef CellInterfaceVisitorImplementation Self;
00108 typedef SmartPointer<Self> Pointer;
00109
00111 itkNewMacro(Self);
00112
00114 itkTypeMacro(CellInterfaceVisitorImplementation,LightObject);
00115
00118 virtual int GetCellTopologyId() { return CellTopology::GetTopologyId();}
00119
00122 void VisitFromCell(unsigned long cellId, CellInterface<TPixelType, TCellTraits>* c)
00123 {
00124 this->UserVisitor::Visit(cellId, (CellTopology*)c);
00125 }
00126
00127 protected:
00128 CellInterfaceVisitorImplementation() {};
00129 ~CellInterfaceVisitorImplementation() {};
00130
00131 private:
00132 CellInterfaceVisitorImplementation(const Self&);
00133 void operator=(const Self&);
00134
00135 };
00136
00137 }
00138
00139 #endif