Fix issue #724: Bezier curve rendering/eval crashes with empty curves.

This commit is contained in:
vrld
2013-08-29 08:31:58 +02:00
parent eb052d99e8
commit 6b51c5aadc
2 changed files with 13 additions and 1 deletions
+4
View File
@@ -162,6 +162,8 @@ Vector BezierCurve::eval(double t) const
{
if (t < 0 || t > 1)
throw Exception("Invalid evaluation parameter: must be between 0 and 1");
if (controlPoints.size() < 2)
throw Exception("Invalid Bezier curve: Not enough control points.");
// de casteljau
vector<Vector> points(controlPoints);
@@ -174,6 +176,8 @@ Vector BezierCurve::eval(double t) const
vector<Vector> BezierCurve::render(size_t accuracy) const
{
if (controlPoints.size() < 2)
throw Exception("Invalid Bezier curve: Not enough control points.");
vector<Vector> vertices(controlPoints);
subdivide(vertices, accuracy);
return vertices;
+9 -1
View File
@@ -168,7 +168,15 @@ int w_BezierCurve_render(lua_State *L)
BezierCurve *curve = luax_checkbeziercurve(L, 1);
int accuracy = luaL_optinteger(L, 2, 5);
std::vector<Vector> points = curve->render(accuracy);
std::vector<Vector> points;
try
{
points = curve->render(accuracy);
}
catch (Exception &e)
{
return luaL_error(L, e.what());
}
lua_createtable(L, points.size()*2, 0);
for (size_t i = 0; i < points.size(); ++i)