mirror of
https://github.com/ajisaacs/OpenNest.git
synced 2026-10-10 15:34:14 -04:00
Keep cut outlines dark and etch strokes bright green. Assign drawing fills by a golden-angle hue walk with varied saturation/lightness tiers, preserving legacy schemes and rendering-only behavior. Include palette, visibility, persistence, and contrast regressions.
81 lines
3.6 KiB
C#
81 lines
3.6 KiB
C#
using System.Drawing;
|
|
using OpenNest.Forms;
|
|
|
|
namespace OpenNest.WinForms.Tests;
|
|
|
|
[Collection("Fill operation lifetime")]
|
|
public class GoldenAngleColorTests
|
|
{
|
|
[Fact]
|
|
public void WorkshopRecolorsEachDrawingBeyondAShortPaletteAndKeepsCopiesTogether()
|
|
=> StaTestThread.Run(() =>
|
|
{
|
|
var previous = ColorSchemeSerializer.Deserialize(ColorSchemeSerializer.Serialize(ColorScheme.Default));
|
|
try
|
|
{
|
|
var nest = new Nest("Generated drawing colors");
|
|
var cutoff = new Drawing("Cutoff") { IsCutOff = true, Color = Color.Gray };
|
|
for (var i = 0; i < 24; i++)
|
|
{
|
|
var program = new CNC.Program();
|
|
program.MoveTo(0, 0);
|
|
program.LineTo(100, 0);
|
|
program.LineTo(100, 100);
|
|
program.LineTo(0, 100);
|
|
program.LineTo(0, 0);
|
|
nest.Drawings.Add(new Drawing($"Drawing {i}", program) { Color = Color.Coral });
|
|
if (i == 0)
|
|
nest.Drawings.Add(cutoff);
|
|
}
|
|
var plate = nest.CreatePlate();
|
|
plate.Parts.Add(new Part(nest.Drawings.First()));
|
|
plate.Parts.Add(new Part(nest.Drawings.First()));
|
|
using var editor = new EditNestForm(nest);
|
|
editor.PlateView.SetOverlapAutoCheck(null);
|
|
editor.Show();
|
|
ColorSchemeRegistry.Apply(ColorSchemeRegistry.Get("Workshop"));
|
|
|
|
var drawings = nest.Drawings.Where(d => !d.IsCutOff).ToArray();
|
|
Assert.Equal(24, drawings.Select(d => d.Color.ToArgb()).Distinct().Count());
|
|
Assert.Equal(Color.FromArgb(216, 49, 49), drawings[0].Color);
|
|
Assert.Equal(Color.FromArgb(98, 160, 234), drawings[1].Color);
|
|
Assert.Equal(Color.Gray, cutoff.Color);
|
|
Assert.Same(plate.Parts[0].BaseDrawing, plate.Parts[1].BaseDrawing);
|
|
var colors = drawings.Select(d => d.Color).ToArray();
|
|
ColorSchemeRegistry.Apply(ColorSchemeRegistry.Get("Workshop"));
|
|
Assert.Equal(colors, drawings.Select(d => d.Color));
|
|
}
|
|
finally
|
|
{
|
|
ColorSchemeRegistry.Apply(previous);
|
|
}
|
|
}, TimeSpan.FromMinutes(1), "Generated palette recolor timed out.");
|
|
|
|
[Fact]
|
|
public void NewlyImportedColorsUseGeneratedHuesAndSwitchBackToLegacyPalettes()
|
|
=> StaTestThread.Run(() =>
|
|
{
|
|
var previous = ColorSchemeSerializer.Deserialize(ColorSchemeSerializer.Serialize(ColorScheme.Default));
|
|
try
|
|
{
|
|
ColorSchemeRegistry.Apply(ColorSchemeRegistry.Get("Workshop"));
|
|
var colors = Enumerable.Range(0, 100).Select(_ => Drawing.GetNextColor()).ToArray();
|
|
Assert.True(colors.Select(c => c.ToArgb()).Distinct().Count() > 90);
|
|
Assert.All(colors, color =>
|
|
{
|
|
Assert.InRange(color.GetSaturation(), 0.44f, 0.99f);
|
|
Assert.InRange(color.GetBrightness(), 0.4f, 0.82f);
|
|
var hue = color.GetHue();
|
|
Assert.True(hue < 95 || hue >= 165);
|
|
});
|
|
var classic = ColorSchemeRegistry.Get("Classic");
|
|
ColorSchemeRegistry.Apply(classic);
|
|
Assert.Contains(Drawing.GetNextColor(), classic.PartColors);
|
|
}
|
|
finally
|
|
{
|
|
ColorSchemeRegistry.Apply(previous);
|
|
}
|
|
}, TimeSpan.FromMinutes(1), "Generated import colors timed out.");
|
|
}
|