VTK  9.2.6
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 =========================================================================*/
49 #ifndef vtkImageStencilData_h
50 #define vtkImageStencilData_h
51 
52 #include "vtkDataObject.h"
53 #include "vtkImagingCoreModule.h" // For export macro
54 
55 class VTKIMAGINGCORE_EXPORT vtkImageStencilData : public vtkDataObject
56 {
57 public:
60  void PrintSelf(ostream& os, vtkIndent indent) override;
61 
62  void Initialize() override;
63  void DeepCopy(vtkDataObject* o) override;
64  void ShallowCopy(vtkDataObject* f) override;
66 
70  int GetDataObjectType() override { return VTK_IMAGE_STENCIL_DATA; }
71 
75  int GetExtentType() override { return VTK_3D_EXTENT; }
76 
86  int GetNextExtent(int& r1, int& r2, int xMin, int xMax, int yIdx, int zIdx, int& iter);
87 
94  int IsInside(int xIdx, int yIdx, int zIdx);
95 
103  void InsertNextExtent(int r1, int r2, int yIdx, int zIdx);
104 
113  void InsertAndMergeExtent(int r1, int r2, int yIdx, int zIdx);
114 
118  void RemoveExtent(int r1, int r2, int yIdx, int zIdx);
119 
121 
127  vtkSetVector3Macro(Spacing, double);
128  vtkGetVector3Macro(Spacing, double);
130 
132 
138  vtkSetVector3Macro(Origin, double);
139  vtkGetVector3Macro(Origin, double);
141 
143 
148  void SetExtent(const int extent[6]);
149  void SetExtent(int x1, int x2, int y1, int y2, int z1, int z2);
150  vtkGetVector6Macro(Extent, int);
152 
158 
162  void Fill();
163 
165 
172 
174 
180 
184  virtual void Add(vtkImageStencilData*);
185 
191 
196  virtual void Replace(vtkImageStencilData*);
197 
202  virtual int Clip(int extent[6]);
203 
204 protected:
207 
209  {
211  Erase
212  };
213 
217  void LogicalOperationExtent(int r1, int r2, int yIdx, int zIdx, Operation operation);
218 
223 
229  void ChangeExtent(const int extent[6]);
230 
235 
237 
240  double Spacing[3];
241  double Origin[3];
243 
244  int Extent[6];
245 
247 
252  int** ExtentLists;
254 
255 private:
256  vtkImageStencilData(const vtkImageStencilData&) = delete;
257  void operator=(const vtkImageStencilData&) = delete;
258 
259  friend class vtkImageStencilIteratorFriendship;
260 };
261 
268 class VTKIMAGINGCORE_EXPORT vtkImageStencilRaster
269 {
270 public:
274  vtkImageStencilRaster(const int wholeExtent[2]);
275 
280 
286  void PrepareForNewData(const int allocateExtent[2] = nullptr);
287 
289 
292  void InsertLine(const double pt1[2], const double pt2[2]);
294 
299  void FillStencilData(vtkImageStencilData* data, const int extent[6], int xj = 0, int yj = 1);
300 
304  void SetTolerance(double tol) { this->Tolerance = tol; }
305  double GetTolerance() { return this->Tolerance; }
306 
307 protected:
312  void PrepareExtent(int ymin, int ymax);
313 
319  void InsertPoint(int y, double x, int i);
320 
321  int Extent[2];
322  int UsedExtent[2];
323  double** Raster;
324  double Tolerance;
325 
326 private:
328  void operator=(const vtkImageStencilRaster&) = delete;
329 };
330 
331 #endif
general representation of visualization data
efficient description of an image stencil
void CopyInformationToPipeline(vtkInformation *info) override
Override these to handle origin, spacing, scalar type, and scalar number of components.
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
Shallow and Deep copy.
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)
Set the extent of the data.
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
Returns VTK_IMAGE_STENCIL_DATA.
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.
int ** ExtentLists
The actual 'data' is stored here.
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.
int * ExtentListLengths
The actual 'data' is stored here.
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)
Retrieve an instance of this class from an information object.
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 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 pt1[2], const double pt2[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:119
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
#define VTK_IMAGE_STENCIL_DATA
Definition: vtkType.h:125