summaryrefslogtreecommitdiffstats
path: root/src/2geom/path.h
diff options
context:
space:
mode:
authorJohan B. C. Engelen <jbc.engelen@swissonline.ch>2007-09-16 01:27:54 +0000
committerjohanengelen <johanengelen@users.sourceforge.net>2007-09-16 01:27:54 +0000
commit07eaeb8f391513dad456cc4d1a5939d2bb2f9c65 (patch)
treef2c503eaba0bf3ad33cd39fa78cccf281fa03e06 /src/2geom/path.h
parentadd verticalpattern checkbox to path-along-path and some parameters that are ... (diff)
downloadinkscape-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.h28
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;
}