Files
OpenNest/OpenNest.Core/Shapes/TShape.cs
AJ Isaacs 28653e3a9f feat(shapes): generate unique drawing names from parameters and add toolbar button
Shape library drawings now get descriptive names based on their
parameters (e.g. "Rectangle 12x6", "Circle 8 Dia") instead of generic
type names, preventing silent duplicates in the DrawingCollection
HashSet. Added a Shape Library button to the Drawings tab toolbar
and removed separators between toolbar buttons for a cleaner look.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-16 15:48:45 -04:00

47 lines
1.4 KiB
C#

using OpenNest.Geometry;
using System.Collections.Generic;
namespace OpenNest.Shapes
{
public class TShape : ShapeDefinition
{
public double Width { get; set; }
public double Height { get; set; }
public double StemWidth { get; set; }
public double BarHeight { get; set; }
public override string GenerateName() => $"T {Dim(Width)}x{Dim(Height)}";
public override void SetPreviewDefaults()
{
Width = 10;
Height = 8;
StemWidth = 3;
BarHeight = 3;
}
public override Drawing GetDrawing()
{
var sw = StemWidth > 0 ? StemWidth : Width / 3.0;
var bh = BarHeight > 0 ? BarHeight : Height / 3.0;
var stemLeft = (Width - sw) / 2.0;
var stemRight = stemLeft + sw;
var stemTop = Height - bh;
var entities = new List<Entity>
{
new Line(stemLeft, 0, stemRight, 0),
new Line(stemRight, 0, stemRight, stemTop),
new Line(stemRight, stemTop, Width, stemTop),
new Line(Width, stemTop, Width, Height),
new Line(Width, Height, 0, Height),
new Line(0, Height, 0, stemTop),
new Line(0, stemTop, stemLeft, stemTop),
new Line(stemLeft, stemTop, stemLeft, 0)
};
return CreateDrawing(entities);
}
}
}