VTK  9.2.6
vtkEncodedGradientEstimator.h
Go to the documentation of this file.
1 /*=========================================================================
2 
3  Program: Visualization Toolkit
4  Module: vtkEncodedGradientEstimator.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 =========================================================================*/
15 
34 #ifndef vtkEncodedGradientEstimator_h
35 #define vtkEncodedGradientEstimator_h
36 
37 #include "vtkObject.h"
38 #include "vtkRenderingVolumeModule.h" // For export macro
39 #include "vtkThreads.h" // for VTK_MAX_THREADS
40 
41 class vtkImageData;
43 class vtkMultiThreader;
44 
45 class VTKRENDERINGVOLUME_EXPORT vtkEncodedGradientEstimator : public vtkObject
46 {
47 public:
49  void PrintSelf(ostream& os, vtkIndent indent) override;
50 
52 
60  virtual void SetInputData(vtkImageData*);
61  vtkGetObjectMacro(InputData, vtkImageData);
63 
65 
68  vtkSetMacro(GradientMagnitudeScale, float);
69  vtkGetMacro(GradientMagnitudeScale, float);
70  vtkSetMacro(GradientMagnitudeBias, float);
71  vtkGetMacro(GradientMagnitudeBias, float);
73 
75 
79  vtkSetClampMacro(BoundsClip, vtkTypeBool, 0, 1);
80  vtkGetMacro(BoundsClip, vtkTypeBool);
81  vtkBooleanMacro(BoundsClip, vtkTypeBool);
83 
85 
90  vtkSetVector6Macro(Bounds, int);
91  vtkGetVectorMacro(Bounds, int, 6);
93 
97  void Update(void);
98 
102  unsigned short* GetEncodedNormals(void);
103 
105 
108  int GetEncodedNormalIndex(vtkIdType xyzIndex);
109  int GetEncodedNormalIndex(int xIndex, int yIndex, int zIndex);
111 
115  unsigned char* GetGradientMagnitudes(void);
116 
118 
122  vtkSetClampMacro(NumberOfThreads, int, 1, VTK_MAX_THREADS);
123  vtkGetMacro(NumberOfThreads, int);
125 
127 
131  void SetDirectionEncoder(vtkDirectionEncoder* direnc);
132  vtkGetObjectMacro(DirectionEncoder, vtkDirectionEncoder);
134 
136 
142  vtkSetMacro(ComputeGradientMagnitudes, vtkTypeBool);
143  vtkGetMacro(ComputeGradientMagnitudes, vtkTypeBool);
144  vtkBooleanMacro(ComputeGradientMagnitudes, vtkTypeBool);
146 
148 
153  vtkSetMacro(CylinderClip, vtkTypeBool);
154  vtkGetMacro(CylinderClip, vtkTypeBool);
155  vtkBooleanMacro(CylinderClip, vtkTypeBool);
157 
159 
162  vtkGetMacro(LastUpdateTimeInSeconds, float);
163  vtkGetMacro(LastUpdateTimeInCPUSeconds, float);
165 
166  vtkGetMacro(UseCylinderClip, int);
167  int* GetCircleLimits() { return this->CircleLimits; }
168 
170 
178  void SetZeroNormalThreshold(float v);
179  vtkGetMacro(ZeroNormalThreshold, float);
181 
183 
187  vtkSetClampMacro(ZeroPad, vtkTypeBool, 0, 1);
188  vtkGetMacro(ZeroPad, vtkTypeBool);
189  vtkBooleanMacro(ZeroPad, vtkTypeBool);
191 
192  // These variables should be protected but are being
193  // made public to be accessible to the templated function.
194  // We used to have the templated function as a friend, but
195  // this does not work with all compilers
196 
197  // The input scalar data on which the normals are computed
199 
200  // The encoded normals (2 bytes) and the size of the encoded normals
201  unsigned short* EncodedNormals;
202  int EncodedNormalsSize[3];
203 
204  // The magnitude of the gradient array and the size of this array
205  unsigned char* GradientMagnitudes;
206 
207  // The time at which the normals were last built
209 
210  vtkGetVectorMacro(InputSize, int, 3);
211  vtkGetVectorMacro(InputAspect, float, 3);
212 
213 protected:
215  ~vtkEncodedGradientEstimator() override;
216 
217  void ReportReferences(vtkGarbageCollector*) override;
218 
219  // The number of threads to use when encoding normals
221 
223 
225 
226  virtual void UpdateNormals(void) = 0;
227 
230 
233 
235 
240  void ComputeCircleLimits(int size);
241 
243  int Bounds[6];
244 
245  int InputSize[3];
246  float InputAspect[3];
247 
249 
251 
252 private:
254  void operator=(const vtkEncodedGradientEstimator&) = delete;
255 };
256 
257 #endif
abstract base class for most VTK objects
Definition: vtkObject.h:62
encode a direction into a one or two byte value
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
A class for performing multithreaded execution.
record modification and/or execution time
Definition: vtkTimeStamp.h:35
int vtkIdType
Definition: vtkType.h:332
Detect and break reference loops.
int vtkTypeBool
Definition: vtkABI.h:69
a simple class to control print indentation
Definition: vtkIndent.h:39
virtual void ReportReferences(vtkGarbageCollector *)
topologically and geometrically regular array of data
Definition: vtkImageData.h:53
Superclass for gradient estimation.