text: /******************************************************************************
   * Qwt Widget Library
   * Copyright (C) 1997   Josef Wilgen
   * Copyright (C) 2002   Uwe Rathmann
   *
   * This library is free software; you can redistribute it and/or
   * modify it under the terms of the Qwt License, Version 1.0
   *****************************************************************************/
  
  #ifndef QWT_SPLINE_LOCAL_H
  #define QWT_SPLINE_LOCAL_H
  
  #include "qwt_global.h"
  #include "qwt_spline.h"
  
  /*!
     \brief A spline with C1 continuity
  
     QwtSplineLocal offers several standard algorithms for interpolating
     a curve with polynomials having C1 continuity at the control points.
     All algorithms are local in a sense, that changing one control point
     only few polynomials.
   */
  class QWT_EXPORT QwtSplineLocal : public QwtSplineC1
  {
    public:
      /*!
          \brief Spline interpolation type
  
          All type of spline interpolations are lightweight algorithms
          calculating the slopes at a point by looking 1 or 2 points back
          and ahead.
       */
      enum Type
      {
          /*!
             A cardinal spline
  
             The cardinal spline interpolation is a very cheap calculation with
             a locality of 1.
           */
          Cardinal,
  
          /*!
             Parabolic blending is a cheap calculation with a locality of 1. Sometimes
             it is also called Cubic Bessel interpolation.
           */
          ParabolicBlending,
  
          /*!
             The algorithm of H.Akima is a calculation with a locality of 2.
           */
          Akima,
  
          /*!
             Piecewise Cubic Hermite Interpolating Polynomial (PCHIP) is an algorithm
             that is popular because of being offered by MATLAB.
  
             It preserves the shape of the data and respects monotonicity. It has a
             locality of 1.
           */
          PChip
      };
  
      QwtSplineLocal( Type type );
      virtual ~QwtSplineLocal();
  
      Type type() const;
  
      virtual uint locality() const QWT_OVERRIDE;
  
      virtual QPainterPath painterPath( const QPolygonF& ) const QWT_OVERRIDE;
      virtual QVector< QLineF > bezierControlLines( const QPolygonF& ) const QWT_OVERRIDE;
  
      // calculating the parametric equations
      virtual QVector< QwtSplinePolynomial > polynomials( const QPolygonF& ) const QWT_OVERRIDE;
      virtual QVector< double > slopes( const QPolygonF& ) const QWT_OVERRIDE;
  
    private:
      const Type m_type;
  };
  
  #endif
  