Files
OpenNest/OpenNest.Core/Shapes/TShape.cs
AJ Isaacs b2a723ca60 feat: add Shape Library UI with configurable shapes and flange presets
Add a Shape Library dialog (Nest > Shape Library) for creating drawings
from built-in parametric shapes. Supports configuration presets loaded
from JSON files — ships with 136 standard pipe flanges. Parameters use
TextBox inputs with architectural unit parsing (feet/inches, fractions).

- ShapeLibraryForm with split layout: shape list, preview, parameters
- ShapePreviewControl for auto-zoom rendering with info overlay
- ArchUnits utility for parsing architectural measurements
- SetPreviewDefaults() on all ShapeDefinition subclasses
- Convention-based config discovery (Configurations/{ShapeName}.json)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-08 07:44:03 -04:00

45 lines
1.3 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 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);
}
}
}