VTK  9.1.0
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
Superclass for all sources, filters, and sinks in VTK.
Definition: vtkAlgorithm.h:64
topologically and geometrically regular array of data
Definition: vtkImageData.h:48
iterate over point data in an image.
void NextSpan()
Move the iterator to the beginning of the next span.
static void * GetVoidPointer(vtkImageData *image, vtkIdType i=0, int *pixelIncrement=nullptr)
Get a void pointer and pixel increment for the given point Id.
bool IsAtEnd()
Test if the iterator has completed iterating over the entire extent.
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
an image region iterator
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.
void NextSpan()
Move the iterator to the beginning of the next span.
void UpdatePointer()
Update the pointer (called automatically when a new span begins).
DType * EndSpan()
Return a pointer to the end of the current span.
bool IsAtEnd()
Test if the iterator has completed iterating over the entire extent.
void Initialize(vtkImageData *image, vtkImageStencilData *stencil=nullptr, const int extent[6]=nullptr, vtkAlgorithm *algorithm=nullptr, int threadId=0)
Initialize an iterator.
vtkImageStencilIterator()
Default constructor, its use must be followed by Initialize().
DType * BeginSpan()
Return a pointer to the beginning of the current span.
@ extent
Definition: vtkX3D.h:351
@ image
Definition: vtkX3D.h:380
vtkExternTemplateMacro(extern template class VTKIMAGINGCORE_EXPORT vtkImageStencilIterator)