From ccd856255d78388e2a5124e6cb132246e7604706 Mon Sep 17 00:00:00 2001 From: muddmaker Date: Thu, 2 Oct 2014 18:22:54 -0700 Subject: [PATCH] fix last commit --- src/modules/math/BezierCurve.cpp | 39 ++++++++++++++------------- src/modules/math/wrap_BezierCurve.cpp | 2 +- 2 files changed, 22 insertions(+), 19 deletions(-) diff --git a/src/modules/math/BezierCurve.cpp b/src/modules/math/BezierCurve.cpp index 7ceac9e7e..05e84e92f 100644 --- a/src/modules/math/BezierCurve.cpp +++ b/src/modules/math/BezierCurve.cpp @@ -189,31 +189,34 @@ vector BezierCurve::renderSegment(double start, double end, size_t accur throw Exception("Invalid Bezier curve: Not enough control points."); vector vertices(controlPoints); subdivide(vertices, accuracy); - if (start > 0) + if (start == end) { - Vector startPoint = evaluate(start); - for (size_t i = 0; i < vertices.size(); ++i) - { - if ((double)i / vertices.size() > start) - { - vertices.erase(vertices.begin(), vertices.begin() + i - 1); - break; - } - } - vertices.insert(vertices.begin(), startPoint); + vertices.clear(); } - if (end < 1) + else if (start < end) { - Vector endPoint = evaluate(end); - for (size_t i = vertices.size(); i > 0; --i) + if (start > 0 && start < 1) { - if ((double)(i - 1) / vertices.size() < end) + for (size_t i = 0; i < vertices.size(); ++i) { - vertices.erase(vertices.begin() + i, vertices.end()); - break; + if ((double)i / vertices.size() > start) + { + vertices.erase(vertices.begin(), vertices.begin() + i - 1); + break; + } + } + } + if (end < 1 && end > 0) + { + for (size_t i = vertices.size(); i > 0; --i) + { + if ((double)(i - 1) / vertices.size() < end) + { + vertices.erase(vertices.begin() + i, vertices.end()); + break; + } } } - vertices.insert(vertices.end(), endPoint); } return vertices; } diff --git a/src/modules/math/wrap_BezierCurve.cpp b/src/modules/math/wrap_BezierCurve.cpp index b49b4f231..cd5b72db5 100644 --- a/src/modules/math/wrap_BezierCurve.cpp +++ b/src/modules/math/wrap_BezierCurve.cpp @@ -179,7 +179,7 @@ int w_BezierCurve_renderSegment(lua_State *L) for (size_t i = 0; i < points.size(); ++i) { lua_pushnumber(L, points[i].x); - lua_rawseti(L, -2, 2*i+2); + lua_rawseti(L, -2, 2*i+1); lua_pushnumber(L, points[i].y); lua_rawseti(L, -2, 2*i+2); }