127 lines
4.3 KiB
C#
127 lines
4.3 KiB
C#
using System.IO;
|
|
using System.Linq;
|
|
using OpenNest.IO;
|
|
using Xunit;
|
|
|
|
namespace OpenNest.Tests.IO
|
|
{
|
|
public class CadImporterTests
|
|
{
|
|
private static string TestDxf =>
|
|
Path.Combine("Bending", "TestData", "4526 A14 PT11.dxf");
|
|
|
|
[Fact]
|
|
public void Import_LoadsEntitiesAndDetectsBends()
|
|
{
|
|
var result = CadImporter.Import(TestDxf);
|
|
|
|
Assert.NotNull(result);
|
|
Assert.NotEmpty(result.Entities);
|
|
Assert.NotNull(result.Bends);
|
|
Assert.NotNull(result.Bounds);
|
|
Assert.Equal(TestDxf, result.SourcePath);
|
|
Assert.Equal("4526 A14 PT11", result.Name);
|
|
}
|
|
|
|
[Fact]
|
|
public void Import_WhenDetectBendsFalse_ReturnsEmptyBends()
|
|
{
|
|
var result = CadImporter.Import(TestDxf, new CadImportOptions { DetectBends = false });
|
|
|
|
Assert.Empty(result.Bends);
|
|
}
|
|
|
|
[Fact]
|
|
public void Import_WhenNameOverrideProvided_UsesOverride()
|
|
{
|
|
var result = CadImporter.Import(TestDxf, new CadImportOptions { Name = "custom" });
|
|
|
|
Assert.Equal("custom", result.Name);
|
|
}
|
|
|
|
[Fact]
|
|
public void BuildDrawing_ProducesDrawingWithProgramAndMetadata()
|
|
{
|
|
var result = CadImporter.Import(TestDxf);
|
|
|
|
var drawing = CadImporter.BuildDrawing(
|
|
result,
|
|
result.Entities,
|
|
result.Bends,
|
|
quantity: 5,
|
|
customer: "ACME",
|
|
editedProgram: null);
|
|
|
|
Assert.NotNull(drawing);
|
|
Assert.Equal("4526 A14 PT11", drawing.Name);
|
|
Assert.Equal("ACME", drawing.Customer);
|
|
Assert.Equal(5, drawing.Quantity.Required);
|
|
Assert.Equal(TestDxf, drawing.Source.Path);
|
|
Assert.NotNull(drawing.Program);
|
|
Assert.NotEmpty(drawing.Program.Codes);
|
|
Assert.NotNull(drawing.SourceEntities);
|
|
Assert.NotEmpty(drawing.SourceEntities);
|
|
}
|
|
|
|
[Fact]
|
|
public void BuildDrawing_ExtractsFirstRapidAsSourceOffset()
|
|
{
|
|
var result = CadImporter.Import(TestDxf);
|
|
|
|
var drawing = CadImporter.BuildDrawing(result, result.Entities, result.Bends,
|
|
quantity: 1, customer: null, editedProgram: null);
|
|
|
|
Assert.NotNull(drawing.Source.Offset);
|
|
// After offset extraction, the program's first rapid must start at origin.
|
|
var firstRapid = (OpenNest.CNC.RapidMove)drawing.Program.Codes[0];
|
|
Assert.Equal(0, firstRapid.EndPoint.X, 6);
|
|
Assert.Equal(0, firstRapid.EndPoint.Y, 6);
|
|
}
|
|
|
|
[Fact]
|
|
public void BuildDrawing_WhenEntityHidden_TracksSuppressedId()
|
|
{
|
|
var result = CadImporter.Import(TestDxf);
|
|
// Suppress the first non-bend-source entity
|
|
var bendSources = result.Bends
|
|
.Where(b => b.SourceEntity != null)
|
|
.Select(b => b.SourceEntity)
|
|
.ToHashSet();
|
|
var hidden = result.Entities.First(e => !bendSources.Contains(e));
|
|
hidden.IsVisible = false;
|
|
|
|
var drawing = CadImporter.BuildDrawing(result, result.Entities, result.Bends,
|
|
quantity: 1, customer: null, editedProgram: null);
|
|
|
|
Assert.Contains(hidden.Id, drawing.SuppressedEntityIds);
|
|
}
|
|
|
|
[Fact]
|
|
public void BuildDrawing_WhenEditedProgramProvided_UsesEditedProgram()
|
|
{
|
|
var result = CadImporter.Import(TestDxf);
|
|
var edited = new OpenNest.CNC.Program();
|
|
edited.MoveTo(new OpenNest.Geometry.Vector(0, 0));
|
|
|
|
var drawing = CadImporter.BuildDrawing(result, result.Entities, result.Bends,
|
|
quantity: 1, customer: null, editedProgram: edited);
|
|
|
|
Assert.Same(edited, drawing.Program);
|
|
}
|
|
|
|
[Fact]
|
|
public void ImportDrawing_ComposesImportAndBuild()
|
|
{
|
|
var drawing = CadImporter.ImportDrawing(TestDxf,
|
|
new CadImportOptions { Quantity = 3, Customer = "ACME" });
|
|
|
|
Assert.NotNull(drawing);
|
|
Assert.Equal("4526 A14 PT11", drawing.Name);
|
|
Assert.Equal(3, drawing.Quantity.Required);
|
|
Assert.Equal("ACME", drawing.Customer);
|
|
Assert.NotNull(drawing.Program);
|
|
Assert.NotNull(drawing.SourceEntities);
|
|
}
|
|
}
|
|
}
|