mirror of
https://github.com/ajisaacs/OpenNest.git
synced 2026-11-07 17:45:46 -05:00
Model the machine's support bed as a grid of contact points measured from the plate origin, and check each part's center of gravity against the convex hull of the grid points under its material. The bed is extensible so straight and CAD-imported curved slats can follow. - Core: SupportBed/SupportGrid, SupportMaterial and SupportAnalyzer (margin with registration tolerance, best single tab point) - Nest-wide support bed that every plate follows, saved in plateDefaults.supportBed; machine defaults in support-grid.json - CuttingParameters.SupportTabs: Plan Cutting tabs only unsupported parts and limits their perimeter entries to points where the tab steadies the part, falling back to any fitting entry - Desktop: Nest > Support Grid..., View > Draw Support overlay and a "Tab parts the support grid cannot hold level" tab option - docs/support-tabs.md, nest file format and planner notes Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
100 lines
3.8 KiB
C#
100 lines
3.8 KiB
C#
using OpenNest.CNC.CuttingStrategy;
|
|
|
|
namespace OpenNest.IO;
|
|
|
|
/// <summary>
|
|
/// JSON-safe cutting parameters shared by nest files and desktop settings.
|
|
/// Lead and tab discriminators avoid serializing abstract domain types.
|
|
/// </summary>
|
|
public class CuttingParametersDto
|
|
{
|
|
public int Id { get; set; }
|
|
public string MachineName { get; set; }
|
|
public string MaterialName { get; set; }
|
|
public string Grade { get; set; }
|
|
public double Thickness { get; set; }
|
|
public double Kerf { get; set; }
|
|
public double PartSpacing { get; set; }
|
|
public LeadInDto ExternalLeadIn { get; set; }
|
|
public LeadOutDto ExternalLeadOut { get; set; }
|
|
public LeadInDto InternalLeadIn { get; set; }
|
|
public LeadOutDto InternalLeadOut { get; set; }
|
|
public LeadInDto ArcCircleLeadIn { get; set; }
|
|
public LeadOutDto ArcCircleLeadOut { get; set; }
|
|
public bool TabsEnabled { get; set; }
|
|
|
|
// Legacy settings only stored tabWidth. A missing TabConfig uses that width;
|
|
// Type = "None" explicitly records a null tab in a nest parameter snapshot.
|
|
public double TabWidth { get; set; }
|
|
public TabDto TabConfig { get; set; }
|
|
public double PierceClearance { get; set; }
|
|
public double PierceDiameter { get; set; }
|
|
public bool RoundLeadInAngles { get; set; }
|
|
public double LeadInAngleIncrement { get; set; }
|
|
public double AutoTabMinSize { get; set; }
|
|
public double AutoTabMaxSize { get; set; }
|
|
public bool SupportTabs { get; set; }
|
|
public SequenceDto Sequencing { get; set; } = new();
|
|
public AssignmentDto Assignment { get; set; } = new();
|
|
|
|
public class LeadInDto
|
|
{
|
|
public string Type { get; set; } = "None";
|
|
public double Length { get; set; }
|
|
public double ApproachAngle { get; set; }
|
|
public double Radius { get; set; }
|
|
public double LineLength { get; set; }
|
|
public double ArcRadius { get; set; }
|
|
public double Kerf { get; set; }
|
|
public double Length1 { get; set; }
|
|
public double Angle1 { get; set; }
|
|
public double Length2 { get; set; }
|
|
public double Angle2 { get; set; }
|
|
}
|
|
|
|
public class LeadOutDto
|
|
{
|
|
public string Type { get; set; } = "None";
|
|
public double Length { get; set; }
|
|
public double ApproachAngle { get; set; }
|
|
public double Radius { get; set; }
|
|
public double GapSize { get; set; }
|
|
}
|
|
|
|
public class TabDto
|
|
{
|
|
public string Type { get; set; } = "None";
|
|
public double Size { get; set; }
|
|
public LeadInDto TabLeadIn { get; set; }
|
|
public LeadOutDto TabLeadOut { get; set; }
|
|
public double CutoutMinWidth { get; set; }
|
|
public double CutoutMinHeight { get; set; }
|
|
public double CutoutMaxWidth { get; set; }
|
|
public double CutoutMaxHeight { get; set; }
|
|
public int MachineTabId { get; set; }
|
|
public double BreakerDepth { get; set; }
|
|
public double BreakerLeadInLength { get; set; }
|
|
public double BreakerAngle { get; set; }
|
|
}
|
|
|
|
public class SequenceDto
|
|
{
|
|
public SequenceMethod Method { get; set; } = SequenceMethod.Advanced;
|
|
public double SmallCutoutWidth { get; set; } = 1.5;
|
|
public double SmallCutoutHeight { get; set; } = 1.5;
|
|
public double MediumCutoutWidth { get; set; } = 8.0;
|
|
public double MediumCutoutHeight { get; set; } = 8.0;
|
|
public double DistanceMediumSmall { get; set; }
|
|
public bool AlternateRowsColumns { get; set; } = true;
|
|
public bool AlternateCutoutsWithinRowColumn { get; set; } = true;
|
|
public double MinDistanceBetweenRowsColumns { get; set; } = 0.25;
|
|
}
|
|
|
|
public class AssignmentDto
|
|
{
|
|
public SequenceMethod Method { get; set; } = SequenceMethod.Advanced;
|
|
public string Preference { get; set; } = "ILAT";
|
|
public double MinGeometryLength { get; set; } = 0.01;
|
|
}
|
|
}
|