Cloned library of VTK-5.0.0 with extra build files for internal package management.
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

/*=========================================================================
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