Files
OpenNest/OpenNest.Core/Shapes/RoundedRectangleShape.cs
T
aj aec0523062 style: apply CSharpier formatting to all C# sources
Repo-wide sweep with the pinned CSharpier 1.3.0 tool. Whitespace and
line-wrapping only; OpenNest.Engine.Tests (109) and OpenNest.IO.Tests
pass after reformat, full solution builds 0 errors.

Added .csharpierignore so csproj/config XML keeps its existing layout
(CSharpier's XML wrapping churns attributes with zero benefit).

Formatting is now enforceable: dotnet csharpier check . passes.
2026-09-20 16:41:50 -04:00

68 lines
2.3 KiB
C#

using System.Collections.Generic;
using OpenNest.Geometry;
using OpenNest.Math;
namespace OpenNest.Shapes
{
public class RoundedRectangleShape : ShapeDefinition
{
public double Length { get; set; }
public double Width { get; set; }
public double Radius { get; set; }
public override string GenerateName() =>
$"Rounded Rectangle {Dim(Length)}x{Dim(Width)} R{Dim(Radius)}";
public override void SetPreviewDefaults()
{
Length = 12;
Width = 6;
Radius = 1;
}
public override Drawing GetDrawing()
{
var r = Radius;
var entities = new List<Entity>();
if (r <= 0)
{
entities.Add(new Line(0, 0, Length, 0));
entities.Add(new Line(Length, 0, Length, Width));
entities.Add(new Line(Length, Width, 0, Width));
entities.Add(new Line(0, Width, 0, 0));
}
else
{
// Bottom edge (left to right, above bottom-left arc to bottom-right arc)
entities.Add(new Line(r, 0, Length - r, 0));
// Bottom-right corner arc: center at (Length-r, r), from 270deg to 360deg
entities.Add(new Arc(Length - r, r, r, Angle.ToRadians(270), Angle.ToRadians(360)));
// Right edge
entities.Add(new Line(Length, r, Length, Width - r));
// Top-right corner arc: center at (Length-r, Width-r), from 0deg to 90deg
entities.Add(
new Arc(Length - r, Width - r, r, Angle.ToRadians(0), Angle.ToRadians(90))
);
// Top edge (right to left)
entities.Add(new Line(Length - r, Width, r, Width));
// Top-left corner arc: center at (r, Width-r), from 90deg to 180deg
entities.Add(new Arc(r, Width - r, r, Angle.ToRadians(90), Angle.ToRadians(180)));
// Left edge
entities.Add(new Line(0, Width - r, 0, r));
// Bottom-left corner arc: center at (r, r), from 180deg to 270deg
entities.Add(new Arc(r, r, r, Angle.ToRadians(180), Angle.ToRadians(270)));
}
return CreateDrawing(entities);
}
}
}