using System;
namespace OpenNest.CNC
{
internal static class PostMarkers
{
///
/// Refuses a nest whose marked programs a post cannot write: every marked part needs the
/// post's , and rejects a malformed
/// program with an .
///
public static void EnsurePostable(Nest nest, bool hasCode, Func isMarked,
Action validate, Func missingCode)
{
ArgumentNullException.ThrowIfNull(nest);
foreach (var plate in nest.Plates)
{
foreach (var part in plate.Parts)
{
if (part?.Program == null || !isMarked(part.Program))
continue;
var name = DisplayPerimeterTail.PartName(part);
if (!hasCode)
throw new InvalidOperationException(missingCode(name));
try
{
validate(part.Program);
}
catch (ArgumentException ex)
{
throw new InvalidOperationException($"{name} cannot be posted: {ex.Message}", ex);
}
}
}
}
}
}