From a65598615e7576f5b56580ec808b8b2dde378359 Mon Sep 17 00:00:00 2001 From: AJ Isaacs Date: Sun, 5 Apr 2026 23:49:48 -0400 Subject: [PATCH] fix: assign part colors to drawings created by BOM importer and MCP Drawings created by BomImportForm and MCP InputTools were missing color assignments, causing them to render with default empty color instead of the standard part color palette. Moved PartColors and GetNextColor() to Drawing in Core so all consumers share one definition. Co-Authored-By: Claude Opus 4.6 (1M context) --- OpenNest.Core/Drawing.cs | 24 ++++++++++++++++++++++++ OpenNest.Mcp/Tools/InputTools.cs | 3 +++ OpenNest.Training/Program.cs | 16 +--------------- OpenNest/ColorScheme.cs | 16 +--------------- OpenNest/Forms/BomImportForm.cs | 1 + OpenNest/Forms/CadConverterForm.cs | 11 +++-------- 6 files changed, 33 insertions(+), 38 deletions(-) diff --git a/OpenNest.Core/Drawing.cs b/OpenNest.Core/Drawing.cs index bb38232..a76ef63 100644 --- a/OpenNest.Core/Drawing.cs +++ b/OpenNest.Core/Drawing.cs @@ -12,8 +12,32 @@ namespace OpenNest public class Drawing { private static int nextId; + private static int nextColorIndex; private Program program; + public static readonly Color[] PartColors = new Color[] + { + Color.FromArgb(205, 92, 92), // Indian Red + Color.FromArgb(148, 103, 189), // Medium Purple + Color.FromArgb(75, 180, 175), // Teal + Color.FromArgb(210, 190, 75), // Goldenrod + Color.FromArgb(190, 85, 175), // Orchid + Color.FromArgb(185, 115, 85), // Sienna + Color.FromArgb(120, 100, 190), // Slate Blue + Color.FromArgb(200, 100, 140), // Rose + Color.FromArgb(80, 175, 155), // Sea Green + Color.FromArgb(195, 160, 85), // Dark Khaki + Color.FromArgb(175, 95, 160), // Plum + Color.FromArgb(215, 130, 130), // Light Coral + }; + + public static Color GetNextColor() + { + var color = PartColors[nextColorIndex % PartColors.Length]; + nextColorIndex++; + return color; + } + public Drawing() : this(string.Empty, new Program()) { diff --git a/OpenNest.Mcp/Tools/InputTools.cs b/OpenNest.Mcp/Tools/InputTools.cs index d06ce18..7d20be0 100644 --- a/OpenNest.Mcp/Tools/InputTools.cs +++ b/OpenNest.Mcp/Tools/InputTools.cs @@ -112,6 +112,7 @@ namespace OpenNest.Mcp.Tools var drawingName = name ?? Path.GetFileNameWithoutExtension(path); var drawing = new Drawing(drawingName, pgm); + drawing.Color = Drawing.GetNextColor(); _session.Drawings.Add(drawing); var bbox = pgm.BoundingBox(); @@ -155,6 +156,7 @@ namespace OpenNest.Mcp.Tools if (pgm == null) return "Error: failed to parse G-code"; var gcodeDrawing = new Drawing(name, pgm); + gcodeDrawing.Color = Drawing.GetNextColor(); _session.Drawings.Add(gcodeDrawing); var gcodeBbox = pgm.BoundingBox(); return $"Created drawing '{name}': bbox={gcodeBbox.Width:F2} x {gcodeBbox.Length:F2}"; @@ -164,6 +166,7 @@ namespace OpenNest.Mcp.Tools } var drawing = shapeDef.GetDrawing(); + drawing.Color = Drawing.GetNextColor(); _session.Drawings.Add(drawing); var bbox = drawing.Program.BoundingBox(); diff --git a/OpenNest.Training/Program.cs b/OpenNest.Training/Program.cs index 7e4e8fe..eeea637 100644 --- a/OpenNest.Training/Program.cs +++ b/OpenNest.Training/Program.cs @@ -79,21 +79,7 @@ int RunDataCollection(string dir, string dbPath, string saveDir, double s, strin Console.WriteLine($"Using template: {template}"); } - var PartColors = new[] - { - Color.FromArgb(205, 92, 92), - Color.FromArgb(148, 103, 189), - Color.FromArgb(75, 180, 175), - Color.FromArgb(210, 190, 75), - Color.FromArgb(190, 85, 175), - Color.FromArgb(185, 115, 85), - Color.FromArgb(120, 100, 190), - Color.FromArgb(200, 100, 140), - Color.FromArgb(80, 175, 155), - Color.FromArgb(195, 160, 85), - Color.FromArgb(175, 95, 160), - Color.FromArgb(215, 130, 130), - }; + var PartColors = Drawing.PartColors; var sheetSuite = new[] { diff --git a/OpenNest/ColorScheme.cs b/OpenNest/ColorScheme.cs index b0911d0..6c34709 100644 --- a/OpenNest/ColorScheme.cs +++ b/OpenNest/ColorScheme.cs @@ -13,21 +13,7 @@ namespace OpenNest private Color edgeSpacingColor; private Color previewPartColor; - public static readonly Color[] PartColors = new Color[] - { - Color.FromArgb(205, 92, 92), // Indian Red - Color.FromArgb(148, 103, 189), // Medium Purple - Color.FromArgb(75, 180, 175), // Teal - Color.FromArgb(210, 190, 75), // Goldenrod - Color.FromArgb(190, 85, 175), // Orchid - Color.FromArgb(185, 115, 85), // Sienna - Color.FromArgb(120, 100, 190), // Slate Blue - Color.FromArgb(200, 100, 140), // Rose - Color.FromArgb(80, 175, 155), // Sea Green - Color.FromArgb(195, 160, 85), // Dark Khaki - Color.FromArgb(175, 95, 160), // Plum - Color.FromArgb(215, 130, 130), // Light Coral - }; + public static Color[] PartColors => Drawing.PartColors; public static readonly ColorScheme Default = new ColorScheme { diff --git a/OpenNest/Forms/BomImportForm.cs b/OpenNest/Forms/BomImportForm.cs index fb8f376..3a49f63 100644 --- a/OpenNest/Forms/BomImportForm.cs +++ b/OpenNest/Forms/BomImportForm.cs @@ -420,6 +420,7 @@ namespace OpenNest.Forms var drawingName = Path.GetFileNameWithoutExtension(part.DxfPath); var drawing = new Drawing(drawingName); + drawing.Color = Drawing.GetNextColor(); drawing.Source.Path = part.DxfPath; drawing.Quantity.Required = part.Qty ?? 1; drawing.Material = new Material(material); diff --git a/OpenNest/Forms/CadConverterForm.cs b/OpenNest/Forms/CadConverterForm.cs index 4e61ddc..fa1f184 100644 --- a/OpenNest/Forms/CadConverterForm.cs +++ b/OpenNest/Forms/CadConverterForm.cs @@ -19,7 +19,7 @@ namespace OpenNest.Forms { public partial class CadConverterForm : Form { - private static int colorIndex; + private SimplifierViewerForm simplifierViewer; private bool staleProgram = true; @@ -622,7 +622,7 @@ namespace OpenNest.Forms continue; var drawing = new Drawing(item.Name); - drawing.Color = GetNextColor(); + drawing.Color = Drawing.GetNextColor(); drawing.Customer = item.Customer; drawing.Source.Path = item.Path; drawing.Quantity.Required = item.Quantity; @@ -671,12 +671,7 @@ namespace OpenNest.Forms } - private static Color GetNextColor() - { - var color = ColorScheme.PartColors[colorIndex % ColorScheme.PartColors.Length]; - colorIndex++; - return color; - } + private static Color GetNextColor() => Drawing.GetNextColor(); private static bool IsDirectoryWritable(string path) {