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

itkImageIORegion.h

Go to the documentation of this file.
00001 /*========================================================================= 00002 00003 Program: Insight Segmentation & Registration Toolkit 00004 Module: $RCSfile: itkImageIORegion.h,v $ 00005 Language: C++ 00006 Date: $Date: 2004/01/08 00:39:06 $ 00007 Version: $Revision: 1.12 $ 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 __itkImageIORegion_h 00018 #define __itkImageIORegion_h 00019 00020 #include <algorithm> 00021 #include "itkRegion.h" 00022 #include "itkObjectFactory.h" 00023 00024 namespace itk 00025 { 00026 00044 class ITK_EXPORT ImageIORegion: public Region 00045 { 00046 public: 00048 typedef ImageIORegion Self; 00049 typedef Region Superclass; 00050 00052 itkTypeMacro(ImageIORegion, Region); 00053 00055 unsigned int GetImageDimension() const 00056 { return m_ImageDimension; } 00057 00061 unsigned int GetRegionDimension() const 00062 { 00063 unsigned long dim=0; 00064 for (unsigned long i=0; i<m_ImageDimension; i++) 00065 { 00066 if ( m_Size[i] > 1 ) dim++; 00067 } 00068 return dim; 00069 } 00070 00072 typedef std::vector<long> IndexType; 00073 00075 typedef std::vector<long> SizeType; 00076 00078 virtual Superclass::RegionType GetRegionType() const 00079 {return Superclass::ITK_STRUCTURED_REGION;} 00080 00083 ImageIORegion(unsigned int dimension) 00084 { 00085 m_ImageDimension = dimension; 00086 m_Index.resize(m_ImageDimension); 00087 m_Size.resize(m_ImageDimension); 00088 std::fill(m_Index.begin(), m_Index.end(), 0); 00089 std::fill(m_Size.begin(), m_Size.end(), 0); 00090 } 00091 00094 ImageIORegion() 00095 { 00096 m_ImageDimension = 2; 00097 m_Index.resize(2); 00098 m_Size.resize(2); 00099 std::fill(m_Index.begin(), m_Index.end(), 0); 00100 std::fill(m_Size.begin(), m_Size.end(), 0); 00101 } 00102 00105 virtual ~ImageIORegion(){}; 00106 00109 ImageIORegion(const Self& region): Region() 00110 { 00111 m_Index =region.m_Index; 00112 m_Size = region.m_Size; 00113 m_ImageDimension = region.m_ImageDimension; 00114 } 00115 00118 void operator=(const Self& region) 00119 { 00120 m_Index = region.m_Index; 00121 m_Size = region.m_Size; 00122 m_ImageDimension = region.m_ImageDimension; 00123 }; 00124 00126 void SetIndex(const IndexType &index) 00127 { m_Index = index; }; 00128 00130 const IndexType& GetIndex() const 00131 { return m_Index; }; 00132 00135 void SetSize(const SizeType &size) 00136 { m_Size = size; }; 00137 00139 const SizeType& GetSize() const 00140 { return m_Size;} 00141 00145 long GetSize(unsigned long i) const 00146 { return m_Size[i]; } 00147 long GetIndex(unsigned long i) const 00148 { return m_Index[i]; } 00149 void SetSize(const unsigned long i, long size) 00150 {m_Size[i] = size;} 00151 void SetIndex(const unsigned long i, long idx) 00152 {m_Index[i] = idx;} 00153 00155 bool 00156 operator==(const Self &region) const 00157 { 00158 bool same = 1; 00159 same = (m_Index == region.m_Index); 00160 same = same && (m_Size == region.m_Size); 00161 same = same && (m_ImageDimension == region.m_ImageDimension); 00162 return same; 00163 } 00164 00166 bool 00167 operator!=(const Self &region) const 00168 { 00169 bool same = 1; 00170 same = (m_Index == region.m_Index); 00171 same = same && (m_Size == region.m_Size); 00172 same = same && (m_ImageDimension == region.m_ImageDimension); 00173 return !same; 00174 } 00175 00177 bool 00178 IsInside(const IndexType &index) const 00179 { 00180 for(unsigned int i=0; i<m_ImageDimension; i++) 00181 { 00182 if( index[i] < m_Index[i] ) 00183 { 00184 return false; 00185 } 00186 if( index[i] >= m_Index[i] + m_Size[i] ) 00187 { 00188 return false; 00189 } 00190 } 00191 return true; 00192 } 00193 00196 unsigned long GetNumberOfPixels() const; 00197 00198 protected: 00199 00200 private: 00201 unsigned int m_ImageDimension; 00202 std::vector<long> m_Index; 00203 std::vector<long> m_Size; 00204 }; 00205 00206 00207 inline std::ostream & operator<<(std::ostream &os, const ImageIORegion &region) 00208 { 00209 os << "Dimension: " << region.GetImageDimension() << std::endl; 00210 os << "Index: "; 00211 for(ImageIORegion::IndexType::const_iterator i = region.GetIndex().begin(); 00212 i != region.GetIndex().end(); ++i) 00213 { 00214 os << *i << " "; 00215 } 00216 os << std::endl; 00217 os << "Size: "; 00218 for(ImageIORegion::SizeType::const_iterator k = region.GetSize().begin(); 00219 k != region.GetSize().end(); ++k) 00220 { 00221 os << *k << " "; 00222 } 00223 os << std::endl; 00224 return os; 00225 } 00226 00227 } // end namespace itk 00228 00229 #endif 00230

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