diff options
| author | Johan B. C. Engelen <jbc.engelen@swissonline.ch> | 2007-09-16 01:27:54 +0000 |
|---|---|---|
| committer | johanengelen <johanengelen@users.sourceforge.net> | 2007-09-16 01:27:54 +0000 |
| commit | 07eaeb8f391513dad456cc4d1a5939d2bb2f9c65 (patch) | |
| tree | f2c503eaba0bf3ad33cd39fa78cccf281fa03e06 /src/2geom/path.h | |
| parent | add verticalpattern checkbox to path-along-path and some parameters that are ... (diff) | |
| download | inkscape-07eaeb8f391513dad456cc4d1a5939d2bb2f9c65.tar.gz inkscape-07eaeb8f391513dad456cc4d1a5939d2bb2f9c65.zip | |
merge in 2geom rev. 1154
(bzr r3756)
Diffstat (limited to 'src/2geom/path.h')
| -rw-r--r-- | src/2geom/path.h | 28 |
1 files changed, 15 insertions, 13 deletions
diff --git a/src/2geom/path.h b/src/2geom/path.h index 6f39eb7ef..f4897fecc 100644 --- a/src/2geom/path.h +++ b/src/2geom/path.h @@ -128,16 +128,17 @@ public: template <unsigned order> class BezierCurve : public Curve { private: - D2<Bezier<order> > inner; + D2<Bezier > inner; public: template <unsigned required_degree> static void assert_degree(BezierCurve<required_degree> const *) {} - BezierCurve() {} + BezierCurve() : inner(Bezier::Order(order), Bezier::Order(order)) { + } - explicit BezierCurve(D2<Bezier<order> > const &x) : inner(x) {} + explicit BezierCurve(D2<Bezier > const &x) : inner(x) {} - BezierCurve(Bezier<order> x, Bezier<order> y) : inner(x, y) {} + BezierCurve(Bezier x, Bezier y) : inner(x, y) {} // default copy // default assign @@ -145,19 +146,19 @@ public: BezierCurve(Point c0, Point c1) { assert_degree<1>(this); for(unsigned d = 0; d < 2; d++) - inner[d] = Bezier<order>(c0[d], c1[d]); + inner[d] = Bezier(c0[d], c1[d]); } BezierCurve(Point c0, Point c1, Point c2) { assert_degree<2>(this); for(unsigned d = 0; d < 2; d++) - inner[d] = Bezier<order>(c0[d], c1[d], c2[d]); + inner[d] = Bezier(c0[d], c1[d], c2[d]); } BezierCurve(Point c0, Point c1, Point c2, Point c3) { assert_degree<3>(this); for(unsigned d = 0; d < 2; d++) - inner[d] = Bezier<order>(c0[d], c1[d], c2[d], c3[d]); + inner[d] = Bezier(c0[d], c1[d], c2[d], c3[d]); } unsigned degree() const { return order; } @@ -203,7 +204,7 @@ public: std::vector<Point> points() const { return bezier_points(inner); } std::pair<BezierCurve<order>, BezierCurve<order> > subdivide(Coord t) const { - std::pair<Bezier<order>, Bezier<order> > sx = inner[X].subdivide(t), sy = inner[Y].subdivide(t); + std::pair<Bezier, Bezier > sx = inner[X].subdivide(t), sy = inner[Y].subdivide(t); return std::pair<BezierCurve<order>, BezierCurve<order> >( BezierCurve<order>(sx.first, sy.first), BezierCurve<order>(sx.second, sy.second)); @@ -251,12 +252,12 @@ protected: for(unsigned i = 0; i <= order; i++) { x[i] = c[i][X]; y[i] = c[i][Y]; } - inner = Bezier<order>(x, y); + inner = Bezier(x, y); } }; // BezierCurve<0> is meaningless; specialize it out -template<> class BezierCurve<0> : public BezierCurve<1> { public: BezierCurve(); BezierCurve(Bezier<0> x, Bezier<0> y); }; +template<> class BezierCurve<0> : public BezierCurve<1> { public: BezierCurve(); BezierCurve(Bezier x, Bezier y); }; typedef BezierCurve<1> LineSegment; typedef BezierCurve<2> QuadraticBezier; @@ -530,9 +531,10 @@ public: std::vector<double> roots(double v, Dim2 d) const { std::vector<double> res; - for(const_iterator it = begin(); it != end_closed(); ++it) { - std::vector<double> temp = it->roots(v, d); - res.insert(res.end(), temp.begin(), temp.end()); + for(unsigned i = 0; i <= size(); i++) { + std::vector<double> temp = (*this)[i].roots(v, d); + for(unsigned j = 0; j < temp.size(); j++) + res.push_back(temp[j] + i); } return res; } |
