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 =========================================================================*/
27 #ifndef vtkImageStencilData_h
28 #define vtkImageStencilData_h
29 
30 
31 #include "vtkImagingCoreModule.h" // For export macro
32 #include "vtkDataObject.h"
33 
34 class VTKIMAGINGCORE_EXPORT vtkImageStencilData : public vtkDataObject
35 {
36 public:
37  static vtkImageStencilData *New();
39  void PrintSelf(ostream& os, vtkIndent indent) VTK_OVERRIDE;
40 
41  void Initialize() VTK_OVERRIDE;
42  void DeepCopy(vtkDataObject *o) VTK_OVERRIDE;
43  void ShallowCopy(vtkDataObject *f) VTK_OVERRIDE;
44  void InternalImageStencilDataCopy(vtkImageStencilData *s);
45 
50  int GetDataObjectType() VTK_OVERRIDE { return VTK_DATA_OBJECT; }
51 
55  int GetExtentType() VTK_OVERRIDE { return VTK_3D_EXTENT; };
56 
66  int GetNextExtent(int &r1, int &r2, int xMin, int xMax,
67  int yIdx, int zIdx, int &iter);
68 
75  int IsInside(int xIdx, int yIdx, int zIdx);
76 
84  void InsertNextExtent(int r1, int r2, int yIdx, int zIdx);
85 
94  void InsertAndMergeExtent(int r1, int r2, int yIdx, int zIdx);
95 
99  void RemoveExtent(int r1, int r2, int yIdx, int zIdx);
100 
102 
108  vtkSetVector3Macro(Spacing, double);
109  vtkGetVector3Macro(Spacing, double);
111 
113 
119  vtkSetVector3Macro(Origin, double);
120  vtkGetVector3Macro(Origin, double);
122 
124 
129  void SetExtent(int extent[6]);
130  void SetExtent(int x1, int x2, int y1, int y2, int z1, int z2);
131  vtkGetVector6Macro(Extent, int);
133 
138  void AllocateExtents();
139 
143  void Fill();
144 
146 
150  void CopyInformationFromPipeline(vtkInformation *info) VTK_OVERRIDE;
151  void CopyInformationToPipeline(vtkInformation *info) VTK_OVERRIDE;
153 
155 
159  static vtkImageStencilData* GetData(vtkInformationVector* v, int i=0);
161 
165  virtual void Add(vtkImageStencilData *);
166 
171  virtual void Subtract(vtkImageStencilData *);
172 
177  virtual void Replace(vtkImageStencilData *);
178 
183  virtual int Clip(int extent[6]);
184 
185 protected:
187  ~vtkImageStencilData() VTK_OVERRIDE;
188 
189  enum Operation { Merge, Erase };
190 
194  void LogicalOperationExtent(
195  int r1, int r2, int yIdx, int zIdx, Operation operation);
196 
200  void LogicalOperationInPlace(
201  vtkImageStencilData *stencil, Operation operation);
202 
208  void ChangeExtent(const int extent[6]);
209 
213  void CopyOriginAndSpacingFromPipeline(vtkInformation *info);
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&) VTK_DELETE_FUNCTION;
236  void operator=(const vtkImageStencilData&) VTK_DELETE_FUNCTION;
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] = 0);
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],
280  int xj = 0, int yj = 1);
281 
285  void SetTolerance(double tol) { this->Tolerance = tol; }
286  double GetTolerance() { return this->Tolerance; }
287 
288 protected:
293  void PrepareExtent(int ymin, int ymax);
294 
300  void InsertPoint(int y, double x, int i);
301 
302  int Extent[2];
303  int UsedExtent[2];
304  double **Raster;
305  double Tolerance;
306 
307 private:
308  vtkImageStencilRaster(const vtkImageStencilRaster&) VTK_DELETE_FUNCTION;
309  void operator=(const vtkImageStencilRaster&) VTK_DELETE_FUNCTION;
310 };
311 
312 #endif
313 
314 
315 
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:55
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:33
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:58
virtual void CopyInformationToPipeline(vtkInformation *vtkNotUsed(info))
Copy information from this data object to the pipeline information.
#define VTK_DATA_OBJECT
Definition: vtkType.h:98
int * ExtentListLengths
The actual 'data' is stored here.