From ca35945c13521b16e75f528beb8ce4bf4d83addc Mon Sep 17 00:00:00 2001 From: AJ Isaacs Date: Thu, 19 Mar 2026 11:50:56 -0400 Subject: [PATCH] fix(ui): show active or stationary preview parts, not both overlapping MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Draw only one set of preview parts at a time — active (current strategy) takes precedence over stationary (overall best). Also clears active parts when setting new stationary parts to prevent stale previews. Co-Authored-By: Claude Opus 4.6 (1M context) --- OpenNest/Controls/PlateView.cs | 32 +++++++++++--------------------- 1 file changed, 11 insertions(+), 21 deletions(-) diff --git a/OpenNest/Controls/PlateView.cs b/OpenNest/Controls/PlateView.cs index d4f545f..e0f06e9 100644 --- a/OpenNest/Controls/PlateView.cs +++ b/OpenNest/Controls/PlateView.cs @@ -506,10 +506,15 @@ namespace OpenNest.Controls part.Draw(g, (i + 1).ToString()); } - // Draw stationary preview parts (overall best — full opacity) - for (var i = 0; i < stationaryParts.Count; i++) + // Draw preview parts — active (current strategy) takes precedence + // over stationary (overall best) to avoid overlapping fills. + var previewParts = activeParts.Count > 0 ? activeParts : stationaryParts; + var previewBrush = activeParts.Count > 0 ? ColorScheme.ActivePreviewPartBrush : ColorScheme.PreviewPartBrush; + var previewPen = activeParts.Count > 0 ? ColorScheme.ActivePreviewPartPen : ColorScheme.PreviewPartPen; + + for (var i = 0; i < previewParts.Count; i++) { - var part = stationaryParts[i]; + var part = previewParts[i]; if (part.IsDirty) part.Update(this); @@ -518,24 +523,8 @@ namespace OpenNest.Controls if (!path.GetBounds().IntersectsWith(viewBounds)) continue; - g.FillPath(ColorScheme.PreviewPartBrush, path); - g.DrawPath(ColorScheme.PreviewPartPen, path); - } - - // Draw active preview parts (current strategy — reduced opacity) - for (var i = 0; i < activeParts.Count; i++) - { - var part = activeParts[i]; - - if (part.IsDirty) - part.Update(this); - - var path = part.Path; - if (!path.GetBounds().IntersectsWith(viewBounds)) - continue; - - g.FillPath(ColorScheme.ActivePreviewPartBrush, path); - g.DrawPath(ColorScheme.ActivePreviewPartPen, path); + g.FillPath(previewBrush, path); + g.DrawPath(previewPen, path); } if (DrawOffset && Plate.PartSpacing > 0) @@ -899,6 +888,7 @@ namespace OpenNest.Controls public void SetStationaryParts(List parts) { stationaryParts.Clear(); + activeParts.Clear(); if (parts != null) {