feat: add IRapidPlanner, RapidPath, and SafeHeightRapidPlanner
This commit is contained in:
@@ -0,0 +1,10 @@
|
|||||||
|
using System.Collections.Generic;
|
||||||
|
using OpenNest.Geometry;
|
||||||
|
|
||||||
|
namespace OpenNest.Engine.RapidPlanning
|
||||||
|
{
|
||||||
|
public interface IRapidPlanner
|
||||||
|
{
|
||||||
|
RapidPath Plan(Vector from, Vector to, IReadOnlyList<Shape> cutAreas);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
using System.Collections.Generic;
|
||||||
|
using OpenNest.Geometry;
|
||||||
|
|
||||||
|
namespace OpenNest.Engine.RapidPlanning
|
||||||
|
{
|
||||||
|
public readonly struct RapidPath
|
||||||
|
{
|
||||||
|
public bool HeadUp { get; init; }
|
||||||
|
public List<Vector> Waypoints { get; init; }
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,17 @@
|
|||||||
|
using System.Collections.Generic;
|
||||||
|
using OpenNest.Geometry;
|
||||||
|
|
||||||
|
namespace OpenNest.Engine.RapidPlanning
|
||||||
|
{
|
||||||
|
public class SafeHeightRapidPlanner : IRapidPlanner
|
||||||
|
{
|
||||||
|
public RapidPath Plan(Vector from, Vector to, IReadOnlyList<Shape> cutAreas)
|
||||||
|
{
|
||||||
|
return new RapidPath
|
||||||
|
{
|
||||||
|
HeadUp = true,
|
||||||
|
Waypoints = new List<Vector>()
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,39 @@
|
|||||||
|
using System.Collections.Generic;
|
||||||
|
using OpenNest.Engine.RapidPlanning;
|
||||||
|
using OpenNest.Geometry;
|
||||||
|
using Xunit;
|
||||||
|
|
||||||
|
namespace OpenNest.Tests.RapidPlanning;
|
||||||
|
|
||||||
|
public class SafeHeightRapidPlannerTests
|
||||||
|
{
|
||||||
|
[Fact]
|
||||||
|
public void AlwaysReturnsHeadUp()
|
||||||
|
{
|
||||||
|
var planner = new SafeHeightRapidPlanner();
|
||||||
|
var from = new Vector(10, 10);
|
||||||
|
var to = new Vector(50, 50);
|
||||||
|
var cutAreas = new List<Shape>();
|
||||||
|
|
||||||
|
var result = planner.Plan(from, to, cutAreas);
|
||||||
|
|
||||||
|
Assert.True(result.HeadUp);
|
||||||
|
Assert.Empty(result.Waypoints);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void ReturnsHeadUp_EvenWithCutAreas()
|
||||||
|
{
|
||||||
|
var planner = new SafeHeightRapidPlanner();
|
||||||
|
var from = new Vector(0, 0);
|
||||||
|
var to = new Vector(10, 10);
|
||||||
|
|
||||||
|
var shape = new Shape();
|
||||||
|
shape.Entities.Add(new Line(new Vector(5, 0), new Vector(5, 20)));
|
||||||
|
var cutAreas = new List<Shape> { shape };
|
||||||
|
|
||||||
|
var result = planner.Plan(from, to, cutAreas);
|
||||||
|
|
||||||
|
Assert.True(result.HeadUp);
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user