Files
OpenNest/OpenNest/Controls/PreviewManager.cs
T
ajandClaude Opus 5.5 c27188c722 perf(desktop): reuse cached part paths when zooming and dragging
Each zoom step rebuilt every part's display paths from its CNC program,
and each drag step rebuilt the moved parts, which dominates for parts
with hundreds of holes. LayoutPart now keeps its paths in the drawing's
program frame and only maps them to the view on a zoom or move,
rebuilding when IsDirty is set or the program, rotation or manual
lead-ins change. Also caches the label StringFormat.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-25 18:11:08 -04:00

68 lines
1.5 KiB
C#

using System.Collections.Generic;
using System.Drawing;
namespace OpenNest.Controls
{
internal class PreviewManager
{
private readonly PlateView view;
private readonly List<LayoutPart> activeParts = new List<LayoutPart>();
public PreviewManager(PlateView view)
{
this.view = view;
}
public IReadOnlyList<LayoutPart> PreviewParts => activeParts;
public Brush PreviewBrush => view.ColorScheme.ActivePreviewPartBrush;
public Pen PreviewPen => view.ColorScheme.ActivePreviewPartPen;
public void SetActiveParts(List<Part> parts)
{
activeParts.Clear();
if (parts != null)
{
foreach (var part in parts)
activeParts.Add(LayoutPart.Create(part, view));
}
view.Invalidate();
}
public void ClearPreviewParts()
{
activeParts.Clear();
view.Invalidate();
}
public void AcceptPreviewParts(List<Part> parts)
{
if (parts != null)
{
foreach (var part in parts)
view.Plate.Parts.Add(part);
}
activeParts.Clear();
}
public void Update()
{
activeParts.ForEach(p => p.Update(view));
}
public void UpdateView()
{
activeParts.ForEach(p => p.UpdateView(view));
}
public void Clear()
{
activeParts.Clear();
}
}
}