VTK  9.1.0
vtkPiecewiseFunction.h
Go to the documentation of this file.
1 /*=========================================================================
2 
3  Program: Visualization Toolkit
4  Module: vtkPiecewiseFunction.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 
136 #ifndef vtkPiecewiseFunction_h
137 #define vtkPiecewiseFunction_h
138 
139 #include "vtkCommonDataModelModule.h" // For export macro
140 #include "vtkDataObject.h"
141 
142 class vtkPiecewiseFunctionInternals;
143 
144 class VTKCOMMONDATAMODEL_EXPORT vtkPiecewiseFunction : public vtkDataObject
145 {
146 public:
149  void PrintSelf(ostream& os, vtkIndent indent) override;
150 
151  void DeepCopy(vtkDataObject* f) override;
152  void ShallowCopy(vtkDataObject* f) override;
153 
157  int GetDataObjectType() override { return VTK_PIECEWISE_FUNCTION; }
158 
162  int GetSize();
163 
165 
171  int AddPoint(double x, double y);
172  int AddPoint(double x, double y, double midpoint, double sharpness);
174 
179  bool RemovePointByIndex(size_t id);
180 
185  int RemovePoint(double x);
186 
191  int RemovePoint(double x, double y);
192 
197 
203  void AddSegment(double x1, double y1, double x2, double y2);
204 
209  double GetValue(double x);
210 
212 
218  int GetNodeValue(int index, double val[4]);
219  int SetNodeValue(int index, double val[4]);
221 
223 
230  double* GetDataPointer();
231  void FillFromDataPointer(int, double*);
233 
235 
238  vtkGetVector2Macro(Range, double);
240 
246  int AdjustRange(double range[2]);
247 
249 
255  void GetTable(
256  double x1, double x2, int size, float* table, int stride = 1, int logIncrements = 0);
257  void GetTable(
258  double x1, double x2, int size, double* table, int stride = 1, int logIncrements = 0);
260 
267  void BuildFunctionFromTable(double x1, double x2, int size, double* table, int stride = 1);
268 
270 
278  vtkSetMacro(Clamping, vtkTypeBool);
279  vtkGetMacro(Clamping, vtkTypeBool);
280  vtkBooleanMacro(Clamping, vtkTypeBool);
282 
288  vtkSetMacro(UseLogScale, bool);
289  vtkGetMacro(UseLogScale, bool);
290  vtkBooleanMacro(UseLogScale, bool);
301  const char* GetType();
302 
308 
314  void Initialize() override;
315 
317 
323 
325 
329  vtkSetMacro(AllowDuplicateScalars, vtkTypeBool);
330  vtkGetMacro(AllowDuplicateScalars, vtkTypeBool);
331  vtkBooleanMacro(AllowDuplicateScalars, vtkTypeBool);
333 
338  int EstimateMinNumberOfSamples(double const& x1, double const& x2);
339 
340 protected:
343 
350 
354  bool UpdateRange();
355 
360 
361  // The internal STL structures
362  vtkPiecewiseFunctionInternals* Internal;
363 
364  // Determines the function value outside of defined points
365  // Zero = always return 0.0 outside of defined points
366  // One = clamp to the lowest value below defined points and
367  // highest value above defined points
369 
370  // Array of points ((X,Y) pairs)
371  double* Function;
372 
373  // Min and max range of function point locations
374  double Range[2];
375 
377 
379 
380 private:
382  void operator=(const vtkPiecewiseFunction&) = delete;
383 };
384 
385 #endif
general representation of visualization data
a simple class to control print indentation
Definition: vtkIndent.h:113
Store zero or more vtkInformation instances.
Store vtkAlgorithm input/output information.
Defines a 1D piecewise function.
int SetNodeValue(int index, double val[4])
For the node specified by index, set/get the location (X), value (Y), midpoint, and sharpness values ...
int AdjustRange(double range[2])
Remove all points out of the new range, and make sure there is a point at each end of that range.
double GetValue(double x)
Returns the value of the function at the specified location using the specified interpolation.
int AddPoint(double x, double y, double midpoint, double sharpness)
Add points to the function.
static vtkPiecewiseFunction * GetData(vtkInformationVector *v, int i=0)
Retrieve an instance of this class from an information object.
void GetTable(double x1, double x2, int size, float *table, int stride=1, int logIncrements=0)
Fills in an array of function values evaluated at regular intervals.
int RemovePoint(double x)
Remove the first point found at the given x location Return the index of the remove point if any,...
double * GetDataPointer()
Returns a pointer to the data stored in the table.
void GetTable(double x1, double x2, int size, double *table, int stride=1, int logIncrements=0)
Fills in an array of function values evaluated at regular intervals.
int AddPoint(double x, double y)
Add points to the function.
double GetFirstNonZeroValue()
Returns the first point location which precedes a non-zero segment of the function.
int RemovePoint(double x, double y)
Remove the first point found at the given x and y location Return the index of the remove point if an...
void SortAndUpdateRange()
Internal method to sort the vector and update the Range whenever a node is added, edited or removed.
vtkPiecewiseFunctionInternals * Internal
void FillFromDataPointer(int, double *)
Returns a pointer to the data stored in the table.
void BuildFunctionFromTable(double x1, double x2, int size, double *table, int stride=1)
Constructs a piecewise function from a table.
int GetSize()
Get the number of points used to specify the function.
~vtkPiecewiseFunction() override
void Initialize() override
Clears out the current function.
bool UpdateRange()
Returns true if the range has been updated and Modified() has been called.
void RemoveAllPoints()
Removes all points from the function.
void DeepCopy(vtkDataObject *f) override
Shallow and Deep copy.
static vtkPiecewiseFunction * New()
const char * GetType()
Return the type of function: Function Types: 0 : Constant (No change in slope between end points) 1 :...
double FindMinimumXDistance()
Traverses the nodes to find the minimum distance.
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
static vtkPiecewiseFunction * GetData(vtkInformation *info)
Retrieve an instance of this class from an information object.
void AddSegment(double x1, double y1, double x2, double y2)
Add a line segment to the function.
int EstimateMinNumberOfSamples(double const &x1, double const &x2)
Estimates the minimum size of a table such that it would correctly sample this function.
bool RemovePointByIndex(size_t id)
Remove a point from the function at a given id Return true if point has been found and removed,...
int GetNodeValue(int index, double val[4])
For the node specified by index, set/get the location (X), value (Y), midpoint, and sharpness values ...
int GetDataObjectType() override
Return what type of dataset this is.
void ShallowCopy(vtkDataObject *f) override
Shallow and Deep copy.
@ info
Definition: vtkX3D.h:382
@ range
Definition: vtkX3D.h:244
@ size
Definition: vtkX3D.h:259
@ index
Definition: vtkX3D.h:252
auto Range(IterablePtr iterable, Options &&... opts) -> typename detail::IterableTraits< typename detail::StripPointers< IterablePtr >::type >::RangeType
Generate an iterable STL proxy object for a VTK container.
Definition: vtkRange.h:85
int vtkTypeBool
Definition: vtkABI.h:69
#define VTK_PIECEWISE_FUNCTION
Definition: vtkType.h:82