mirror of
https://github.com/ajisaacs/OpenNest.git
synced 2026-10-27 11:31:07 -04:00
Breakoffs are now picked by their joining line, default to the smaller side as scrap (flippable), and cut that line between tabs on a new Break layer instead of slots. Plan Cutting and Assign Lead-ins enter each cut from the scrap with the nest's internal lead-in, or pierce on the line without one; checks treat break cuts as intentional open cuts that are not material. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
92 lines
3.2 KiB
C#
92 lines
3.2 KiB
C#
using System.ComponentModel;
|
|
using OpenNest.CNC;
|
|
|
|
namespace OpenNest.Posts.GravographIS
|
|
{
|
|
/// <summary>
|
|
/// Cut parameters for one kind of pass (engrave or cut). Edited in the post
|
|
/// configuration PropertyGrid and persisted to JSON.
|
|
/// </summary>
|
|
[TypeConverter(typeof(ExpandableObjectConverter))]
|
|
public sealed class LayerCutConfig
|
|
{
|
|
[DisplayName("Feed (mm/sec)")]
|
|
[Description("XY and Z feed for this pass. Patches the VS and VZ wire commands.")]
|
|
public int FeedMmPerSec { get; set; } = 10;
|
|
|
|
[DisplayName("Depth (inches)")]
|
|
[Description(
|
|
"Programmed Z plunge (DZ). Note: the spring-floated spindle means this does not set actual cut depth — tool protrusion does."
|
|
)]
|
|
public double Depth { get; set; } = 0.25;
|
|
|
|
[DisplayName("Pause Before")]
|
|
[Description(
|
|
"Stop the spindle and prompt the operator before this pass begins, so the tool can be swapped/adjusted."
|
|
)]
|
|
public bool PauseBefore { get; set; }
|
|
|
|
[DisplayName("Pause Message")]
|
|
[Description("Message shown on the controller during the pause.")]
|
|
public string PauseMessage { get; set; } = "";
|
|
|
|
public override string ToString() =>
|
|
$"{FeedMmPerSec} mm/s, {Depth:0.###}\"" + (PauseBefore ? ", pause" : "");
|
|
}
|
|
|
|
/// <summary>
|
|
/// Configuration for the Gravograph IS post processor: one <see cref="LayerCutConfig"/>
|
|
/// per cut kind. The engrave block applies to <see cref="LayerType.Scribe"/> paths,
|
|
/// the cut block to <see cref="LayerType.Cut"/>/<see cref="LayerType.Leadin"/>/<see cref="LayerType.Leadout"/>.
|
|
/// The cut block carries the tool-change pause by default.
|
|
/// </summary>
|
|
public sealed class GravographISPostConfig
|
|
{
|
|
[Category("Engrave (Scribe)")]
|
|
[DisplayName("Engrave")]
|
|
[Description("Parameters for engrave/scribe geometry (text).")]
|
|
public LayerCutConfig Engrave { get; set; } =
|
|
new LayerCutConfig
|
|
{
|
|
FeedMmPerSec = 10,
|
|
Depth = 0.25,
|
|
PauseBefore = false,
|
|
PauseMessage = "",
|
|
};
|
|
|
|
[Category("Cut")]
|
|
[DisplayName("Cut")]
|
|
[Description(
|
|
"Parameters for cut geometry (outlines). Pauses for a tool change by default."
|
|
)]
|
|
public LayerCutConfig Cut { get; set; } =
|
|
new LayerCutConfig
|
|
{
|
|
FeedMmPerSec = 3,
|
|
Depth = 0.25,
|
|
PauseBefore = true,
|
|
PauseMessage = "Change tool",
|
|
};
|
|
|
|
/// <summary>
|
|
/// Returns the cut config a polyline of the given layer should use, or null
|
|
/// if the layer is non-cutting (<see cref="LayerType.Display"/>) and should be skipped.
|
|
/// </summary>
|
|
public LayerCutConfig ConfigFor(LayerType layer)
|
|
{
|
|
switch (layer)
|
|
{
|
|
case LayerType.Scribe:
|
|
return Engrave;
|
|
case LayerType.Cut:
|
|
case LayerType.Break:
|
|
case LayerType.Leadin:
|
|
case LayerType.Leadout:
|
|
return Cut;
|
|
default:
|
|
return null;
|
|
}
|
|
}
|
|
}
|
|
}
|