Main Page   Groups   Namespace List   Class Hierarchy   Alphabetical List   Compound List   File List   Namespace Members   Compound Members   File Members   Concepts

itkShapedNeighborhoodIterator.h

Go to the documentation of this file.
00001 /*========================================================================= 00002 00003 Program: Insight Segmentation & Registration Toolkit 00004 Module: $RCSfile: itkShapedNeighborhoodIterator.h,v $ 00005 Language: C++ 00006 Date: $Date: 2003/09/10 14:29:25 $ 00007 Version: $Revision: 1.6 $ 00008 00009 Copyright (c) Insight Software Consortium. All rights reserved. 00010 See ITKCopyright.txt or http://www.itk.org/HTML/Copyright.htm for details. 00011 00012 This software is distributed WITHOUT ANY WARRANTY; without even 00013 the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR 00014 PURPOSE. See the above copyright notices for more information. 00015 00016 =========================================================================*/ 00017 #ifndef __itkShapedNeighborhoodIterator_h 00018 #define __itkShapedNeighborhoodIterator_h 00019 00020 #include <vector> 00021 #include <list> 00022 #include "itkConstShapedNeighborhoodIterator.h" 00023 00024 namespace itk { 00025 00115 template<class TImage, class TBoundaryCondition 00116 = ZeroFluxNeumannBoundaryCondition<TImage> > 00117 class ITK_EXPORT ShapedNeighborhoodIterator 00118 : public ConstShapedNeighborhoodIterator<TImage, TBoundaryCondition> 00119 { 00120 public: 00122 typedef typename TImage::InternalPixelType InternalPixelType; 00123 typedef typename TImage::PixelType PixelType; 00124 00126 itkStaticConstMacro(Dimension, unsigned int, TImage::ImageDimension); 00127 00129 typedef ShapedNeighborhoodIterator Self; 00130 typedef ConstShapedNeighborhoodIterator<TImage, TBoundaryCondition> Superclass; 00131 00133 typedef typename Superclass::OffsetType OffsetType; 00134 typedef typename OffsetType::OffsetValueType OffsetValueType; 00135 typedef typename Superclass::RadiusType RadiusType; 00136 typedef typename Superclass::SizeType SizeType; 00137 typedef typename Superclass::SizeValueType SizeValueType; 00138 typedef typename Superclass::ConstIterator ConstIterator; 00139 typedef typename Superclass::IndexListType IndexListType; 00140 typedef typename Superclass::BoundaryConditionType BoundaryConditionType; 00141 typedef typename Superclass::ImageBoundaryConditionPointerType 00142 ImageBoundaryConditionPointerType; 00143 00145 typedef TImage ImageType; 00146 typedef typename TImage::RegionType RegionType; 00147 typedef Index<itkGetStaticConstMacro(Dimension)> IndexType; 00148 typedef typename IndexType::IndexValueType IndexValueType; 00149 typedef Neighborhood<PixelType, itkGetStaticConstMacro(Dimension)> NeighborhoodType; 00150 00152 struct Iterator : public ConstIterator 00153 { 00154 Iterator() {} 00155 Iterator(Self *s) : ConstIterator(s) {} 00156 00157 ~Iterator() {} 00158 const Iterator &operator=(const Iterator &o) 00159 { 00160 ConstIterator::operator=(o); 00161 return *this; 00162 } 00163 00164 // Promote to public 00165 void Set(const PixelType &v) const 00166 { ConstIterator::ProtectedSet(v); } 00167 00168 }; 00169 00171 ShapedNeighborhoodIterator() 00172 { 00173 m_BeginIterator = Iterator(this); 00174 m_EndIterator = Iterator(this); 00175 m_EndIterator.GoToEnd(); 00176 } 00177 00179 virtual ~ShapedNeighborhoodIterator() {} 00180 00183 ShapedNeighborhoodIterator(const SizeType &radius, 00184 const ImageType * ptr, 00185 const RegionType &region 00186 ) : Superclass(radius, const_cast<ImageType*>(ptr), 00187 region) 00188 { 00189 m_BeginIterator = Iterator(this); 00190 m_EndIterator = Iterator(this); 00191 m_EndIterator.GoToEnd(); 00192 } 00193 00194 // Expose the following methods from the superclass. This is a restricted 00195 // subset of the methods available for ConstNeighborhoodIterator. 00196 Superclass::SetPixel; 00197 00199 Self &operator=(const Self& orig) 00200 { 00201 Superclass::operator=(orig); 00202 00203 // Reset begin and end pointer locations 00204 m_BeginIterator.GoToBegin(); 00205 m_EndIterator.GoToEnd(); 00206 return *this; 00207 } 00208 00210 virtual void PrintSelf(std::ostream &, Indent) const; 00211 00214 Iterator &Begin() { return m_BeginIterator; } 00215 Iterator &End() { return m_EndIterator; } 00216 00219 const ConstIterator &End() const 00220 { return m_ConstEndIterator; } 00221 00222 void ClearActiveList() 00223 { 00224 Superclass::ClearActiveList(); 00225 m_EndIterator.GoToEnd(); 00226 m_BeginIterator.GoToBegin(); 00227 } 00228 00229 protected: 00230 00232 ShapedNeighborhoodIterator( const ShapedNeighborhoodIterator & o); 00233 // purposely not implemented 00234 00235 00236 void ActivateIndex(const unsigned int n) 00237 { 00238 Superclass::ActivateIndex(n); 00239 m_EndIterator.GoToEnd(); 00240 m_BeginIterator.GoToBegin(); 00241 } 00242 00243 void DeactivateIndex(const unsigned int n) 00244 { 00245 Superclass::DeactivateIndex(n); 00246 m_EndIterator.GoToEnd(); 00247 m_BeginIterator.GoToBegin(); 00248 } 00249 00250 00251 Iterator m_EndIterator; 00252 Iterator m_BeginIterator; 00253 }; 00254 00255 } // namespace itk 00256 00257 00258 #ifndef ITK_MANUAL_INSTANTIATION 00259 #include "itkShapedNeighborhoodIterator.txx" 00260 #endif 00261 00262 #endif 00263

Generated at Sun Apr 1 02:43:56 2007 for ITK by doxygen 1.3.8 written by Dimitri van Heesch, © 1997-2000