chore: remove one-off NestBuilder tool

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-03-24 23:09:35 -04:00
parent 1f159d5dcc
commit 4cc8b8f9b7
2 changed files with 0 additions and 219 deletions

View File

@@ -1,10 +0,0 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net8.0-windows</TargetFramework>
</PropertyGroup>
<ItemGroup>
<ProjectReference Include="..\..\OpenNest.Core\OpenNest.Core.csproj" />
<ProjectReference Include="..\..\OpenNest.IO\OpenNest.IO.csproj" />
</ItemGroup>
</Project>

View File

@@ -1,209 +0,0 @@
using System;
using System.Drawing;
using System.IO;
using System.Linq;
using OpenNest;
using OpenNest.Converters;
using OpenNest.Geometry;
using Size = OpenNest.Geometry.Size;
using OpenNest.IO;
var 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
};
var templateDir = @"C:\Users\AJ\Desktop\Projects\OpenNest\docs\Templates";
var outputDir = @"C:\Users\AJ\Desktop\Projects\OpenNest\docs\Templates\Nests";
Directory.CreateDirectory(outputDir);
// BOM: (fileName, qty, thickness, material)
var bom = new (string File, int Qty, double Thickness, string Material)[]
{
("PT01", 2, 0.250, "304SS"),
("PT02", 5, 0.625, "304SS"),
("PT03", 4, 0.250, "304SS"),
("PT04", 4, 0.250, "304SS"),
("PT05", 1, 0.250, "304SS"),
("PT06", 21, 0.375, "304SS"),
("PT07", 2, 0.250, "304SS"),
("PT08", 22, 0.250, "304SS"),
("PT11", 2, 0.1875, "304SS"),
("PT12", 2, 0.1875, "304SS"),
("PT13", 6, 0.1875, "304SS"),
("PT15", 6, 0.1875, "304SS"),
("PT16", 6, 0.1875, "304SS"),
("PT18", 3, 0.250, "304SS"),
("PT19", 3, 0.1875, "304SS"),
("PT20", 2, 0.1196, "304SS"),
("PT21", 6, 0.1196, "304SS"),
("PT22", 2, 0.1196, "304SS"),
("PT23", 1, 0.0598, "304SS"),
("PT24", 1, 0.0598, "304SS"),
("PT26", 4, 0.250, "304SS"),
("PT27", 2, 0.250, "304SS"),
("PT28", 4, 0.250, "304SS"),
("PT29", 6, 0.250, "304SS"),
("PT33", 2, 0.250, "304SS"),
("PT34", 4, 0.250, "304SS"),
("PT35", 3, 0.1875, "304SS"),
("PT36", 4, 0.1875, "304SS"),
("PT37", 4, 0.1875, "304SS"),
("PT38", 4, 0.1875, "304SS"),
("PT39", 2, 0.0598, "304SS"),
("PT40", 4, 0.0598, "304SS"),
("PT41", 1, 0.1875, "304SS"),
("PT43", 1, 0.0598, "304SS"),
("PT44", 1, 0.0598, "304SS"),
("PT45", 1, 0.250, "304SS"),
("PT46", 2, 0.250, "304SS"),
("PT47", 4, 0.250, "304SS"),
("PT48", 1, 0.250, "304SS"),
("PT49", 1, 0.750, "PCS"),
("PT50", 2, 0.375, "PCS"),
("PT51", 1, 0.250, "304SS"),
("PT52", 1, 0.1875, "304SS"),
("PT53", 1, 0.1875, "304SS"),
("PT54", 2, 0.250, "304SS"),
("PT55", 1, 0.1196, "304SS"),
("PT56", 1, 0.1196, "304SS"),
("PT57", 1, 0.0598, "304SS"),
("PT58", 1, 0.0598, "304SS"),
};
// Group by material + thickness
var groups = bom.GroupBy(b => (b.Material, b.Thickness)).OrderBy(g => g.Key.Material).ThenBy(g => g.Key.Thickness);
foreach (var group in groups)
{
var material = group.Key.Material;
var thickness = group.Key.Thickness;
var thicknessLabel = thickness switch
{
0.0598 => "16GA",
0.1196 => "11GA",
0.1875 => "3-16",
0.250 => "1-4",
0.375 => "3-8",
0.625 => "5-8",
0.750 => "3-4",
_ => thickness.ToString("F4")
};
var nestName = $"4526 A14 - {material} {thicknessLabel}";
Console.WriteLine($"\n=== {nestName} ===");
var nest = new Nest();
nest.Name = nestName;
nest.PlateDefaults.Thickness = thickness;
nest.PlateDefaults.Material = new Material { Name = material };
nest.PlateDefaults.PartSpacing = 0.125;
nest.PlateDefaults.EdgeSpacing = new Spacing(0.25, 0.25, 0.25, 0.25);
// Import DXFs for this group
var importer = new DxfImporter();
var colorIndex = 0;
double maxMinDim = 0;
double maxMaxDim = 0;
foreach (var item in group)
{
var dxfPath = Path.Combine(templateDir, $"4526 A14 {item.File}.dxf");
if (!File.Exists(dxfPath))
{
Console.WriteLine($" WARNING: {dxfPath} not found, skipping");
continue;
}
if (!importer.GetGeometry(dxfPath, out var geometry) || geometry.Count == 0)
{
Console.WriteLine($" WARNING: no geometry in {item.File}, skipping");
continue;
}
var pgm = ConvertGeometry.ToProgram(geometry);
if (pgm == null)
{
Console.WriteLine($" WARNING: failed to convert {item.File}, skipping");
continue;
}
var drawing = new Drawing(item.File, pgm);
drawing.Quantity.Required = item.Qty;
drawing.Material = new Material { Name = material };
drawing.Color = partColors[colorIndex % partColors.Length];
colorIndex++;
nest.Drawings.Add(drawing);
var bbox = pgm.BoundingBox();
var minDim = System.Math.Min(bbox.Width, bbox.Length);
var maxDim = System.Math.Max(bbox.Width, bbox.Length);
maxMinDim = System.Math.Max(maxMinDim, minDim);
maxMaxDim = System.Math.Max(maxMaxDim, maxDim);
Console.WriteLine($" {item.File}: {bbox.Width:F2} x {bbox.Length:F2}, qty={item.Qty}");
}
// Choose plate size based on largest part dimensions
// Size(width, length) — width is the short side, length is the long side
// Standard sizes: 48x96, 48x120, 60x120, 60x144, 72x144, 96x120
double plateW, plateL;
if (maxMinDim <= 47.5 && maxMaxDim <= 95.5)
{
plateW = 48; plateL = 96;
}
else if (maxMinDim <= 47.5 && maxMaxDim <= 119.5)
{
plateW = 48; plateL = 120;
}
else if (maxMinDim <= 59.5 && maxMaxDim <= 119.5)
{
plateW = 60; plateL = 120;
}
else if (maxMinDim <= 59.5 && maxMaxDim <= 143.5)
{
plateW = 60; plateL = 144;
}
else if (maxMinDim <= 71.5 && maxMaxDim <= 143.5)
{
plateW = 72; plateL = 144;
}
else if (maxMinDim <= 95.5 && maxMaxDim <= 119.5)
{
plateW = 96; plateL = 120;
}
else
{
// Fallback: round up to nearest 12"
plateW = System.Math.Ceiling((maxMinDim + 1) / 12.0) * 12;
plateL = System.Math.Ceiling((maxMaxDim + 1) / 12.0) * 12;
}
// Create one empty plate via PlateDefaults so it inherits settings
nest.PlateDefaults.Size = new Size(plateW, plateL);
var plate = nest.CreatePlate();
plate.Quantity = 1;
Console.WriteLine($" Plate size: {plateW} x {plateL} (W x L)");
Console.WriteLine($" Drawings: {nest.Drawings.Count}");
var outputPath = Path.Combine(outputDir, $"{nestName}.nest");
var writer = new NestWriter(nest);
if (writer.Write(outputPath))
Console.WriteLine($" Saved: {outputPath}");
else
Console.WriteLine($" ERROR: failed to save {outputPath}");
}
Console.WriteLine("\nDone!");