synfig-studio  1.0.3
blineconvert.h
Go to the documentation of this file.
1 /* === S Y N F I G ========================================================= */
21 /* ========================================================================= */
22 
23 /* === S T A R T =========================================================== */
24 
25 #ifndef __SYNFIG_BLINE_CONVERT_H
26 #define __SYNFIG_BLINE_CONVERT_H
27 
28 /* === H E A D E R S ======================================================= */
29 
30 #include <synfig/general.h>
31 #include <synfig/blinepoint.h>
32 #include <list>
33 #include <vector>
34 
35 /* === M A C R O S ========================================================= */
36 
37 /* === T Y P E D E F S ===================================================== */
38 
39 /* === C L A S S E S & S T R U C T S ======================================= */
40 
41 namespace synfigapp {
42 
44 {
45 public:
46  struct cpindex
47  {
48  int curind;
49  synfig::Real tangentscale;
50  synfig::Real error; //negative error will indicate invalid;
51 
52  cpindex(int ci, synfig::Real s=0, synfig::Real e=-1)
53  :curind(ci), tangentscale(s), error(e)
54  {}
55 
56  cpindex(const cpindex & o)
58  {}
59 
60  const cpindex & operator=(const cpindex & rhs)
61  {
62  curind = rhs.curind;
64  error = rhs.error;
65  return *this;
66  }
67 
68  bool operator<(const cpindex &rhs) const
69  {
70  return curind < rhs.curind;
71  }
72 
73  //point is obviously in[curind]
74  //tangent scale will get reset to the smallest (or something else depending on experimentation)
75  };
76 
77 private:
78  //cached data
79  std::vector<synfig::Point> point_cache; //the preprocessed input cache
80  std::vector<synfig::Real> width_cache;
81 
82  //temporary point storage for vector calc
83  std::vector<synfig::Point> ftemp;
84 
85  std::vector<synfig::Vector> deriv; //the derivative cache
86  std::vector<synfig::Real> curvature; //the curvature cache
87 
88  std::vector<int> break_tangents; //the break point cache
89 
90  std::vector<synfig::Real> cum_dist, //cumulative distance
91  this_dist; //distance between adjacent segments
92 
93  std::vector<synfig::Point> work; //the working point cache for the entire curve
94  std::vector<cpindex> curind;
95 
96  //function parameters
97  void clear();
98 
99 public:
100  synfig::Real width;
101 
102  //Converter properties
103  synfig::Real pixelwidth;
104  synfig::Real smoothness; //actual error will be smoothness*pixelwidth (for global set pixelwidth = 1)
105 
106  BLineConverter();
107 
108  static void EnforceMinWidth(std::list<synfig::BLinePoint> &bline, synfig::Real min_pressure);
109  void operator()(std::list<synfig::BLinePoint> &out, const std::list<synfig::Point> &in,const std::list<synfig::Real> &in_w);
110 };
111 
112 }; // END of namespace synfigapp
113 
114 /* === E N D =============================================================== */
115 
116 #endif