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.
 
 
 
 
 
 

161 lines
6.0 KiB

/*=========================================================================
Program: Visualization Toolkit
Module: $RCSfile: vtkTupleInterpolator.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 vtkTupleInterpolator - interpolate a tuple of arbitray size
// .SECTION Description
// This class is used to interpolate a tuple which may have an arbitrary
// number of components (but at least one component). The interpolation may
// be linear in form, or via a subclasses of vtkSpline.
//
// To use this class, begin by specifying the number of components of the
// tuple and the interpolation function to use. Then specify at least one
// pair of (t,tuple) with the AddTuple() method. Next interpolate the
// tuples with the InterpolateTuple(t,tuple) method, where "t" must be in the
// range of (t_min,t_max) parameter values specified by the AddTuple() method
// (if not then t is clamped), and tuple[] is filled in by the method (make
// sure that tuple [] is long enough to hold the interpolated data).
//
// You can control the type of interpolation to use. By default, the
// interpolation is based on a Kochanek spline. However, other types of
// splines can be specified. You can also set the interpolation method
// to linear, in which case the specified spline has no effect on the
// interpolation.
// .SECTION Caveats
// Setting the number of components or changing the type of interpolation
// causes the list of tuples to be reset, so any data inserted up to that
// point is lost. Bisection methods are used to speed up the search for the
// interpolation interval.
#ifndef __vtkTupleInterpolator_h
#define __vtkTupleInterpolator_h
#include "vtkObject.h"
class vtkSpline;
class vtkPiecewiseFunction;
class VTK_RENDERING_EXPORT vtkTupleInterpolator : public vtkObject
{
public:
vtkTypeRevisionMacro(vtkTupleInterpolator, vtkObject);
void PrintSelf(ostream& os, vtkIndent indent);
// Description:
// Instantiate the class.
static vtkTupleInterpolator* New();
// Description:
// Specify the number of tuple components to interpolate. Note that setting
// this value discards any previously inserted data.
void SetNumberOfComponents(int numComp);
vtkGetMacro(NumberOfComponents,int);
// Description:
// Return the number of tuples in the list of tuples to be
// interpolated.
int GetNumberOfTuples();
// Description:
// Obtain some information about the interpolation range. The numbers
// returned (corresponding to parameter t, usually thought of as time)
// are undefined if the list of transforms is empty. This is a convenience
// method for interpolation.
double GetMinimumT();
double GetMaximumT();
// Description:
// Reset the class so that it contains no (t,tuple) information.
void Initialize();
// Description:
// Add another tuple to the list of tuples to be interpolated. Note that
// using the same time t value more than once replaces the previous tuple
// value at t. At least two tuples must be added to define an
// interpolation function.
void AddTuple(double t, double tuple[]);
// Description:
// Delete the tuple at a particular parameter t. If there is no
// tuple defined at t, then the method does nothing.
void RemoveTuple(double t);
// Description:
// Interpolate the list of tuples and determine a new tuple (i.e.,
// fill in the tuple provided). If t is outside the range of
// (min,max) values, then t is clamped. Note that each component
// of tuple[] is interpolated independently.
void InterpolateTuple(double t, double tuple[]);
//BTX
// Description:
// Enums to control the type of interpolation to use.
enum {INTERPOLATION_TYPE_LINEAR=0,
INTERPOLATION_TYPE_SPLINE
};
//ETX
// Description:
// Specify which type of function to use for interpolation. By default
// spline interpolation (SetInterpolationFunctionToSpline()) is used
// (i.e., a Kochanek spline) and the InterpolatingSpline instance variable
// is used to birth the actual interpolation splines via a combination of
// NewInstance() and DeepCopy(). You may also choose to use linear
// interpolation by invoking SetInterpolationFunctionToLinear(). Note that
// changing the type of interpolation causes previously inserted data
// to be discarded.
void SetInterpolationType(int type);
vtkGetMacro(InterpolationType,int);
void SetInterpolationTypeToLinear()
{this->SetInterpolationType(INTERPOLATION_TYPE_LINEAR);}
void SetInterpolationTypeToSpline()
{this->SetInterpolationType(INTERPOLATION_TYPE_SPLINE);}
// Description:
// If the InterpolationType is set to spline, then this method applies. By
// default Kochanek interpolation is used, but you can specify any instance
// of vtkSpline to use. Note that the actual interpolating splines are
// created by invoking NewInstance() followed by DeepCopy() on the
// interpolating spline specified here, for each tuple component to
// interpolate.
void SetInterpolatingSpline(vtkSpline*);
vtkGetObjectMacro(InterpolatingSpline,vtkSpline);
protected:
vtkTupleInterpolator();
virtual ~vtkTupleInterpolator();
// The number of components being interpolated
int NumberOfComponents;
// Specify the type of interpolation to use
int InterpolationType;
// This is the default 1D spline to use
vtkSpline *InterpolatingSpline;
// Internal variables for interpolation functions
void InitializeInterpolation();
vtkPiecewiseFunction **Linear;
vtkSpline **Spline;
private:
vtkTupleInterpolator(const vtkTupleInterpolator&); // Not implemented.
void operator=(const vtkTupleInterpolator&); // Not implemented.
};
#endif