1 /* === S Y N F I G ========================================================= */
3 ** \brief Curve Set Header
8 ** Copyright (c) 2002-2005 Robert B. Quattlebaum Jr., Adrian Bentley
10 ** This package is free software; you can redistribute it and/or
11 ** modify it under the terms of the GNU General Public License as
12 ** published by the Free Software Foundation; either version 2 of
13 ** the License, or (at your option) any later version.
15 ** This package is distributed in the hope that it will be useful,
16 ** but WITHOUT ANY WARRANTY; without even the implied warranty of
17 ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18 ** General Public License for more details.
21 /* ========================================================================= */
23 /* === S T A R T =========================================================== */
25 #ifndef __SYNFIG_CURVESET_H
26 #define __SYNFIG_CURVESET_H
28 /* === H E A D E R S ======================================================= */
29 #include "blinepoint.h"
32 /* === M A C R O S ========================================================= */
34 /* === T Y P E D E F S ===================================================== */
36 /* === C L A S S E S & S T R U C T S ======================================= */
48 CurvePoint(const Point &pin, const Vector &left, const Vector &right);
50 CurvePoint(const BLinePoint &bpoint);
55 bool invert; //winding order...
57 void CleanUp(int curve = 0);
60 typedef std::vector<CurvePoint> region;
61 typedef std::vector<region> set_type;
63 set_type set; //specifies a region object (assumes looping)
65 void SetClamp(int &i, int &si);
72 //anything supporting iterator type operations
73 template < typename Iterator >
74 CurveSet(Iterator begin, Iterator end, bool invert = false)
76 set.push_back(std::vector<CurvePoint>(begin,end));
80 CurveSet operator&(const CurveSet &rhs) const; //intersect
81 CurveSet operator|(const CurveSet &rhs) const; //union
82 CurveSet operator-(const CurveSet &rhs) const; //subtract
86 int intersect(const Point &p) const;
90 /* === E N D =============================================================== */