<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <html><head><meta name="robots" content="noindex"> <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"> <title>ITK: Common/itkImageSliceIteratorTest.cxx</title> <link href="DoxygenStyle.css" rel="stylesheet" type="text/css"> </head><body bgcolor="#ffffff"> <!-- Section customized for INSIGHT : Tue Jul 17 01:02:45 2001 --> <center> <a href="index.html" class="qindex">Main Page</a> <a href="modules.html" class="qindex">Groups</a> <a href="namespaces.html" class="qindex">Namespace List</a> <a href="hierarchy.html" class="qindex">Class Hierarchy</a> <a href="classes.html" class="qindex">Alphabetical List</a> <a href="annotated.html" class="qindex">Compound List</a> <a href="files.html" class="qindex">File List</a> <a href="namespacemembers.html" class="qindex">Namespace Members</a> <a href="functions.html" class="qindex">Compound Members</a> <a href="globals.html" class="qindex">File Members</a> <a href="pages.html" class="qindex">Concepts</a></center> <!-- Generated by Doxygen 1.5.9 --> <div class="contents"> <h1>Common/itkImageSliceIteratorTest.cxx</h1><dl class="user" compact><dt><b>MORE INFORMATION</b></dt><dd>For a complete description of the ITK Image Iterators and their API, please see the Iterators chapter in the ITK Software Guide. The ITK Software Guide is available in print and as a free .pdf download from <a href="http://www.itk.org.">http://www.itk.org.</a></dd></dl> <dl class="see" compact><dt><b>See also:</b></dt><dd>ImageConstIterator <p> ConditionalConstIterator <p> ConstNeighborhoodIterator <p> ConstShapedNeighborhoodIterator <p> ConstSliceIterator <p> CorrespondenceDataStructureIterator <p> FloodFilledFunctionConditionalConstIterator <p> FloodFilledImageFunctionConditionalConstIterator <p> FloodFilledImageFunctionConditionalIterator <p> FloodFilledSpatialFunctionConditionalConstIterator <p> FloodFilledSpatialFunctionConditionalIterator <p> ImageConstIterator <p> ImageConstIteratorWithIndex <p> ImageIterator <p> ImageIteratorWithIndex <p> ImageLinearConstIteratorWithIndex <p> ImageLinearIteratorWithIndex <p> ImageRandomConstIteratorWithIndex <p> ImageRandomIteratorWithIndex <p> ImageRegionConstIterator <p> ImageRegionConstIteratorWithIndex <p> ImageRegionExclusionConstIteratorWithIndex <p> ImageRegionExclusionIteratorWithIndex <p> ImageRegionIterator <p> ImageRegionIteratorWithIndex <p> ImageRegionReverseConstIterator <p> ImageRegionReverseIterator <p> ImageReverseConstIterator <p> ImageReverseIterator <p> ImageSliceConstIteratorWithIndex <p> ImageSliceIteratorWithIndex <p> NeighborhoodIterator <p> PathConstIterator <p> PathIterator <p> ShapedNeighborhoodIterator <p> SliceIterator <p> ImageConstIteratorWithIndex</dd></dl> <div class="fragment"><pre class="fragment"><span class="comment">/*=========================================================================</span> <span class="comment"></span> <span class="comment"> Program: Insight Segmentation & Registration Toolkit</span> <span class="comment"> Module: $RCSfile: itkImageSliceIteratorTest.cxx,v $</span> <span class="comment"> Language: C++</span> <span class="comment"> Date: $Date: 2003-09-10 14:30:09 $</span> <span class="comment"> Version: $Revision: 1.12 $</span> <span class="comment"></span> <span class="comment"> Copyright (c) Insight Software Consortium. All rights reserved.</span> <span class="comment"> See ITKCopyright.txt or http://www.itk.org/HTML/Copyright.htm for details.</span> <span class="comment"></span> <span class="comment"> This software is distributed WITHOUT ANY WARRANTY; without even </span> <span class="comment"> the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR </span> <span class="comment"> PURPOSE. See the above copyright notices for more information.</span> <span class="comment"></span> <span class="comment">=========================================================================*/</span> <span class="preprocessor">#if defined(_MSC_VER)</span> <span class="preprocessor"></span><span class="preprocessor">#pragma warning ( disable : 4786 )</span> <span class="preprocessor"></span><span class="preprocessor">#endif</span> <span class="preprocessor"></span> <span class="preprocessor">#include <iostream></span> <span class="preprocessor">#include "<a class="code" href="itkImage_8h.html">itkImage.h</a>"</span> <span class="preprocessor">#include "<a class="code" href="itkImageSliceIteratorWithIndex_8h.html">itkImageSliceIteratorWithIndex.h</a>"</span> <span class="preprocessor">#include "<a class="code" href="itkImageSliceConstIteratorWithIndex_8h.html">itkImageSliceConstIteratorWithIndex.h</a>"</span> <span class="keywordtype">int</span> itkImageSliceIteratorTest(<span class="keywordtype">int</span>, <span class="keywordtype">char</span>* [] ) { std::cout << <span class="stringliteral">"Creating an image of indices"</span> << std::endl; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> ImageDimension = 3; <span class="keyword">typedef</span> <a name="_a0"></a><a class="code" href="classitk_1_1Index.html" title="Represent a n-dimensional index in a n-dimensional image.">itk::Index< ImageDimension ></a> PixelType; <span class="keyword">typedef</span> <a name="_a1"></a><a class="code" href="classitk_1_1Image.html" title="Templated n-dimensional image class.">itk::Image< PixelType, ImageDimension ></a> ImageType; <a name="a2"></a><a class="code" href="itkFEMMacro_8h.html#539cce1a3282ba59952dedcbf9cdb23f">ImageType::Pointer</a> myImage = <a name="a3"></a><a class="code" href="namespaceHardConnectedComponentImageFilter.html#870262f145e0b45206db74df8053b59c">ImageType::New</a>(); <a name="a4"></a><a class="code" href="namespaceHardConnectedComponentImageFilter.html#5bf82236e1e50e653de84c8ead448599">ImageType::SizeType</a> size; size[0] = 100; size[1] = 100; size[2] = 100; <a name="a5"></a><a class="code" href="namespaceHardConnectedComponentImageFilter.html#be32dc19e71d40322ad9828b9ab40853">ImageType::IndexType</a> start; start.Fill(0); <a name="a6"></a><a class="code" href="namespaceHardConnectedComponentImageFilter.html#ed8c4a40607d317c666eb96ea265e126">ImageType::RegionType</a> region; region.SetIndex( start ); region.SetSize( size ); myImage->SetLargestPossibleRegion( region ); myImage->SetBufferedRegion( region ); myImage->SetRequestedRegion( region ); myImage->Allocate(); <span class="keyword">typedef</span> <a name="_a7"></a><a class="code" href="classitk_1_1ImageSliceIteratorWithIndex.html" title="A multi-dimensional image iterator that extends the ImageLinearIteratorWithIndex...">itk::ImageSliceIteratorWithIndex< ImageType ></a> IteratorType; <span class="keyword">typedef</span> <a name="_a8"></a><a class="code" href="classitk_1_1ImageSliceConstIteratorWithIndex.html" title="Multi-dimensional image iterator which only walks a region.">itk::ImageSliceConstIteratorWithIndex< ImageType ></a> ConstIteratorType; IteratorType it( myImage, region ); it.GoToBegin(); it.SetFirstDirection( 0 ); <span class="comment">// 0=x, 1=y, 2=z</span> it.SetSecondDirection( 1 ); <span class="comment">// 0=x, 1=y, 2=z</span> <a class="code" href="namespaceHardConnectedComponentImageFilter.html#be32dc19e71d40322ad9828b9ab40853">ImageType::IndexType</a> index; <span class="keywordflow">while</span>( !it.IsAtEnd() ) { <span class="keywordflow">while</span>( !it.IsAtEndOfSlice() ) { <span class="keywordflow">while</span>( !it.IsAtEndOfLine() ) { index = it.GetIndex(); it.Set( index ); ++it; } it.NextLine(); } it.NextSlice(); } { <span class="comment">// Verification </span> std::cout << <span class="stringliteral">"Verifying for iterator..."</span>; IteratorType ot( myImage, region ); ot.GoToBegin(); ot.SetFirstDirection( 0 ); <span class="comment">// 0=x, 1=y, 2=z</span> ot.SetSecondDirection( 1 ); <span class="comment">// 0=x, 1=y, 2=z</span> <span class="keywordflow">while</span>( !ot.IsAtEnd() ) { <span class="keywordflow">while</span>( !ot.IsAtEndOfSlice() ) { <span class="keywordflow">while</span>( !ot.IsAtEndOfLine() ) { index = ot.GetIndex(); <span class="keywordflow">if</span>( ot.Get() != index ) { std::cerr << <span class="stringliteral">"Values don't correspond to what was stored "</span> << std::endl; std::cerr << <span class="stringliteral">"Test failed at index "</span>; std::cerr << index << std::endl; std::cerr << <span class="stringliteral">"It should be "</span>; std::cerr << ot.Get() << std::endl; <span class="keywordflow">return</span> EXIT_FAILURE; } ++ot; } ot.NextLine(); } ot.NextSlice(); } std::cout << <span class="stringliteral">" Done !"</span> << std::endl; <span class="comment">// Verification </span> std::cout << <span class="stringliteral">"Verifying for const iterator..."</span>; ConstIteratorType cot( myImage, region ); cot.GoToBegin(); cot.SetFirstDirection( 0 ); <span class="comment">// 0=x, 1=y, 2=z</span> cot.SetSecondDirection( 1 ); <span class="comment">// 0=x, 1=y, 2=z</span> <span class="keywordflow">while</span>( !cot.IsAtEnd() ) { <span class="keywordflow">while</span>( !cot.IsAtEndOfSlice() ) { <span class="keywordflow">while</span>( !cot.IsAtEndOfLine() ) { index = cot.GetIndex(); <span class="keywordflow">if</span>( cot.Get() != index ) { std::cerr << <span class="stringliteral">"Values don't correspond to what was stored "</span> << std::endl; std::cerr << <span class="stringliteral">"Test failed at index "</span>; std::cerr << index << std::endl; std::cerr << <span class="stringliteral">"It should be "</span>; std::cerr << cot.Get() << std::endl; <span class="keywordflow">return</span> EXIT_FAILURE; } ++cot; } cot.NextLine(); } cot.NextSlice(); } std::cout << <span class="stringliteral">" Done !"</span> << std::endl; <span class="comment">// Verification </span> std::cout << <span class="stringliteral">"Verifying iterator in reverse direction... "</span>; IteratorType ior( myImage, region ); ior.GoToReverseBegin(); ior.SetFirstDirection( 0 ); <span class="comment">// 0=x, 1=y, 2=z</span> ior.SetSecondDirection( 1 ); <span class="comment">// 0=x, 1=y, 2=z</span> <span class="keywordflow">while</span>( !ior.IsAtReverseEnd() ) { <span class="keywordflow">while</span>( !ior.IsAtReverseEndOfSlice() ) { <span class="keywordflow">while</span>( !ior.IsAtReverseEndOfLine() ) { index = ior.GetIndex(); <span class="keywordflow">if</span>( ior.Get() != index ) { std::cerr << <span class="stringliteral">"Values don't correspond to what was stored "</span> << std::endl; std::cerr << <span class="stringliteral">"Test failed at index "</span>; std::cerr << index << <span class="stringliteral">" value is "</span> << ior.Get() << std::endl; <span class="keywordflow">return</span> EXIT_FAILURE; } --ior; } ior.PreviousLine(); } ior.PreviousSlice(); } std::cout << <span class="stringliteral">" Done ! "</span> << std::endl; <span class="comment">// Verification </span> std::cout << <span class="stringliteral">"Verifying const iterator in reverse direction... "</span>; ConstIteratorType cor( myImage, region ); cor.GoToReverseBegin(); cor.SetFirstDirection( 0 ); <span class="comment">// 0=x, 1=y, 2=z</span> cor.SetSecondDirection( 1 ); <span class="comment">// 0=x, 1=y, 2=z</span> <span class="keywordflow">while</span>( !cor.IsAtReverseEnd() ) { <span class="keywordflow">while</span>( !cor.IsAtReverseEndOfSlice() ) { <span class="keywordflow">while</span>( !cor.IsAtReverseEndOfLine() ) { index = cor.GetIndex(); <span class="keywordflow">if</span>( cor.Get() != index ) { std::cerr << <span class="stringliteral">"Values don't correspond to what was stored "</span> << std::endl; std::cerr << <span class="stringliteral">"Test failed at index "</span>; std::cerr << index << <span class="stringliteral">" value is "</span> << cor.Get() << std::endl; <span class="keywordflow">return</span> EXIT_FAILURE; } --cor; } cor.PreviousLine(); } cor.PreviousSlice(); } std::cout << <span class="stringliteral">" Done ! "</span> << std::endl; } { <span class="comment">// Verification </span> std::cout << <span class="stringliteral">"Test in a region < LargestPossibleRegion"</span> << std::endl; std::cout << <span class="stringliteral">"Verifying for iterator..."</span>; size[0] = 50; size[1] = 50; size[2] = 50; start[0] = 25; start[1] = 25; start[2] = 25; region.SetIndex( start ); region.SetSize( size ); IteratorType ot( myImage, region ); ot.GoToBegin(); ot.SetFirstDirection( 0 ); <span class="comment">// 0=x, 1=y, 2=z</span> ot.SetSecondDirection( 1 ); <span class="comment">// 0=x, 1=y, 2=z</span> <span class="keywordflow">while</span>( !ot.IsAtEnd() ) { <span class="keywordflow">while</span>( !ot.IsAtEndOfSlice() ) { <span class="keywordflow">while</span>( !ot.IsAtEndOfLine() ) { index = ot.GetIndex(); <span class="keywordflow">if</span>( ot.Get() != index ) { std::cerr << <span class="stringliteral">"Values don't correspond to what was stored "</span> << std::endl; std::cerr << <span class="stringliteral">"Test failed at index "</span>; std::cerr << index << std::endl; std::cerr << <span class="stringliteral">"It should be "</span>; std::cerr << ot.Get() << std::endl; <span class="keywordflow">return</span> EXIT_FAILURE; } ++ot; } ot.NextLine(); } ot.NextSlice(); } std::cout << <span class="stringliteral">" Done !"</span> << std::endl; <span class="comment">// Verification </span> std::cout << <span class="stringliteral">"Verifying for const iterator..."</span>; ConstIteratorType cot( myImage, region ); cot.GoToBegin(); cot.SetFirstDirection( 0 ); <span class="comment">// 0=x, 1=y, 2=z</span> cot.SetSecondDirection( 1 ); <span class="comment">// 0=x, 1=y, 2=z</span> <span class="keywordflow">while</span>( !cot.IsAtEnd() ) { <span class="keywordflow">while</span>( !cot.IsAtEndOfSlice() ) { <span class="keywordflow">while</span>( !cot.IsAtEndOfLine() ) { index = cot.GetIndex(); <span class="keywordflow">if</span>( cot.Get() != index ) { std::cerr << <span class="stringliteral">"Values don't correspond to what was stored "</span> << std::endl; std::cerr << <span class="stringliteral">"Test failed at index "</span>; std::cerr << index << std::endl; std::cerr << <span class="stringliteral">"It should be "</span>; std::cerr << cot.Get() << std::endl; <span class="keywordflow">return</span> EXIT_FAILURE; } ++cot; } cot.NextLine(); } cot.NextSlice(); } std::cout << <span class="stringliteral">" Done !"</span> << std::endl; <span class="comment">// Verification </span> std::cout << <span class="stringliteral">"Verifying iterator in reverse direction... "</span>; IteratorType ior( myImage, region ); ior.GoToReverseBegin(); ior.SetFirstDirection( 0 ); <span class="comment">// 0=x, 1=y, 2=z</span> ior.SetSecondDirection( 1 ); <span class="comment">// 0=x, 1=y, 2=z</span> <span class="keywordflow">while</span>( !ior.IsAtReverseEnd() ) { <span class="keywordflow">while</span>( !ior.IsAtReverseEndOfSlice() ) { <span class="keywordflow">while</span>( !ior.IsAtReverseEndOfLine() ) { index = ior.GetIndex(); <span class="keywordflow">if</span>( ior.Get() != index ) { std::cerr << <span class="stringliteral">"Values don't correspond to what was stored "</span> << std::endl; std::cerr << <span class="stringliteral">"Test failed at index "</span>; std::cerr << index << <span class="stringliteral">" value is "</span> << ior.Get() << std::endl; <span class="keywordflow">return</span> EXIT_FAILURE; } --ior; } ior.PreviousLine(); } ior.PreviousSlice(); } std::cout << <span class="stringliteral">" Done ! "</span> << std::endl; <span class="comment">// Verification </span> std::cout << <span class="stringliteral">"Verifying const iterator in reverse direction... "</span>; ConstIteratorType cor( myImage, region ); cor.GoToReverseBegin(); cor.SetFirstDirection( 0 ); <span class="comment">// 0=x, 1=y, 2=z</span> cor.SetSecondDirection( 1 ); <span class="comment">// 0=x, 1=y, 2=z</span> <span class="keywordflow">while</span>( !cor.IsAtReverseEnd() ) { <span class="keywordflow">while</span>( !cor.IsAtReverseEndOfSlice() ) { <span class="keywordflow">while</span>( !cor.IsAtReverseEndOfLine() ) { index = cor.GetIndex(); <span class="keywordflow">if</span>( cor.Get() != index ) { std::cerr << <span class="stringliteral">"Values don't correspond to what was stored "</span> << std::endl; std::cerr << <span class="stringliteral">"Test failed at index "</span>; std::cerr << index << <span class="stringliteral">" value is "</span> << cor.Get() << std::endl; <span class="keywordflow">return</span> EXIT_FAILURE; } --cor; } cor.PreviousLine(); } cor.PreviousSlice(); } std::cout << <span class="stringliteral">" Done ! "</span> << std::endl; } std::cout << <span class="stringliteral">"Test passed"</span> << std::endl; <span class="keywordflow">return</span> EXIT_SUCCESS; } </pre></div> </div> <hr><address><small> Generated at Thu May 7 22:04:07 2009 for ITK by <a href="http://www.stack.nl/~dimitri/doxygen/index.html"> <img src="http://www.stack.nl/~dimitri/doxygen/doxygen.png" alt="doxygen" align="middle" border=0 width=110 height=53> </a> 1.5.9 written by <a href="mailto:dimitri@stack.nl">Dimitri van Heesch</a>, © 1997-2000</small></address> </body> </html>