+++ /dev/null
-/* === S Y N F I G ========================================================= */
-/*! \file blineconvert.h
-** \brief Template Header
-**
-** $Id$
-**
-** \legal
-** Copyright (c) 2002-2005 Robert B. Quattlebaum Jr., Adrian Bentley
-**
-** This package is free software; you can redistribute it and/or
-** modify it under the terms of the GNU General Public License as
-** published by the Free Software Foundation; either version 2 of
-** the License, or (at your option) any later version.
-**
-** This package is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-** General Public License for more details.
-** \endlegal
-*/
-/* ========================================================================= */
-
-/* === S T A R T =========================================================== */
-
-#ifndef __SYNFIG_BLINE_CONVERT_H
-#define __SYNFIG_BLINE_CONVERT_H
-
-/* === H E A D E R S ======================================================= */
-
-#include <synfig/general.h>
-#include <synfig/blinepoint.h>
-#include <list>
-#include <vector>
-
-/* === M A C R O S ========================================================= */
-
-/* === T Y P E D E F S ===================================================== */
-
-/* === C L A S S E S & S T R U C T S ======================================= */
-
-namespace synfigapp {
-
-class BLineConverter
-{
-public:
- struct cpindex
- {
- int curind;
- synfig::Real tangentscale;
- synfig::Real error; //negative error will indicate invalid;
-
- cpindex(int ci, synfig::Real s=0, synfig::Real e=-1)
- :curind(ci), tangentscale(s), error(e)
- {}
-
- cpindex(const cpindex & o)
- :curind(o.curind), tangentscale(o.tangentscale), error(o.error)
- {}
-
- const cpindex & operator = (const cpindex & rhs)
- {
- curind = rhs.curind;
- tangentscale = rhs.tangentscale;
- error = rhs.error;
- return *this;
- }
-
- bool operator < (const cpindex &rhs) const
- {
- return curind < rhs.curind;
- }
-
- //point is obviously in[curind]
- //tangent scale will get reset to the smallest (or something else depending on experimentation)
- };
-
-private:
- //cached data
- std::vector<synfig::Point> f; //the preprocessed input cache
- std::vector<synfig::Real> f_w;
-
- //temporary point storage for vector calc
- std::vector<synfig::Point> ftemp;
-
- std::vector<synfig::Vector> df; //the derivative cache
- std::vector<synfig::Real> cvt; //the curvature cache
-
- std::vector<int> brk; //the break point cache
-
- std::vector<synfig::Real> di, //cumulative distance
- d_i; //distance between adjacent segments
-
- std::vector<synfig::Point> work; //the working point cache for the entire curve
- std::vector<cpindex> curind;
-
- //function parameters
- void clear();
-
-public:
- synfig::Real width;
-
- //Converter properties
- synfig::Real pixelwidth;
- synfig::Real smoothness; //actual error will be smoothness*pixelwidth (for global set pixelwidth = 1)
-
- BLineConverter();
-
- static void EnforceMinWidth(std::list<synfig::BLinePoint> &bline, synfig::Real min_pressure);
- void operator ()(std::list<synfig::BLinePoint> &out, const std::list<synfig::Point> &in,const std::list<synfig::Real> &in_w);
-};
-
-}; // END of namespace synfigapp
-
-/* === E N D =============================================================== */
-
-#endif