Browse Source

fix last commit

muddmaker 11 years ago
parent
commit
ccd856255d
2 changed files with 20 additions and 17 deletions
  1. 19 16
      src/modules/math/BezierCurve.cpp
  2. 1 1
      src/modules/math/wrap_BezierCurve.cpp

+ 19 - 16
src/modules/math/BezierCurve.cpp

@@ -189,31 +189,34 @@ vector<Vector> BezierCurve::renderSegment(double start, double end, size_t accur
 		throw Exception("Invalid Bezier curve: Not enough control points.");
 	vector<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)
+		vertices.clear();
+	}
+	else if (start < end)
+	{
+		if (start > 0 && start < 1)
 		{
-			if ((double)i / vertices.size() > start)
+			for (size_t i = 0; i < vertices.size(); ++i)
 			{
-				vertices.erase(vertices.begin(), vertices.begin() + i - 1);
-				break;
+				if ((double)i / vertices.size() > start)
+				{
+					vertices.erase(vertices.begin(), vertices.begin() + i - 1);
+					break;
+				}
 			}
 		}
-		vertices.insert(vertices.begin(), startPoint);
-	}
-	if (end < 1)
-	{
-		Vector endPoint = evaluate(end);
-		for (size_t i = vertices.size(); i > 0; --i)
+		if (end < 1 && end > 0)
 		{
-			if ((double)(i - 1) / vertices.size() < end)
+			for (size_t i = vertices.size(); i > 0; --i)
 			{
-				vertices.erase(vertices.begin() + i, vertices.end());
-				break;
+				if ((double)(i - 1) / vertices.size() < end)
+				{
+					vertices.erase(vertices.begin() + i, vertices.end());
+					break;
+				}
 			}
 		}
-		vertices.insert(vertices.end(), endPoint);
 	}
 	return vertices;
 }

+ 1 - 1
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);
 	}