You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
nmWTAI-Platform/3rd/VTK7.1/include/vtkImageStencilIterator.h

166 lines
4.5 KiB
C

/*=========================================================================
Program: Visualization Toolkit
Module: vtkImageStencilIterator.h
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.
=========================================================================*/
/**
* @class vtkImageStencilIterator
* @brief an image region iterator
*
* This is an image iterator that can be used to iterate over a
* region of an image.
*
* @sa
* vtkImageData vtkImageStencilData vtkImageProgressIterator
*/
#ifndef vtkImageStencilIterator_h
#define vtkImageStencilIterator_h
#include "vtkImagePointDataIterator.h"
template<class DType>
class VTKIMAGINGCORE_EXPORT vtkImageStencilIterator :
public vtkImagePointDataIterator
{
public:
//@{
/**
* Default constructor, its use must be followed by Initialize().
*/
vtkImageStencilIterator()
{
this->Increment = 0;
this->BasePointer = 0;
this->Pointer = 0;
this->SpanEndPointer = 0;
}
//@}
//@{
/**
* Create an iterator for the given image, with several options.
* If a stencil is provided, then the iterator's IsInStencil() method
* reports whether each span is inside the stencil. If an extent is
* provided, it iterates over the extent and ignores the rest of the
* image (the provided extent must be within the image extent). If
* a pointer to the algorithm is provided and threadId is set to zero,
* then progress events will provided for the algorithm.
*/
vtkImageStencilIterator(vtkImageData *image,
vtkImageStencilData *stencil=0,
const int extent[6] = 0,
vtkAlgorithm *algorithm=0,
int threadId=0)
: vtkImagePointDataIterator(image, extent, stencil, algorithm, threadId)
{
this->BasePointer = static_cast<DType *>(
vtkImagePointDataIterator::GetVoidPointer(image, 0, &this->Increment));
this->UpdatePointer();
}
//@}
//@{
/**
* Initialize an iterator. See constructor for more details.
*/
void Initialize(vtkImageData *image,
vtkImageStencilData *stencil=0,
const int extent[6] = 0,
vtkAlgorithm *algorithm=0,
int threadId=0)
{
this->vtkImagePointDataIterator::Initialize(
image, extent, stencil, algorithm, threadId);
this->BasePointer = static_cast<DType *>(
vtkImagePointDataIterator::GetVoidPointer(image, 0, &this->Increment));
this->UpdatePointer();
}
//@}
//@{
/**
* Move the iterator to the beginning of the next span.
* A span is a contiguous region of the image over which nothing but
* the point Id and the X index changes.
*/
void NextSpan()
{
this->vtkImagePointDataIterator::NextSpan();
this->UpdatePointer();
}
//@}
/**
* Test if the iterator has completed iterating over the entire extent.
*/
bool IsAtEnd()
{
return this->vtkImagePointDataIterator::IsAtEnd();
}
/**
* Return a pointer to the beginning of the current span.
*/
DType *BeginSpan()
{
return this->Pointer;
}
/**
* Return a pointer to the end of the current span.
*/
DType *EndSpan()
{
return this->SpanEndPointer;
}
protected:
//@{
/**
* Update the pointer (called automatically when a new span begins).
*/
void UpdatePointer()
{
this->Pointer = this->BasePointer + this->Id*this->Increment;
this->SpanEndPointer = this->BasePointer + this->SpanEnd*this->Increment;
}
//@}
// The pointer must be incremented by this amount for each pixel.
int Increment;
// Pointers
DType *BasePointer; // pointer to the first voxel
DType *Pointer; // current iterator position within data
DType *SpanEndPointer; // end of current span
};
#ifndef vtkImageStencilIterator_cxx
#ifdef _MSC_VER
#pragma warning (push)
// The following is needed when the vtkImageStencilIterator template
// class is declared dllexport and is used within vtkImagingCore
#pragma warning (disable: 4910) // extern and dllexport incompatible
#endif
vtkExternTemplateMacro(
extern template class VTKIMAGINGCORE_EXPORT vtkImageStencilIterator
)
#ifdef _MSC_VER
#pragma warning (pop)
#endif
#endif
#endif
// VTK-HeaderTest-Exclude: vtkImageStencilIterator.h