mirror of
https://github.com/ajisaacs/OpenNest.git
synced 2026-10-27 12:41:06 -04:00
Plan Cutting is now the only automatic lead-in assignment, and parts the support grid cannot hold level are reported wherever they lack a steadying tab. - Remove Assign Lead-ins (plate and nest), LeadInAssigner, the lead-in tool's Auto-Assign button and the Auto Tab size range; old settings with autoTab sizes still load - Manual Place Lead-in tabs the clicked entry when support tabs are on and the grid cannot hold the part (SupportTabSettings) - New PartSupport finding: Plan Cutting replay and best-effort plans warn when a drawing pin, a lead-in that does not fit or no single tab leaves a part unsteady; the pre-post review checks each placed program's outside tab gap. These warnings replace the advisory weak-tab notes; only the inside-corner tab note stays advisory, and never for a pin - Pinned perimeters keep their pin but carry the support analysis - Draw grid points as pixel-snapped squares without anti-aliasing - Post fixtures build lead-ins through a test-only TestLeadIns helper - Docs: support tabs, pre-post verification and planner notes Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
35 lines
1.5 KiB
C#
35 lines
1.5 KiB
C#
using System;
|
|
using OpenNest.CNC.CuttingPlanning;
|
|
using OpenNest.CNC.CuttingStrategy;
|
|
|
|
namespace OpenNest.Support
|
|
{
|
|
/// <summary>
|
|
/// Cutting settings for a lead-in placed by hand under
|
|
/// <see cref="CuttingParameters.SupportTabs"/>: the tool cuts where it is clicked, so the
|
|
/// part is tabbed there when its plate's support bed cannot hold it level. Plan Cutting
|
|
/// chooses the tab point itself (docs/support-tabs.md).
|
|
/// </summary>
|
|
public static class SupportTabSettings
|
|
{
|
|
/// <summary>
|
|
/// <paramref name="parameters"/> itself, or a copy with tabs enabled when support tabs are
|
|
/// on, the plate has a support bed, a tab size is set and the bed cannot hold
|
|
/// <paramref name="part"/> level. The caller's settings are never changed.
|
|
/// </summary>
|
|
public static CuttingParameters ForManualLeadIn(CuttingParameters parameters, Plate plate, Part part)
|
|
{
|
|
ArgumentNullException.ThrowIfNull(parameters);
|
|
if (!parameters.SupportTabs || parameters.TabsEnabled || parameters.TabConfig == null
|
|
|| plate?.SupportBed == null || part == null)
|
|
return parameters;
|
|
var support = SupportAnalyzer.Analyze(plate.SupportBed, plate.Quadrant, part);
|
|
if (!support.IsComplete || support.IsSupported)
|
|
return parameters;
|
|
var tabbed = OwnedCuttingParameters.Copy(parameters);
|
|
tabbed.TabsEnabled = true;
|
|
return tabbed;
|
|
}
|
|
}
|
|
}
|