Files
pkgsrc-ng/graphics/inkscape/patches/patch-src_2geom_solve-bezier-parametric.cpp
2013-09-26 17:14:40 +02:00

40 lines
1.3 KiB
C++

$NetBSD: patch-src_2geom_solve-bezier-parametric.cpp,v 1.1 2012/11/16 00:54:04 joerg Exp $
--- src/2geom/solve-bezier-parametric.cpp.orig 2012-11-15 17:42:23.000000000 +0000
+++ src/2geom/solve-bezier-parametric.cpp
@@ -191,24 +191,27 @@ Bezier(Geom::Point const *V, /* Control
Geom::Point *Left, /* RETURN left half ctl pts */
Geom::Point *Right) /* RETURN right half ctl pts */
{
- Geom::Point Vtemp[degree+1][degree+1];
+ const unsigned sz = degree + 1;
+ Geom::Point *Vtemp = new Geom::Point[sz * sz];
/* Copy control points */
- std::copy(V, V+degree+1, Vtemp[0]);
+ for (unsigned i = 0; i < sz; ++i)
+ Vtemp[0 * sz + i] = V[i];
/* Triangle computation */
for (unsigned i = 1; i <= degree; i++) {
for (unsigned j = 0; j <= degree - i; j++) {
- Vtemp[i][j] = lerp(t, Vtemp[i-1][j], Vtemp[i-1][j+1]);
+ Vtemp[i * sz + j] = lerp(t, Vtemp[(i-1) * sz + j], Vtemp[(i-1) * sz + j+1]);
}
}
for (unsigned j = 0; j <= degree; j++)
- Left[j] = Vtemp[j][0];
+ Left[j] = Vtemp[j * sz + 0];
for (unsigned j = 0; j <= degree; j++)
- Right[j] = Vtemp[degree-j][j];
-
- return (Vtemp[degree][0]);
+ Right[j] = Vtemp[(degree-j) * sz + j];
+ Geom::Point rv(Vtemp[degree * sz + 0]);
+ delete[] Vtemp;
+ return rv;
}
};