summaryrefslogtreecommitdiffstats
path: root/src/2geom/solve-bezier-parametric.cpp
diff options
context:
space:
mode:
authorJohan B. C. Engelen <jbc.engelen@swissonline.ch>2014-01-12 23:25:39 +0000
committerJohan B. C. Engelen <j.b.c.engelen@alumnus.utwente.nl>2014-01-12 23:25:39 +0000
commit5eb9b4815a12cc0dafd07905f7715a7e15a92b41 (patch)
treef39f5ae5a40012fa010402611d2b133553c22335 /src/2geom/solve-bezier-parametric.cpp
parentLPE: rename function getHelperPaths --> getCanvasIndicators (the function is ... (diff)
downloadinkscape-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.cpp44
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]);
}
};