chore: remove one-off NestBuilder tool
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -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>
|
|
||||||
@@ -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!");
|
|
||||||
Reference in New Issue
Block a user