VTK  9.3.20240424
vtkPiecewiseFunction.h
Go to the documentation of this file.
1// SPDX-FileCopyrightText: Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
2// SPDX-License-Identifier: BSD-3-Clause
3
120#ifndef vtkPiecewiseFunction_h
121#define vtkPiecewiseFunction_h
122
123#include "vtkCommonDataModelModule.h" // For export macro
124#include "vtkDataObject.h"
125#include "vtkWrappingHints.h" // For VTK_MARSHALMANUAL
126
127VTK_ABI_NAMESPACE_BEGIN
128class vtkPiecewiseFunctionInternals;
129
130class VTKCOMMONDATAMODEL_EXPORT VTK_MARSHALMANUAL vtkPiecewiseFunction : public vtkDataObject
131{
132public:
135 void PrintSelf(ostream& os, vtkIndent indent) override;
136
137 void DeepCopy(vtkDataObject* f) override;
138 void ShallowCopy(vtkDataObject* f) override;
139
141 {
142 BINARY_SEARCH = 0,
143 INTERPOLATION_SEARCH = 1,
144 MAX_ENUM = 2
145 };
146
150 int GetDataObjectType() override { return VTK_PIECEWISE_FUNCTION; }
151
155 int GetSize();
156
158
164 int AddPoint(double x, double y);
165 int AddPoint(double x, double y, double midpoint, double sharpness);
167
172 bool RemovePointByIndex(size_t id);
173
178 int RemovePoint(double x);
179
184 int RemovePoint(double x, double y);
185
190
196 void AddSegment(double x1, double y1, double x2, double y2);
197
202 double GetValue(double x);
203
205
211 int GetNodeValue(int index, double val[4]);
212 int SetNodeValue(int index, double val[4]);
214
216
223 double* GetDataPointer();
224 void FillFromDataPointer(int, double*);
226
228
231 vtkGetVector2Macro(Range, double);
233
239 int AdjustRange(double range[2]);
240
242
250 void GetTable(double x1, double x2, int size, float* table, int stride = 1, int logIncrements = 0,
251 double epsilon = 1e-5);
252 void GetTable(double x1, double x2, int size, double* table, int stride = 1,
253 int logIncrements = 0, double epsilon = 1e-5);
255
262 void BuildFunctionFromTable(double x1, double x2, int size, double* table, int stride = 1);
263
265
273 vtkSetMacro(Clamping, vtkTypeBool);
274 vtkGetMacro(Clamping, vtkTypeBool);
275 vtkBooleanMacro(Clamping, vtkTypeBool);
277
283 vtkSetMacro(UseLogScale, bool);
284 vtkGetMacro(UseLogScale, bool);
285 vtkBooleanMacro(UseLogScale, bool);
296 const char* GetType();
297
303
309 void Initialize() override;
310
312
318
320
324 vtkSetMacro(AllowDuplicateScalars, vtkTypeBool);
325 vtkGetMacro(AllowDuplicateScalars, vtkTypeBool);
326 vtkBooleanMacro(AllowDuplicateScalars, vtkTypeBool);
328
333 int EstimateMinNumberOfSamples(double const& x1, double const& x2);
334
340 void UpdateSearchMethod(double epsilon = 1e-12, double thresh = 1e-4);
341
343
351 void SetCustomSearchMethod(int type);
354
355protected:
358
366 void SortAndUpdateRange(bool updateSearchMethod = true);
367
372
377
378 // The internal STL structures
379 vtkPiecewiseFunctionInternals* Internal;
380
381 // Determines the function value outside of defined points
382 // Zero = always return 0.0 outside of defined points
383 // One = clamp to the lowest value below defined points and
384 // highest value above defined points
386
387 // Array of points ((X,Y) pairs)
388 double* Function;
389
390 // Min and max range of function point locations
391 double Range[2];
392
394
396
397private:
399 void operator=(const vtkPiecewiseFunction&) = delete;
400};
401
402VTK_ABI_NAMESPACE_END
403#endif
general representation of visualization data
a simple class to control print indentation
Definition vtkIndent.h:108
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 ...
void GetTable(double x1, double x2, int size, float *table, int stride=1, int logIncrements=0, double epsilon=1e-5)
Fills in an array of function values evaluated at regular intervals.
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.
int RemovePoint(double x)
Remove the first point found at the given x location Return the index of the remove point if any,...
void UpdateSearchMethod(double epsilon=1e-12, double thresh=1e-4)
Analyses the point distribution and automatically updates the search method to optimize the time proc...
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.
void GetTable(double x1, double x2, int size, double *table, int stride=1, int logIncrements=0, double epsilon=1e-5)
Fills in an array of function values evaluated at regular intervals.
int GetAutomaticSearchMethod()
Methods to set / get the search method used.
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...
vtkPiecewiseFunctionInternals * Internal
void FillFromDataPointer(int, double *)
Returns a pointer to the data stored in the table.
void SetUseCustomSearchMethod(bool use)
void BuildFunctionFromTable(double x1, double x2, int size, double *table, int stride=1)
Constructs a piecewise function from a table.
static vtkPiecewiseFunction * GetData(vtkInformationVector *v, int i=0)
Retrieve an instance of this class from an information object.
int GetSize()
Get the number of points used to specify the function.
void SetCustomSearchMethod(int type)
~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
The goal of the method is to copy the complete data from src into this object.
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.
const char * GetType()
Return the type of function: Function Types: 0 : Constant (No change in slope between end points) 1 :...
void AddSegment(double x1, double y1, double x2, double y2)
Add a line segment to the function.
static vtkPiecewiseFunction * GetData(vtkInformation *info)
Retrieve an instance of this class from an information object.
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,...
double * GetDataPointer()
Returns a pointer to the data stored in the table.
void SortAndUpdateRange(bool updateSearchMethod=true)
Internal methods to sort the vector and update the Range whenever a node is added,...
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
The goal of the method is to copy the data up to the array pointers only.
static vtkPiecewiseFunction * New()
int vtkTypeBool
Definition vtkABI.h:64
#define VTK_PIECEWISE_FUNCTION
Definition vtkType.h:70
#define VTK_MARSHALMANUAL