mirror of
https://github.com/love2d/love.git
synced 2026-08-16 00:02:12 +02:00
Added BezierCurve:renderSegment
This commit is contained in:
@@ -183,6 +183,40 @@ vector<Vector> BezierCurve::render(size_t accuracy) const
|
||||
return vertices;
|
||||
}
|
||||
|
||||
vector<Vector> BezierCurve::renderSegment(double start, double end, size_t accuracy) const
|
||||
{
|
||||
if (controlPoints.size() < 2)
|
||||
throw Exception("Invalid Bezier curve: Not enough control points.");
|
||||
vector<Vector> vertices(controlPoints);
|
||||
subdivide(vertices, accuracy);
|
||||
if (start > 0)
|
||||
{
|
||||
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);
|
||||
}
|
||||
if (end < 1)
|
||||
{
|
||||
Vector endPoint = evaluate(end);
|
||||
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;
|
||||
}
|
||||
|
||||
} // namespace math
|
||||
} // namespace love
|
||||
|
||||
Reference in New Issue
Block a user