浏览代码

Merged in Mastificate/love (pull request #77)

Fix infinite loop bug with bezier curves
Alex Szpakowski 8 年之前
父节点
当前提交
01ff7d1275
共有 1 个文件被更改,包括 12 次插入0 次删除
  1. 12 0
      src/modules/math/BezierCurve.cpp

+ 12 - 0
src/modules/math/BezierCurve.cpp

@@ -105,6 +105,9 @@ BezierCurve BezierCurve::getDerivative() const
 
 
 const Vector &BezierCurve::getControlPoint(int i) const
 const Vector &BezierCurve::getControlPoint(int i) const
 {
 {
+	if (controlPoints.size() == 0)
+		throw Exception("Curve contains no control points.");
+		
 	while (i < 0)
 	while (i < 0)
 		i += controlPoints.size();
 		i += controlPoints.size();
 
 
@@ -116,6 +119,9 @@ const Vector &BezierCurve::getControlPoint(int i) const
 
 
 void BezierCurve::setControlPoint(int i, const Vector &point)
 void BezierCurve::setControlPoint(int i, const Vector &point)
 {
 {
+	if (controlPoints.size() == 0)
+		throw Exception("Curve contains no control points.");
+
 	while (i < 0)
 	while (i < 0)
 		i += controlPoints.size();
 		i += controlPoints.size();
 
 
@@ -127,6 +133,9 @@ void BezierCurve::setControlPoint(int i, const Vector &point)
 
 
 void BezierCurve::insertControlPoint(const Vector &point, int i)
 void BezierCurve::insertControlPoint(const Vector &point, int i)
 {
 {
+	if (controlPoints.size() == 0)
+		i = 0;
+
 	while (i < 0)
 	while (i < 0)
 		i += controlPoints.size();
 		i += controlPoints.size();
 
 
@@ -138,6 +147,9 @@ void BezierCurve::insertControlPoint(const Vector &point, int i)
 
 
 void BezierCurve::removeControlPoint(int i)
 void BezierCurve::removeControlPoint(int i)
 {
 {
+	if (controlPoints.size() == 0)
+		throw Exception("No control points to remove.");
+
 	while (i < 0)
 	while (i < 0)
 		i += controlPoints.size();
 		i += controlPoints.size();