VTK  9.0.1
vtkImageStencilData.h
Go to the documentation of this file.
1 /*=========================================================================
2 
3  Program: Visualization Toolkit
4  Module: vtkImageStencilData.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 =========================================================================*/
27 #ifndef vtkImageStencilData_h
28 #define vtkImageStencilData_h
29 
30 #include "vtkDataObject.h"
31 #include "vtkImagingCoreModule.h" // For export macro
32 
33 class VTKIMAGINGCORE_EXPORT vtkImageStencilData : public vtkDataObject
34 {
35 public:
38  void PrintSelf(ostream& os, vtkIndent indent) override;
39 
40  void Initialize() override;
41  void DeepCopy(vtkDataObject* o) override;
42  void ShallowCopy(vtkDataObject* f) override;
44 
49  int GetDataObjectType() override { return VTK_DATA_OBJECT; }
50 
54  int GetExtentType() override { return VTK_3D_EXTENT; }
55 
65  int GetNextExtent(int& r1, int& r2, int xMin, int xMax, int yIdx, int zIdx, int& iter);
66 
73  int IsInside(int xIdx, int yIdx, int zIdx);
74 
82  void InsertNextExtent(int r1, int r2, int yIdx, int zIdx);
83 
92  void InsertAndMergeExtent(int r1, int r2, int yIdx, int zIdx);
93 
97  void RemoveExtent(int r1, int r2, int yIdx, int zIdx);
98 
100 
106  vtkSetVector3Macro(Spacing, double);
107  vtkGetVector3Macro(Spacing, double);
109 
111 
117  vtkSetVector3Macro(Origin, double);
118  vtkGetVector3Macro(Origin, double);
120 
122 
127  void SetExtent(const int extent[6]);
128  void SetExtent(int x1, int x2, int y1, int y2, int z1, int z2);
129  vtkGetVector6Macro(Extent, int);
131 
137 
141  void Fill();
142 
144 
151 
153 
159 
163  virtual void Add(vtkImageStencilData*);
164 
170 
175  virtual void Replace(vtkImageStencilData*);
176 
181  virtual int Clip(int extent[6]);
182 
183 protected:
186 
188  {
190  Erase
191  };
192 
196  void LogicalOperationExtent(int r1, int r2, int yIdx, int zIdx, Operation operation);
197 
202 
208  void ChangeExtent(const int extent[6]);
209 
214 
216 
219  double Spacing[3];
220  double Origin[3];
222 
223  int Extent[6];
224 
226 
231  int** ExtentLists;
233 
234 private:
235  vtkImageStencilData(const vtkImageStencilData&) = delete;
236  void operator=(const vtkImageStencilData&) = delete;
237 
238  friend class vtkImageStencilIteratorFriendship;
239 };
240 
247 class VTKIMAGINGCORE_EXPORT vtkImageStencilRaster
248 {
249 public:
253  vtkImageStencilRaster(const int wholeExtent[2]);
254 
259 
265  void PrepareForNewData(const int allocateExtent[2] = nullptr);
266 
268 
271  void InsertLine(const double p1[2], const double p2[2]);
272  VTK_LEGACY(void InsertLine(const double[2], const double[2], bool, bool));
274 
279  void FillStencilData(vtkImageStencilData* data, const int extent[6], int xj = 0, int yj = 1);
280 
284  void SetTolerance(double tol) { this->Tolerance = tol; }
285  double GetTolerance() { return this->Tolerance; }
286 
287 protected:
292  void PrepareExtent(int ymin, int ymax);
293 
299  void InsertPoint(int y, double x, int i);
300 
301  int Extent[2];
302  int UsedExtent[2];
303  double** Raster;
304  double Tolerance;
305 
306 private:
308  void operator=(const vtkImageStencilRaster&) = delete;
309 };
310 
311 #endif
general representation of visualization data
Definition: vtkDataObject.h:60
efficient description of an image stencil
void CopyInformationToPipeline(vtkInformation *info) override
int NumberOfExtentEntries
The actual 'data' is stored here.
virtual int Clip(int extent[6])
Clip the stencil with the supplied extents.
void InsertAndMergeExtent(int r1, int r2, int yIdx, int zIdx)
Similar to InsertNextExtent, except that the extent (r1,r2) at yIdx, zIdx is merged with other extent...
void Initialize() override
Restore data object to initial state,.
void DeepCopy(vtkDataObject *o) override
void LogicalOperationInPlace(vtkImageStencilData *stencil, Operation operation)
Combine with the given stencil, using the given operation.
void InsertNextExtent(int r1, int r2, int yIdx, int zIdx)
This method is used by vtkImageStencilDataSource to add an x sub extent [r1,r2] for the x row (yIdx,...
~vtkImageStencilData() override
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
void Fill()
Fill the sub-extents.
void AllocateExtents()
Allocate space for the sub-extents.
void SetExtent(int x1, int x2, int y1, int y2, int z1, int z2)
void InternalImageStencilDataCopy(vtkImageStencilData *s)
int GetNextExtent(int &r1, int &r2, int xMin, int xMax, int yIdx, int zIdx, int &iter)
Given the total output x extent [xMin,xMax] and the current y, z indices, return each sub-extent [r1,...
void CopyInformationFromPipeline(vtkInformation *info) override
Override these to handle origin, spacing, scalar type, and scalar number of components.
virtual void Add(vtkImageStencilData *)
Add merges the stencil supplied as argument into Self.
int GetDataObjectType() override
Get the data type as an integer (this will return VTK_DATA_OBJECT for now, maybe a proper type consta...
void RemoveExtent(int r1, int r2, int yIdx, int zIdx)
Remove the extent from (r1,r2) at yIdx, zIdx.
static vtkImageStencilData * GetData(vtkInformation *info)
Retrieve an instance of this class from an information object.
static vtkImageStencilData * New()
int IsInside(int xIdx, int yIdx, int zIdx)
Checks if an image index is inside the stencil.
virtual void Subtract(vtkImageStencilData *)
Subtract removes the portion of the stencil, supplied as argument, that lies within Self from Self.
void LogicalOperationExtent(int r1, int r2, int yIdx, int zIdx, Operation operation)
Apply the given operation over the given (r1, r2) extent.
void CopyOriginAndSpacingFromPipeline(vtkInformation *info)
Get important info from pipeline.
void SetExtent(const int extent[6])
Set the extent of the data.
void ShallowCopy(vtkDataObject *f) override
Shallow and Deep copy.
static vtkImageStencilData * GetData(vtkInformationVector *v, int i=0)
int GetExtentType() override
The extent type is 3D, just like vtkImageData.
void ChangeExtent(const int extent[6])
Change the extent while preserving the data.
virtual void Replace(vtkImageStencilData *)
Replaces the portion of the stencil, supplied as argument, that lies within Self from Self.
This is a helper class for stencil creation.
void InsertLine(const double[2], const double[2], bool, bool)
void FillStencilData(vtkImageStencilData *data, const int extent[6], int xj=0, int yj=1)
Fill the specified extent of a vtkImageStencilData with the raster, after permuting the raster accord...
~vtkImageStencilRaster()
Destructor.
void SetTolerance(double tol)
The tolerance for float-to-int conversions.
void PrepareForNewData(const int allocateExtent[2]=nullptr)
Reset the raster to its original state, but keep the same whole extent.
void InsertLine(const double p1[2], const double p2[2])
Insert a line into the raster, given the two end points.
void PrepareExtent(int ymin, int ymax)
Ensure that the raster is initialized for the specified range of y values, which must be within the E...
vtkImageStencilRaster(const int wholeExtent[2])
Create a raster with the specified whole y extent.
void InsertPoint(int y, double x, int i)
Insert an x point into the raster.
a simple class to control print indentation
Definition: vtkIndent.h:34
Store zero or more vtkInformation instances.
Store vtkAlgorithm input/output information.
@ info
Definition: vtkX3D.h:382
@ extent
Definition: vtkX3D.h:351
@ data
Definition: vtkX3D.h:321
#define VTK_3D_EXTENT
Definition: vtkDataObject.h:56
#define VTK_DATA_OBJECT
Definition: vtkType.h:92