using System.Drawing.Drawing2D; using OpenNest.Controls; using OpenNest.Geometry; namespace OpenNest.WinForms.Tests.Controls; /// /// Each segment of a cut-off is its own part of the one cut-off drawing. Its sequence label must /// sit on its own cut: labelled from the whole drawing, every segment stacked its number on one /// point, and the view's culling decided which one showed as the user zoomed. /// public class CutOffSegmentLabelTests { [Fact] public void EachSegmentIsLabelledAtTheMiddleOfItsOwnCut() => StaTestThread.Run(() => { using var view = new PlateView(ColorSchemeRegistry.Get("Workshop")); view.Matrix = new Matrix(); view.Plate.Size = new OpenNest.Geometry.Size(100, 100); view.Plate.Quadrant = 1; view.Plate.Parts.Add(new Part(new Drawing("Block", Square(20)), new Vector(40, 40))); view.Plate.CutOffs.Add(new CutOff(new Vector(50, 0), CutOffAxis.Vertical)); view.Plate.RegenerateCutOffs(new CutOffSettings()); var segments = view.Plate.Parts.Where(p => p.BaseDrawing.IsCutOff).ToList(); Assert.Equal(2, segments.Count); var labels = new List(); foreach (var segment in segments) { var layout = LayoutPart.Create(segment, view); var extent = CutOffSegments.Extent(segment, vertical: true)!.Value; Assert.Equal(50, layout.LabelScreenPoint.X, 3); Assert.Equal((extent.Start + extent.End) / 2, layout.LabelScreenPoint.Y, 3); labels.Add(layout.LabelScreenPoint.Y); layout.ReleaseDisplayResources(); } Assert.NotEqual(labels[0], labels[1]); }, TimeSpan.FromMinutes(1), "Cut-off segment label test timed out."); private static OpenNest.CNC.Program Square(double size) { var program = new OpenNest.CNC.Program(); program.MoveTo(0, 0); program.LineTo(size, 0); program.LineTo(size, size); program.LineTo(0, size); program.LineTo(0, 0); return program; } }