Files
OpenNest/OpenNest.WinForms.Tests/LayoutPartColorTests.cs
T

84 lines
3.9 KiB
C#

using System.Drawing;
using System.Drawing.Drawing2D;
using OpenNest.Controls;
using OpenNest.Diagnostics;
using OpenNest.Geometry;
namespace OpenNest.WinForms.Tests;
public class LayoutPartColorTests
{
[Fact]
public void ValidationMutesOnlyUnrelatedInstancesAndRestoresColors()
=> StaTestThread.Run(() =>
{
var program = new CNC.Program();
program.MoveTo(0, 0);
program.LineTo(40, 0);
program.LineTo(40, 40);
program.LineTo(0, 40);
program.LineTo(0, 0);
var drawing = new Drawing("shared drawing", program) { Color = Color.Coral };
using var view = new PlateView { Width = 240, Height = 100, DrawBounds = false };
view.Matrix = new Matrix();
for (var i = 0; i < 3; i++)
view.Plate.Parts.Add(new Part(drawing) { Location = new Vector(i * 60, 0) });
using var image = new Bitmap(240, 100);
using var graphics = Graphics.FromImage(image);
view.ShowValidationFinding(new PostVerificationFinding(PostVerificationKind.Overlap, 1, 1, 2, "overlap"));
view.LayoutParts[2].IsSelected = true;
view.Renderer.DrawParts(graphics);
Assert.Equal(Color.Coral.ToArgb(), image.GetPixel(10, 10).ToArgb());
Assert.Equal(Color.Coral.ToArgb(), image.GetPixel(70, 10).ToArgb());
Assert.Equal(Color.Gainsboro.ToArgb(), image.GetPixel(130, 10).ToArgb());
Assert.True(view.LayoutParts[2].IsSelected);
view.LayoutParts[2].IsSelected = false;
view.ShowValidationFinding(new PostVerificationFinding(PostVerificationKind.MissingLeadIn, 1, 3, null, "lead"));
view.Renderer.DrawParts(graphics);
Assert.Equal(Color.Gainsboro.ToArgb(), image.GetPixel(10, 10).ToArgb());
Assert.Equal(Color.Gainsboro.ToArgb(), image.GetPixel(70, 10).ToArgb());
Assert.Equal(Color.Coral.ToArgb(), image.GetPixel(130, 10).ToArgb());
view.ClearValidationFinding();
view.Renderer.DrawParts(graphics);
for (var i = 0; i < 3; i++)
Assert.Equal(Color.Coral.ToArgb(), image.GetPixel(i * 60 + 10, 10).ToArgb());
Assert.Equal(Color.Coral, drawing.Color);
Assert.All(view.LayoutParts, part => Assert.Equal(Color.Coral, part.Color));
}, TimeSpan.FromMinutes(1), "Validation color test timed out.");
[Theory]
[InlineData(false)]
[InlineData(true)]
public void BestFitColorOverrideSurvivesPaintAndGeometryUpdate(bool updateGeometry)
=> StaTestThread.Run(() =>
{
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);
var drawing = new Drawing("Best fit color", program) { Color = Color.Coral };
using var cell = new BestFitCell(ColorSchemeRegistry.Get("Classic")) { PartColor = Color.Blue };
cell.Matrix = new Matrix();
cell.Plate.Parts.Add(new Part(drawing));
var layout = Assert.Single(cell.LayoutParts);
Assert.Equal(Color.Blue, layout.Color);
if (updateGeometry)
layout.Update(cell);
using var image = new Bitmap(120, 120);
using var g = Graphics.FromImage(image);
layout.Draw(g);
Assert.Equal(Color.Blue.ToArgb(), image.GetPixel(20, 20).ToArgb());
Assert.Equal(Color.Blue, layout.Color);
Assert.Equal(Color.Coral, drawing.Color);
// The existing explicit refresh returns color ownership to the drawing.
layout.Update();
layout.Draw(g);
Assert.Equal(Color.Coral.ToArgb(), image.GetPixel(20, 20).ToArgb());
}, TimeSpan.FromMinutes(1), "Best fit color test timed out.");
}