00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 #ifndef __itkPathConstIterator_h
00018 #define __itkPathConstIterator_h
00019
00020 #include "itkIndex.h"
00021 #include "itkImage.h"
00022 #include "itkPath.h"
00023
00024 namespace itk
00025 {
00026
00047 template<class TImage, class TPath>
00048 class ITK_EXPORT PathConstIterator
00049 {
00050 public:
00052 typedef PathConstIterator Self;
00053
00058 itkStaticConstMacro(ImageIteratorDimension, unsigned int,
00059 TImage::ImageDimension);
00060
00062 typedef typename TImage::IndexType IndexType;
00063 typedef typename TImage::IndexValueType IndexValueType;
00064
00066 typedef typename TImage::OffsetType OffsetType;
00067 typedef typename TImage::OffsetValueType OffsetValueType;
00068
00070 typedef typename TImage::SizeType SizeType;
00071 typedef typename TImage::SizeValueType SizeValueType;
00072
00074 typedef typename TImage::RegionType RegionType;
00075
00077 typedef typename TImage::SpacingType SpacingType;
00078
00080 typedef typename TImage::PointType PointType;
00081
00083 typedef TImage ImageType;
00084
00088 typedef typename TImage::PixelContainer PixelContainer;
00089 typedef typename PixelContainer::Pointer PixelContainerPointer;
00090
00092 typedef typename TImage::InternalPixelType InternalPixelType;
00093
00095 typedef typename TImage::PixelType PixelType;
00096
00099 typedef typename TImage::AccessorType AccessorType;
00100
00102 typedef TPath PathType;
00103
00105 typedef typename PathType::InputType PathInputType;
00106
00108 typedef typename PathType::OutputType PathOutputType;
00109
00111 itkTypeMacro(PathConstIterator, None);
00112
00114 static unsigned int GetImageIteratorDimension()
00115 {
00116 return TImage::ImageDimension;
00117 }
00118
00120 const PathInputType GetPathPosition()
00121 {
00122 return m_CurrentPathPosition;
00123 }
00124
00126 const IndexType GetIndex()
00127 {
00128 return m_CurrentImageIndex;
00129 }
00130
00132 const PixelType & Get(void) const
00133 {
00134 return m_Image->GetPixel(m_CurrentImageIndex );
00135 }
00136
00140 bool IsAtEnd()
00141 {
00142 return m_IsAtEnd;
00143 }
00144
00149 inline virtual void VisitStartIndexAsLastIndexIfClosed(bool flag)
00150 {
00151 m_VisitStartIndexAsLastIndexIfClosed = flag;
00152 }
00153
00159 void GoToBegin();
00160
00162 void operator++();
00163
00166 Self &operator=(const Self& it);
00167
00169 PathConstIterator(const ImageType *imagePtr, const PathType *pathPtr);
00170
00172 virtual ~PathConstIterator() {};
00173
00174 protected:
00175
00176 OffsetType m_ZeroOffset;
00177
00179 typename ImageType::ConstPointer m_Image;
00180
00182 typename PathType::ConstPointer m_Path;
00183
00185 RegionType m_Region;
00186
00188 PointType m_ImageOrigin;
00189
00191 SpacingType m_ImageSpacing;
00192
00194 const unsigned long int* m_ImageSize;
00195
00200 bool m_VisitStartIndexAsLastIndexIfClosed;
00201
00203 bool m_IsAtEnd;
00204
00206 PathInputType m_CurrentPathPosition;
00207
00209 IndexType m_CurrentImageIndex;
00210 };
00211
00212 }
00213
00214 #ifndef ITK_MANUAL_INSTANTIATION
00215 #include "itkPathConstIterator.txx"
00216 #endif
00217
00218 #endif