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) VTK_OVERRIDE;
43 
44  void Initialize() VTK_OVERRIDE;
45  void DeepCopy(vtkDataObject *o) VTK_OVERRIDE;
46  void ShallowCopy(vtkDataObject *f) VTK_OVERRIDE;
47  void InternalImageStencilDataCopy(vtkImageStencilData *s);
48 
53  int GetDataObjectType() VTK_OVERRIDE { return VTK_DATA_OBJECT; }
54 
58  int GetExtentType() VTK_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 
153  virtual void CopyInformationFromPipeline(vtkInformation *info) VTK_OVERRIDE;
154  virtual void CopyInformationToPipeline(vtkInformation *info) VTK_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:
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&) VTK_DELETE_FUNCTION;
239  void operator=(const vtkImageStencilData&) VTK_DELETE_FUNCTION;
240 
241  friend class vtkImageStencilIteratorFriendship;
242 };
243 
250 class VTKIMAGINGCORE_EXPORT vtkImageStencilRaster
251 {
252 public:
256  vtkImageStencilRaster(const int wholeExtent[2]);
257 
261  ~vtkImageStencilRaster();
262 
268  void PrepareForNewData(const int allocateExtent[2] = 0);
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:
311  vtkImageStencilRaster(const vtkImageStencilRaster&) VTK_DELETE_FUNCTION;
312  void operator=(const vtkImageStencilRaster&) VTK_DELETE_FUNCTION;
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
void DeepCopy(vtkPistonReference *self, vtkPistonReference *other)
virtual void PrepareForNewData()
make the output data ready for new data to be inserted.
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.
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.
#define VTK_DATA_OBJECT
Definition: vtkType.h:94
int * ExtentListLengths
The actual 'data' is stored here.