88 lines
3.3 KiB
C#
88 lines
3.3 KiB
C#
using System.Collections.Generic;
|
|
using System.Linq;
|
|
|
|
namespace FurnitureExporter.Tests
|
|
{
|
|
public class MountPatternAnalyzerTests
|
|
{
|
|
[Fact]
|
|
public void BuildMountPatterns_ForTwoHoleLine_RequiresTwoHoles()
|
|
{
|
|
var panel = CreatePanel("panel_line");
|
|
var holes = new List<HoleInfo>
|
|
{
|
|
CreateHole("hole_a", "panel_line", new[] { -40.0, 0.0, 0.0 }, new[] { 0.0, -1.0, 0.0 }, new[] { "top" }),
|
|
CreateHole("hole_b", "panel_line", new[] { 40.0, 0.0, 0.0 }, new[] { 0.0, -1.0, 0.0 }, new[] { "top" }),
|
|
};
|
|
|
|
var patterns = MountPatternAnalyzer.BuildMountPatterns(
|
|
new[] { panel },
|
|
holes,
|
|
new List<HoleGroupInfo>());
|
|
|
|
var pattern = Assert.Single(patterns);
|
|
Assert.Equal("line_2", pattern.PatternType);
|
|
Assert.Equal(2, pattern.MinRequiredHoles);
|
|
Assert.Equal(2, pattern.PreferredHoleCount);
|
|
}
|
|
|
|
[Fact]
|
|
public void BuildMountPatterns_ForSymmetricRectangle_DefaultsToTwoRequiredHoles()
|
|
{
|
|
var panel = CreatePanel("panel_rect");
|
|
var holes = new List<HoleInfo>
|
|
{
|
|
CreateHole("hole_a", "panel_rect", new[] { -40.0, 0.0, -20.0 }, new[] { 0.0, -1.0, 0.0 }, new[] { "top" }),
|
|
CreateHole("hole_b", "panel_rect", new[] { 40.0, 0.0, -20.0 }, new[] { 0.0, -1.0, 0.0 }, new[] { "top" }),
|
|
CreateHole("hole_c", "panel_rect", new[] { -40.0, 0.0, 20.0 }, new[] { 0.0, -1.0, 0.0 }, new[] { "top" }),
|
|
CreateHole("hole_d", "panel_rect", new[] { 40.0, 0.0, 20.0 }, new[] { 0.0, -1.0, 0.0 }, new[] { "top" }),
|
|
};
|
|
|
|
var patterns = MountPatternAnalyzer.BuildMountPatterns(
|
|
new[] { panel },
|
|
holes,
|
|
new List<HoleGroupInfo>());
|
|
|
|
var pattern = Assert.Single(patterns);
|
|
Assert.Equal("rectangle_4", pattern.PatternType);
|
|
Assert.Equal(2, pattern.MinRequiredHoles);
|
|
Assert.Equal(4, pattern.PreferredHoleCount);
|
|
Assert.True(pattern.Symmetry);
|
|
Assert.Empty(pattern.RequiredHoleIds);
|
|
Assert.Equal(4, pattern.OptionalHoleIds.Length);
|
|
}
|
|
|
|
private static PanelInfo CreatePanel(string id)
|
|
{
|
|
return new PanelInfo
|
|
{
|
|
Id = id,
|
|
Position = new[] { 0.0, 0.0, 0.0 },
|
|
Normal = new[] { 0.0, 1.0, 0.0 },
|
|
BoundingBox = new BoundingBox3D
|
|
{
|
|
Min = new[] { -300.0, -9.0, -300.0 },
|
|
Max = new[] { 300.0, 9.0, 300.0 },
|
|
},
|
|
Size = new[] { 600.0, 18.0, 600.0 },
|
|
};
|
|
}
|
|
|
|
private static HoleInfo CreateHole(string id, string panelId, double[] position, double[] normal, string[] surfaceFaces)
|
|
{
|
|
return new HoleInfo
|
|
{
|
|
Id = id,
|
|
PanelId = panelId,
|
|
Position = position,
|
|
Normal = normal,
|
|
Diameter = 8.0,
|
|
Radius = 4.0,
|
|
Depth = 12.0,
|
|
Type = "blind",
|
|
SurfaceFaces = surfaceFaces,
|
|
};
|
|
}
|
|
}
|
|
}
|