You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
172 lines
6.2 KiB
172 lines
6.2 KiB
/*=========================================================================
|
|
|
|
Program: Visualization Toolkit
|
|
Module: $RCSfile: vtkPiecewiseFunction.h,v $
|
|
|
|
Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
|
|
All rights reserved.
|
|
See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
|
|
|
|
This software is distributed WITHOUT ANY WARRANTY; without even
|
|
the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
|
|
PURPOSE. See the above copyright notice for more information.
|
|
|
|
=========================================================================*/
|
|
|
|
// .NAME vtkPiecewiseFunction - Defines a 1D piecewise function.
|
|
//
|
|
// .SECTION Description
|
|
// Defines a piecewise linear function mapping. Used for transfer functions
|
|
// in volume rendering.
|
|
|
|
#ifndef __vtkPiecewiseFunction_h
|
|
#define __vtkPiecewiseFunction_h
|
|
|
|
#include "vtkDataObject.h"
|
|
|
|
class VTK_FILTERING_EXPORT vtkPiecewiseFunction : public vtkDataObject
|
|
{
|
|
public:
|
|
static vtkPiecewiseFunction *New();
|
|
vtkTypeRevisionMacro(vtkPiecewiseFunction,vtkDataObject);
|
|
void PrintSelf(ostream& os, vtkIndent indent);
|
|
|
|
void Initialize();
|
|
void DeepCopy( vtkDataObject *f );
|
|
void ShallowCopy( vtkDataObject *f );
|
|
|
|
// Description:
|
|
// Return what type of dataset this is.
|
|
int GetDataObjectType() {return VTK_PIECEWISE_FUNCTION;};
|
|
|
|
// Description:
|
|
// Get the number of points used to specify the function
|
|
int GetSize();
|
|
|
|
// Description:
|
|
// Add/Remove points to/from the function. If a duplicate point is added
|
|
// then the function value is changed at that location.
|
|
// Return the index of the point (0 based), or -1 on error.
|
|
int AddPoint( double x, double val );
|
|
int RemovePoint( double x );
|
|
|
|
// Description:
|
|
// Removes all points from the function.
|
|
void RemoveAllPoints();
|
|
|
|
// Description:
|
|
// Add a line segment to the function. All points defined between the
|
|
// two points specified are removed from the function.
|
|
void AddSegment( double x1, double val1, double x2, double val2 );
|
|
|
|
// Description:
|
|
// Returns the value of the function at the specified location using
|
|
// the specified interpolation. Returns zero if the specified location
|
|
// is outside the min and max points of the function.
|
|
double GetValue( double x );
|
|
|
|
// Description:
|
|
// Returns a pointer to the data stored in the table.
|
|
// Fills from a pointer to data stored in a similar table.
|
|
double *GetDataPointer() {return this->Function;};
|
|
void FillFromDataPointer(int, double*);
|
|
|
|
// Description:
|
|
// Returns the min and max point locations of the function.
|
|
double *GetRange();
|
|
|
|
// Description:
|
|
// Remove all points out of the new range, and make sure there is a point
|
|
// at each end of that range.
|
|
// Return 1 on success, 0 otherwise.
|
|
int AdjustRange(double range[2]);
|
|
|
|
// Description:
|
|
// Fills in an array of function values evaluated at regular intervals.
|
|
// Parameter "stride" is used to step through the output "table". It is
|
|
// used by vtkColorTransferFunction to fill in an rgb table using three
|
|
// separate piecewise functions and three separate calls to GetTable().
|
|
void GetTable( double x1, double x2, int size, float *table, int stride=1 );
|
|
void GetTable( double x1, double x2, int size, double *table, int stride=1 );
|
|
|
|
// Description:
|
|
// Constructs a piecewise function from a table. Function range is
|
|
// is set to [x1, x2], function size is set to size, and function points
|
|
// are regularly spaced between x1 and x2. Parameter "stride" is
|
|
// is step through the input table. It is used by vtkColorTransferFunction
|
|
// to construct 3 piecewise functions from an rgb table.
|
|
void BuildFunctionFromTable( double x1, double x2, int size,
|
|
double *table, int stride=1 );
|
|
|
|
// Description:
|
|
// When zero range clamping is Off, GetValue() returns 0.0 when a
|
|
// value is requested outside of the points specified.
|
|
// When zero range clamping is On, GetValue() returns the value at
|
|
// the value at the lowest point for a request below all points
|
|
// specified and returns the value at the highest point for a request
|
|
// above all points specified. On is the default.
|
|
vtkSetMacro( Clamping, int );
|
|
vtkGetMacro( Clamping, int );
|
|
vtkBooleanMacro( Clamping, int );
|
|
|
|
// Description:
|
|
// Return the type of function:
|
|
// Function Types:
|
|
// 0 : Constant (No change in slope between end points)
|
|
// 1 : NonDecreasing (Always increasing or zero slope)
|
|
// 2 : NonIncreasing (Always decreasing or zero slope)
|
|
// 3 : Varied (Contains both decreasing and increasing slopes)
|
|
const char *GetType();
|
|
|
|
// Description:
|
|
// Returns the first point location which precedes a non-zero segment of the
|
|
// function. Note that the value at this point may be zero.
|
|
double GetFirstNonZeroValue();
|
|
|
|
//BTX
|
|
// Description:
|
|
// Retrieve an instance of this class from an information object.
|
|
static vtkPiecewiseFunction* GetData(vtkInformation* info);
|
|
static vtkPiecewiseFunction* GetData(vtkInformationVector* v, int i=0);
|
|
//ETX
|
|
|
|
protected:
|
|
vtkPiecewiseFunction();
|
|
~vtkPiecewiseFunction();
|
|
|
|
// Size of the array used to store function points
|
|
int ArraySize;
|
|
|
|
// Determines the function value outside of defined points
|
|
// Zero = always return 0.0 outside of defined points
|
|
// One = clamp to the lowest value below defined points and
|
|
// highest value above defined points
|
|
int Clamping;
|
|
|
|
// Array of points ((X,Y) pairs)
|
|
double *Function;
|
|
|
|
// Number of points used to specify function
|
|
int FunctionSize;
|
|
|
|
// Min and max range of function point locations
|
|
double FunctionRange[2];
|
|
|
|
// Increases size of the function array. The array grows by a factor of 2
|
|
// when the array limit has been reached.
|
|
void IncreaseArraySize();
|
|
|
|
// Private function to add a point to the function. Returns the array
|
|
// index of the inserted point.
|
|
int InsertPoint( double x, double val );
|
|
|
|
// Move points one index down or up in the array. This is useful for
|
|
// inserting and deleting points into the array.
|
|
void MovePoints( int index, int down );
|
|
private:
|
|
vtkPiecewiseFunction(const vtkPiecewiseFunction&); // Not implemented.
|
|
void operator=(const vtkPiecewiseFunction&); // Not implemented.
|
|
};
|
|
|
|
#endif
|
|
|
|
|