00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 #ifndef __itkNarrowBand_h
00018 #define __itkNarrowBand_h
00019
00020 #include "itkLightObject.h"
00021 #include "itkObjectFactory.h"
00022 #include <vector>
00023
00024 namespace itk {
00031 template <class TIndexType, class TDataType>
00032 class BandNode
00033 {
00034 public:
00035 TDataType m_Data;
00036 TIndexType m_Index;
00037 signed char m_NodeState;
00038 };
00039
00040
00042 template <class NodeType>
00043 class ITK_EXPORT NarrowBand : public LightObject
00044 {
00045 public:
00047 typedef NarrowBand Self;
00048 typedef LightObject Superclass;
00049 typedef SmartPointer<Self> Pointer;
00050 typedef SmartPointer<const Self> ConstPointer;
00051
00053 itkNewMacro(Self);
00054
00056 itkTypeMacro(NarrowBand, LightObject);
00057
00058 typedef std::vector<NodeType> NodeContainerType;
00059 typedef typename NodeContainerType::size_type SizeType;
00060 typedef typename NodeContainerType::const_iterator ConstIterator;
00061 typedef typename NodeContainerType::iterator Iterator;
00062
00065 typedef struct RegionStruct
00066 {
00067 Iterator Begin;
00068 Iterator End;
00069 } RegionType;
00070
00071
00072
00073
00074
00075
00076
00079 std::vector<struct RegionStruct> SplitBand( unsigned int );
00080
00081 Iterator Begin()
00082 {
00083 return m_NodeContainer.begin();
00084 }
00085 ConstIterator Begin() const
00086 {
00087 return m_NodeContainer.begin();
00088 }
00089 Iterator End()
00090 {
00091 return m_NodeContainer.end();
00092 }
00093 ConstIterator End() const
00094 {
00095 return m_NodeContainer.end();
00096 }
00097
00098 SizeType Size() const
00099 {
00100 return m_NodeContainer.size();
00101 }
00102 bool Empty() const
00103 {
00104 return m_NodeContainer.empty();
00105 }
00106
00108 void Clear()
00109 {
00110 m_NodeContainer.clear();
00111 }
00112 void Reserve( SizeType n)
00113 {
00114 m_NodeContainer.reserve( n );
00115 }
00116 void PushBack( const NodeType &n)
00117 {
00118 m_NodeContainer.push_back(n);
00119 }
00120 void PopBack()
00121 {
00122 m_NodeContainer.pop_back();
00123 }
00124 void Resize( SizeType n )
00125 {
00126 m_NodeContainer.resize(n);
00127 }
00128
00129 NodeType &operator[]( SizeType n )
00130 {
00131 return m_NodeContainer[n];
00132 }
00133 const NodeType& operator[](SizeType n) const
00134 {
00135 return m_NodeContainer[n];
00136 }
00137
00141 void SetTotalRadius(float val) { m_TotalRadius = val;}
00142
00143 float GetTotalRadius(){return m_TotalRadius;}
00144
00147 void SetInnerRadius(float val) { m_InnerRadius = val;}
00148
00149 float GetInnerRadius() { return m_InnerRadius;}
00150
00151
00152 protected:
00153 NarrowBand() {m_TotalRadius = 0.0; m_InnerRadius = 0.0;};
00154 float m_TotalRadius;
00155 float m_InnerRadius;
00156
00157 private:
00158 NarrowBand(const Self&);
00159 void operator=(const Self&);
00160 NodeContainerType m_NodeContainer;
00161
00162 };
00163
00164 }
00165
00166 #ifndef ITK_MANUAL_INSTANTIATION
00167 #include "itkNarrowBand.txx"
00168 #endif
00169
00170 #endif