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 Jan 25 13:19:44 2004 for ITK by doxygen 1.3.3 written by Dimitri van Heesch, © 1997-2000