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.
 
 
 
 
 
 

165 lines
5.6 KiB

/*=========================================================================
Program: Visualization Toolkit
Module: $RCSfile: vtkParametricSpline.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 vtkParametricSpline - parametric function for 1D interpolating splines
// .SECTION Description
// vtkParametricSpline is a parametric function for 1D interpolating splines.
// vtkParametricSpline maps the single parameter u into a 3D point (x,y,z)
// using three instances of interpolating splines. This family of 1D splines
// is quaranteed to be parameterized in the interval [0,1]. Attempting to
// evaluate outside this interval will cause the parameter u to be clamped in
// the range [0,1].
//
// When constructed, this class creates instances of vtkCardinalSpline for
// each of the x-y-z coordinates. The user may choose to replace these with
// their own instances of subclasses of vtkSpline.
//
// .SECTION Caveats
// If you wish to tessellate the spline, use the class
// vtkParametricFunctionSource.
//
// .SECTION See Also
// vtkSpline vtkKochanekSpline vtkCardinalSpline
#ifndef __vtkParametricSpline_h
#define __vtkParametricSpline_h
class vtkSpline;
class vtkPoints;
#include "vtkParametricFunction.h"
class VTK_FILTERING_EXPORT vtkParametricSpline : public vtkParametricFunction
{
public:
vtkTypeRevisionMacro(vtkParametricSpline,vtkParametricFunction);
void PrintSelf(ostream& os, vtkIndent indent);
// Description:
// Construct the spline with the following parameters:
// MinimumU = 0, MaximumU = 1, JoinU = 0 (unless the spline is
// closed, then JoinU = 1), TwistU = 0, DerivativesSupplied = 0
// (the other vtkParametricFunction parameters are ignored).
static vtkParametricSpline *New();
// Description
// Return the parametric dimension of the class.
virtual int GetDimension() {return 1;}
// Description:
// Evaluate the spline at parametric coordinate u[0] returning
// the point coordinate Pt[3].
virtual void Evaluate(double u[3], double Pt[3], double Du[9]);
// Description:
// Evaluate a scalar value at parametric coordinate u[0] and Pt[3].
// The scalar value is just the parameter u[0].
virtual double EvaluateScalar(double u[3], double Pt[3], double Du[9]);
// Description:
// By default, this class is constructed with three instances of
// vtkCardinalSpline (for each of the x-y-z coordinate axes). The user may
// choose to create and assign their own instances of vtkSpline.
void SetXSpline(vtkSpline*);
void SetYSpline(vtkSpline*);
void SetZSpline(vtkSpline*);
vtkGetObjectMacro(XSpline,vtkSpline);
vtkGetObjectMacro(YSpline,vtkSpline);
vtkGetObjectMacro(ZSpline,vtkSpline);
// Description:
// Specify the list of points defining the spline. Do this by
// specifying a vtkPoints array containing the points. Note that
// the order of the points in vtkPoints is the order that the
// splines will be fit.
void SetPoints(vtkPoints*);
vtkGetObjectMacro(Points,vtkPoints);
// Description:
// Control whether the spline is open or closed. A closed spline forms
// a continuous loop: the first and last points are the same, and
// derivatives are continuous.
vtkSetMacro(Closed,int);
vtkGetMacro(Closed,int);
vtkBooleanMacro(Closed,int);
// Description:
// Control whether the spline is parameterized by length or by point index.
// Default is by length.
vtkSetMacro(ParameterizeByLength,int);
vtkGetMacro(ParameterizeByLength,int);
vtkBooleanMacro(ParameterizeByLength,int);
// Description:
// Set the type of constraint of the left(right) end points. Four
// constraints are available:
//
// 0: the first derivative at left(right) most point is determined
// from the line defined from the first(last) two points.
//
// 1: the first derivative at left(right) most point is set to
// Left(Right)Value.
//
// 2: the second derivative at left(right) most point is set to
// Left(Right)Value.
//
// 3: the second derivative at left(right)most points is Left(Right)Value
// times second derivative at first interior point.
vtkSetClampMacro(LeftConstraint,int,0,3);
vtkGetMacro(LeftConstraint,int);
vtkSetClampMacro(RightConstraint,int,0,3);
vtkGetMacro(RightConstraint,int);
// Description:
// The values of the derivative on the left and right sides. The value
// is used only if the left(right) constraint is type 1-3.
vtkSetMacro(LeftValue,double);
vtkGetMacro(LeftValue,double);
vtkSetMacro(RightValue,double);
vtkGetMacro(RightValue,double);
protected:
vtkParametricSpline();
~vtkParametricSpline();
// Points definition
vtkPoints *Points;
// The interpolating splines for each of the x-y-z coordinates
vtkSpline *XSpline;
vtkSpline *YSpline;
vtkSpline *ZSpline;
// Supplemental variables
int Closed;
int LeftConstraint;
int RightConstraint;
double LeftValue;
double RightValue;
int ParameterizeByLength;
// Initializing the spline
unsigned long InitializeTime;
int Initialize();
// Internal variable for managing parametric coordinates
double Length;
double ClosedLength;
private:
vtkParametricSpline(const vtkParametricSpline&); // Not implemented.
void operator=(const vtkParametricSpline&); // Not implemented.
};
#endif