VTK  9.0.1
vtkImageStencilIterator.h
Go to the documentation of this file.
1 /*=========================================================================
2 
3  Program: Visualization Toolkit
4  Module: vtkImageStencilIterator.h
5 
6  Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
7  All rights reserved.
8  See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
9 
10  This software is distributed WITHOUT ANY WARRANTY; without even
11  the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
12  PURPOSE. See the above copyright notice for more information.
13 
14 =========================================================================*/
26 #ifndef vtkImageStencilIterator_h
27 #define vtkImageStencilIterator_h
28 
30 
31 template <class DType>
32 class VTKIMAGINGCORE_EXPORT vtkImageStencilIterator : public vtkImagePointDataIterator
33 {
34 public:
36 
40  {
41  this->Increment = 0;
42  this->BasePointer = nullptr;
43  this->Pointer = nullptr;
44  this->SpanEndPointer = nullptr;
45  }
47 
49 
59  const int extent[6] = nullptr, vtkAlgorithm* algorithm = nullptr, int threadId = 0)
60  : vtkImagePointDataIterator(image, extent, stencil, algorithm, threadId)
61  {
62  this->BasePointer =
63  static_cast<DType*>(vtkImagePointDataIterator::GetVoidPointer(image, 0, &this->Increment));
64  this->UpdatePointer();
65  }
67 
69 
72  void Initialize(vtkImageData* image, vtkImageStencilData* stencil = nullptr,
73  const int extent[6] = nullptr, vtkAlgorithm* algorithm = nullptr, int threadId = 0)
74  {
75  this->vtkImagePointDataIterator::Initialize(image, extent, stencil, algorithm, threadId);
76  this->BasePointer =
77  static_cast<DType*>(vtkImagePointDataIterator::GetVoidPointer(image, 0, &this->Increment));
78  this->UpdatePointer();
79  }
81 
83 
88  void NextSpan()
89  {
91  this->UpdatePointer();
92  }
94 
98  bool IsAtEnd() { return this->vtkImagePointDataIterator::IsAtEnd(); }
99 
103  DType* BeginSpan() { return this->Pointer; }
104 
108  DType* EndSpan() { return this->SpanEndPointer; }
109 
110 protected:
112 
116  {
117  this->Pointer = this->BasePointer + this->Id * this->Increment;
118  this->SpanEndPointer = this->BasePointer + this->SpanEnd * this->Increment;
119  }
121 
122  // The pointer must be incremented by this amount for each pixel.
124 
125  // Pointers
126  DType* BasePointer; // pointer to the first voxel
127  DType* Pointer; // current iterator position within data
128  DType* SpanEndPointer; // end of current span
129 };
130 
131 #ifndef vtkImageStencilIterator_cxx
132 #ifdef _MSC_VER
133 #pragma warning(push)
134 // The following is needed when the vtkImageStencilIterator template
135 // class is declared dllexport and is used within vtkImagingCore
136 #pragma warning(disable : 4910) // extern and dllexport incompatible
137 #endif
138 vtkExternTemplateMacro(extern template class VTKIMAGINGCORE_EXPORT vtkImageStencilIterator);
139 #ifdef _MSC_VER
140 #pragma warning(pop)
141 #endif
142 #endif
143 
144 #endif
145 // VTK-HeaderTest-Exclude: vtkImageStencilIterator.h
DType * EndSpan()
Return a pointer to the end of the current span.
iterate over point data in an image.
vtkExternTemplateMacro(extern template class VTKIMAGINGCORE_EXPORT vtkImageStencilIterator)
bool IsAtEnd()
Test if the iterator has completed iterating over the entire extent.
void NextSpan()
Move the iterator to the beginning of the next span.
an image region iterator
DType * BeginSpan()
Return a pointer to the beginning of the current span.
Superclass for all sources, filters, and sinks in VTK.
Definition: vtkAlgorithm.h:62
void Initialize(vtkImageData *image, const int extent[6]=nullptr, vtkImageStencilData *stencil=nullptr, vtkAlgorithm *algorithm=nullptr, int threadId=0)
Initialize an iterator.
efficient description of an image stencil
topologically and geometrically regular array of data
Definition: vtkImageData.h:41
bool IsAtEnd()
Test if the iterator has completed iterating over the entire extent.
vtkImageStencilIterator(vtkImageData *image, vtkImageStencilData *stencil=nullptr, const int extent[6]=nullptr, vtkAlgorithm *algorithm=nullptr, int threadId=0)
Create an iterator for the given image, with several options.
vtkImageStencilIterator()
Default constructor, its use must be followed by Initialize().
void UpdatePointer()
Update the pointer (called automatically when a new span begins).
void Initialize(vtkImageData *image, vtkImageStencilData *stencil=nullptr, const int extent[6]=nullptr, vtkAlgorithm *algorithm=nullptr, int threadId=0)
Initialize an iterator.
static void * GetVoidPointer(vtkImageData *image, vtkIdType i=0, int *pixelIncrement=nullptr)
Get a void pointer and pixel increment for the given point Id.
void NextSpan()
Move the iterator to the beginning of the next span.