/*========================================================================= Program: Visualization Toolkit Module: vtkImageIterator.txx Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen All rights reserved. See Copyright.txt or http://www.kitware.com/Copyright.htm for details. This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the above copyright notice for more information. =========================================================================*/ // Include blockers needed since vtkImageIterator.h includes this file // when VTK_NO_EXPLICIT_TEMPLATE_INSTANTIATION is defined. #ifndef __vtkImageIterator_txx #define __vtkImageIterator_txx #include "vtkImageIterator.h" #include "vtkImageData.h" //---------------------------------------------------------------------------- template vtkImageIterator::vtkImageIterator() { this->Pointer = 0; this->EndPointer = 0; this->SpanEndPointer = 0; this->SliceEndPointer = 0; } //---------------------------------------------------------------------------- template void vtkImageIterator::Initialize(vtkImageData *id, int *ext) { this->Pointer = static_cast(id->GetScalarPointerForExtent(ext)); id->GetIncrements(this->Increments[0], this->Increments[1], this->Increments[2]); id->GetContinuousIncrements(ext,this->ContinuousIncrements[0], this->ContinuousIncrements[1], this->ContinuousIncrements[2]); this->EndPointer = static_cast(id->GetScalarPointer(ext[1],ext[3],ext[5])) +this->Increments[0]; // if the extent is empty then the end pointer should equal the beg pointer if (ext[1] < ext[0] || ext[3] < ext[2] || ext[5] < ext[4]) { this->EndPointer = this->Pointer; } this->SpanEndPointer = this->Pointer + this->Increments[0]*(ext[1] - ext[0] + 1); this->SliceEndPointer = this->Pointer + this->Increments[1]*(ext[3] - ext[2] + 1); } //---------------------------------------------------------------------------- template vtkImageIterator::vtkImageIterator(vtkImageData *id, int *ext) { this->Initialize(id, ext); } //---------------------------------------------------------------------------- template void vtkImageIterator::NextSpan() { this->Pointer += this->Increments[1]; this->SpanEndPointer += this->Increments[1]; if (this->Pointer >= this->SliceEndPointer) { this->Pointer += this->ContinuousIncrements[2]; this->SpanEndPointer += this->ContinuousIncrements[2]; this->SliceEndPointer += this->Increments[2]; } } #endif