VTK
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 =========================================================================*/
30 #ifndef vtkImageStencilData_h
31 #define vtkImageStencilData_h
32 
33 
34 #include "vtkImagingCoreModule.h" // For export macro
35 #include "vtkDataObject.h"
36 
37 class VTKIMAGINGCORE_EXPORT vtkImageStencilData : public vtkDataObject
38 {
39 public:
40  static vtkImageStencilData *New();
42  void PrintSelf(ostream& os, vtkIndent indent) override;
43 
44  void Initialize() override;
45  void DeepCopy(vtkDataObject *o) override;
46  void ShallowCopy(vtkDataObject *f) override;
47  void InternalImageStencilDataCopy(vtkImageStencilData *s);
48 
53  int GetDataObjectType() override { return VTK_DATA_OBJECT; }
54 
58  int GetExtentType() override { return VTK_3D_EXTENT; };
59 
69  int GetNextExtent(int &r1, int &r2, int xMin, int xMax,
70  int yIdx, int zIdx, int &iter);
71 
78  int IsInside(int xIdx, int yIdx, int zIdx);
79 
87  void InsertNextExtent(int r1, int r2, int yIdx, int zIdx);
88 
97  void InsertAndMergeExtent(int r1, int r2, int yIdx, int zIdx);
98 
102  void RemoveExtent(int r1, int r2, int yIdx, int zIdx);
103 
105 
111  vtkSetVector3Macro(Spacing, double);
112  vtkGetVector3Macro(Spacing, double);
114 
116 
122  vtkSetVector3Macro(Origin, double);
123  vtkGetVector3Macro(Origin, double);
125 
127 
132  void SetExtent(int extent[6]);
133  void SetExtent(int x1, int x2, int y1, int y2, int z1, int z2);
134  vtkGetVector6Macro(Extent, int);
136 
141  void AllocateExtents();
142 
146  void Fill();
147 
149 
154  void CopyInformationToPipeline(vtkInformation *info) override;
156 
158 
162  static vtkImageStencilData* GetData(vtkInformationVector* v, int i=0);
164 
168  virtual void Add(vtkImageStencilData *);
169 
174  virtual void Subtract(vtkImageStencilData *);
175 
180  virtual void Replace(vtkImageStencilData *);
181 
186  virtual int Clip(int extent[6]);
187 
188 protected:
190  ~vtkImageStencilData() override;
191 
192  enum Operation { Merge, Erase };
193 
197  void LogicalOperationExtent(
198  int r1, int r2, int yIdx, int zIdx, Operation operation);
199 
203  void LogicalOperationInPlace(
204  vtkImageStencilData *stencil, Operation operation);
205 
211  void ChangeExtent(const int extent[6]);
212 
216  void CopyOriginAndSpacingFromPipeline(vtkInformation *info);
217 
219 
222  double Spacing[3];
223  double Origin[3];
225 
226  int Extent[6];
227 
229 
234  int **ExtentLists;
236 
237 private:
238  vtkImageStencilData(const vtkImageStencilData&) = delete;
239  void operator=(const vtkImageStencilData&) = delete;
240 
241  friend class vtkImageStencilIteratorFriendship;
242 };
243 
250 class VTKIMAGINGCORE_EXPORT vtkImageStencilRaster
251 {
252 public:
256  vtkImageStencilRaster(const int wholeExtent[2]);
257 
262 
268  void PrepareForNewData(const int allocateExtent[2] = nullptr);
269 
271 
274  void InsertLine(const double p1[2], const double p2[2]);
275  VTK_LEGACY(void InsertLine(const double[2], const double[2], bool, bool));
277 
282  void FillStencilData(vtkImageStencilData *data, const int extent[6],
283  int xj = 0, int yj = 1);
284 
288  void SetTolerance(double tol) { this->Tolerance = tol; }
289  double GetTolerance() { return this->Tolerance; }
290 
291 protected:
296  void PrepareExtent(int ymin, int ymax);
297 
303  void InsertPoint(int y, double x, int i);
304 
305  int Extent[2];
306  int UsedExtent[2];
307  double **Raster;
308  double Tolerance;
309 
310 private:
312  void operator=(const vtkImageStencilRaster&) = delete;
313 };
314 
315 #endif
316 
317 
318 
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
static vtkDataObject * GetData(vtkInformation *info)
Retrieve an instance of this class from an information object.
int GetExtentType() override
The extent type is 3D, just like vtkImageData.
static vtkDataObject * New()
Store vtkAlgorithm input/output information.
This is a helper class for stencil creation.
#define VTK_3D_EXTENT
Definition: vtkDataObject.h:61
virtual void Initialize()
Restore data object to initial state,.
int NumberOfExtentEntries
The actual 'data' is stored here.
void SetTolerance(double tol)
The tolerance for float-to-int conversions.
a simple class to control print indentation
Definition: vtkIndent.h:39
efficient description of an image stencil
virtual void CopyInformationFromPipeline(vtkInformation *vtkNotUsed(info))
Copy from the pipeline information to the data object's own information.
int GetDataObjectType() override
Get the data type as an integer (this will return VTK_DATA_OBJECT for now, maybe a proper type consta...
Store zero or more vtkInformation instances.
int ** ExtentLists
The actual 'data' is stored here.
general representation of visualization data
Definition: vtkDataObject.h:64
virtual void CopyInformationToPipeline(vtkInformation *vtkNotUsed(info))
Copy information from this data object to the pipeline information.
virtual void DeepCopy(vtkDataObject *src)
Shallow and Deep copy.
virtual void ShallowCopy(vtkDataObject *src)
Shallow and Deep copy.
#define VTK_DATA_OBJECT
Definition: vtkType.h:98
int * ExtentListLengths
The actual 'data' is stored here.