diff options
| author | Johan B. C. Engelen <jbc.engelen@swissonline.ch> | 2014-01-12 23:25:39 +0000 |
|---|---|---|
| committer | Johan B. C. Engelen <j.b.c.engelen@alumnus.utwente.nl> | 2014-01-12 23:25:39 +0000 |
| commit | 5eb9b4815a12cc0dafd07905f7715a7e15a92b41 (patch) | |
| tree | f39f5ae5a40012fa010402611d2b133553c22335 /src/2geom/solve-bezier-parametric.cpp | |
| parent | LPE: rename function getHelperPaths --> getCanvasIndicators (the function is ... (diff) | |
| download | inkscape-5eb9b4815a12cc0dafd07905f7715a7e15a92b41.tar.gz inkscape-5eb9b4815a12cc0dafd07905f7715a7e15a92b41.zip | |
update 2geom's copy to r2142
(bzr r12921)
Diffstat (limited to 'src/2geom/solve-bezier-parametric.cpp')
| -rw-r--r-- | src/2geom/solve-bezier-parametric.cpp | 44 |
1 files changed, 17 insertions, 27 deletions
diff --git a/src/2geom/solve-bezier-parametric.cpp b/src/2geom/solve-bezier-parametric.cpp index ed693c584..9b0feaee4 100644 --- a/src/2geom/solve-bezier-parametric.cpp +++ b/src/2geom/solve-bezier-parametric.cpp @@ -68,20 +68,16 @@ find_parametric_bezier_roots(Geom::Point const *w, /* The control points */ break; } - /* - * Otherwise, solve recursively after subdividing control polygon - * New left and right control polygons - */ - Geom::Point *Left = new Geom::Point[degree+1]; - Geom::Point *Right = new Geom::Point[degree+1]; - - Bezier(w, degree, 0.5, Left, Right); - total_subs ++; - find_parametric_bezier_roots(Left, degree, solutions, depth+1); - find_parametric_bezier_roots(Right, degree, solutions, depth+1); + /* Otherwise, solve recursively after subdividing control polygon */ + + //Geom::Point Left[degree+1], /* New left and right */ + // Right[degree+1]; /* control polygons */ + std::vector<Geom::Point> Left( degree+1 ), Right(degree+1); - delete[] Left; - delete[] Right; + Bezier(w, degree, 0.5, Left.data(), Right.data()); + total_subs ++; + find_parametric_bezier_roots(Left.data(), degree, solutions, depth+1); + find_parametric_bezier_roots(Right.data(), degree, solutions, depth+1); } @@ -130,7 +126,8 @@ control_poly_flat_enough(Geom::Point const *V, /* Control points */ const double abSquared = (a * a) + (b * b); - double distance[degree]; /* Distances from pts to line */ + //double distance[degree]; /* Distances from pts to line */ + std::vector<double> distance(degree); /* Distances from pts to line */ for (unsigned i = 1; i < degree; i++) { /* Compute distance from each of the points to that line */ double & dist(distance[i-1]); @@ -198,13 +195,13 @@ Bezier(Geom::Point const *V, /* Control pts */ Geom::Point *Left, /* RETURN left half ctl pts */ Geom::Point *Right) /* RETURN right half ctl pts */ { - Geom::Point **Vtemp = new Geom::Point* [degree+1]; - - for (unsigned int i = 0; i < degree+1; ++i) - Vtemp[i] = new Geom::Point[degree+1]; + //Geom::Point Vtemp[degree+1][degree+1]; + std::vector<std::vector<Geom::Point> > Vtemp(degree+1); + for ( size_t i = 0; i < degree + 1; ++i ) + Vtemp.reserve(degree+1); /* Copy control points */ - std::copy(V, V+degree+1, Vtemp[0]); + std::copy(V, V+degree+1, Vtemp[0].begin()); /* Triangle computation */ for (unsigned i = 1; i <= degree; i++) { @@ -218,14 +215,7 @@ Bezier(Geom::Point const *V, /* Control pts */ for (unsigned j = 0; j <= degree; j++) Right[j] = Vtemp[degree-j][j]; - Geom::Point return_value = Vtemp[degree][0]; - - for (unsigned int i = 0; i < degree+1; ++i) - delete[] Vtemp[i]; - - delete[] Vtemp; - - return return_value; + return (Vtemp[degree][0]); } }; |
