mirror of
https://github.com/ajisaacs/OpenNest.git
synced 2026-11-06 03:45:43 -05:00
With support tabs on and no support bed, nothing was tabbed and nothing said so. A new no-bed width range (NoBedTabMinWidth..NoBedTabMaxWidth, the short side of the part's minimum-area bounding rectangle) now picks the parts to tab instead. SupportTabSettings.Analyze makes the choice for Plan Cutting, hand-placed lead-ins and the pre-post review; without a bed any tab clear of inside corners counts. With no bed and no range, the plan notes that nothing was tabbed. Cutting Settings > Tabs gains the range fields, and the values persist with the cutting parameters. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
101 lines
3.9 KiB
C#
101 lines
3.9 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; }
|
|
|
|
// Older files also stored arcCircleLeadIn/arcCircleLeadOut. Circles now use the internal
|
|
// leads, so those keys are ignored on read and no longer written.
|
|
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 bool SupportTabs { get; set; }
|
|
public double NoBedTabMinWidth { get; set; }
|
|
public double NoBedTabMaxWidth { 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;
|
|
}
|
|
}
|