synfig-core  1.0.3
curveset.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_CURVESET_H
26 #define __SYNFIG_CURVESET_H
27 
28 /* === H E A D E R S ======================================================= */
29 #include "blinepoint.h"
30 #include <vector>
31 
32 /* === M A C R O S ========================================================= */
33 
34 /* === T Y P E D E F S ===================================================== */
35 
36 /* === C L A S S E S & S T R U C T S ======================================= */
37 namespace synfig
38 {
39 
40 class BLinePoint;
41 
42 struct CurvePoint
43 {
46 
47  CurvePoint () {}
48  CurvePoint(const Point &pin, const Vector &left, const Vector &right);
49 
50  CurvePoint(const BLinePoint &bpoint);
51 };
52 
53 class CurveSet
54 {
55  bool invert; //winding order...
56 
57  void CleanUp(int curve = 0);
58 public:
59 
60  typedef std::vector<CurvePoint> region;
61  typedef std::vector<region> set_type;
62 
63  set_type set; //specifies a region object (assumes looping)
64 
65  void SetClamp(int &i, int &si);
66 
67  //actual stuff
68  CurveSet(): invert() { }
69 
70  //anything supporting iterator type operations
71  template < typename Iterator >
72  CurveSet(Iterator begin, Iterator end, bool invert = false):
73  invert()
74  {
75  set.push_back(std::vector<CurvePoint>(begin,end));
76  CleanUp(invert);
77  }
78 
79  CurveSet operator&(const CurveSet &rhs) const; //intersect
80  CurveSet operator|(const CurveSet &rhs) const; //union
81  CurveSet operator-(const CurveSet &rhs) const; //subtract
82 
83 
84  //Point containment
85  int intersect(const Point &p) const;
86 };
87 
88 }
89 /* === E N D =============================================================== */
90 
91 #endif